Easy-Micro

ESPACEMEMBRE Variables VBA
Variable objet

Déclaration de variable objet

Une variable objet est une variable qui ne représente pas une valeur mais un objet. C'est tout et n'importe quoi.

Exemple : La cellule est un objet (cellule = Range) donc une variable peut hériter des propriétés de l'objet cellule

'déclaration de variable
Dim UneCellule as Range

'affecte la cellule A2 à la variable UneCellule - Doit être saisie dans une procédure
Set UneCellule = Range("A2") 

'utilisation :
UneCellule.Font.Size = 14.

Exemple 1 - Utilisation de variable objet : Une rechercheV en VBA

1 tableau de 2 colonnes : "Ville" et "Département". La colonne "Département" est vide.
objectif : Assigner les départements dans la colonne B correspondant aux villes de la colonne A
Option Explicit 'déclaration de variable obligatoire
Dim MaCellule As Range 'Cellule recherchée
Dim MaPlage As Range 'Plage de recherche

Sub proc_affecte_departement_aux_villes()

'Initialisation de la plage de recherche
Set MaPlage = Range("A2:A10")

'Pour chaque cellule de ma plage
For Each MaCellule In MaPlage

   If MaCellule = "Bordeaux" Then
   MaCellule.Select
   ActiveCell.Offset(0, 1).Value = "Gironde"
   End If

   If MaCellule = "Paris" Then
   MaCellule.Select
   ActiveCell.Offset(0, 1).Value = "Paris"
   End If

   If MaCellule = "Lyon" Then
   MaCellule.Select
   ActiveCell.Offset(0, 1).Value = "Rhône"
   End If

Next MaCellule

End Sub

Exemple 2 - Utilisation de variable objet : Une rechercheV en VBA

Un tableau à 3 colonnes : N° d'Appart, Code Appart et Statut
La colonne Statut contient soit Vide soit Occupé (voir option casse en haut du module)
Option Explicit 'déclaration de variable obligatoire
Option Compare Text 'ignore la casse

Sub proc_trouve_les_numéros_d_apparts_vides()

'déclaration des variables dont 2 variables objet
Dim UneCellule As Range
Dim MaPlage As Range
Dim i As Integer
Dim int_num_d_appart() As Integer 'tableau dynamique
Dim str_lignes_resultat As String
i = 0

'Initialisation variable objet
Set MaPlage = Range("A1:E50")

'pour chaque cellule dans ma plage
For Each UneCellule In MaPlage

   'si une cellule contient la chaîne vide
   If UneCellule = "VIDE" Then

   UneCellule.Select

   'on se déplace de 2 colonnes vers la gauche
   Selection.Offset(0, -2).Select

   'redimensionne dynamiquement le tableau en gardant les anciennes valeurs (Preserve)
   ReDim Preserve int_num_d_appart(i)

   'on récupère la valeur de la cellule (le numéro d'appart)
   int_num_d_appart(i) = Selection.Value

   i = i + 1

   End If
Next UneCellule


'Affichage des numéros d'apparts dans un MsgBox
For i = 0 To UBound(int_num_d_appart)
   str_lignes_resultat = str_lignes_resultat & Chr(9) & "n° " & int_num_d_appart(i) & Chr(13)

   'Sinon, voici une autre technique d'affichage (dans des cellules): Range("E" & i + 6).Value = int_num_d_appart(i)
Next i

'La MsgBox est en-dehors de la boucle
MsgBox "Voici les numéros d'apparts vides : " & Chr(13) & str_lignes_resultat


End Sub
L'exemple ci-dessus est réalisé en mars 2019 avec messieurs Thomas Bizot et Pierre Turquois

Exemple 3 - Utilisation de variable objet : Une rechercheV en VBA

un tableau avec quatre colonnes : Numéro, Echantillon, Composés et Concentration
Option Explicit

'Déclaration de variables
Dim MaCellule As Range 'Cellule recherchée
Dim MaPlage As Range 'Plage de recherche
Dim Monresultat As Single
Dim i As Integer

Sub proc_recupe_donnees()
' on veut récupérer la concentration si le composé est "DMP" et l'échantillon est "blanc manip"

Sheets("Feuil1").Activate
' initialisation du compteur pour affichage
i = 1

'Initialisation de la plage de recherche
Set MaPlage = Range("B2:C10")

'Pour chaque cellule de ma plage
For Each MaCellule In MaPlage

' Si ma cellule est égale à DMP et à Blanc manip dans la collone de gauche
If MaCellule.Value = "DMP" And MaCellule.Offset(0, -1).Value = "Blanc manip" Then
'  on récupère la valeur de la cellule d'a côté (colonne de droite)
Monresultat = MaCellule.Offset(0, 1).Value

' Affichage des données récupérées
Range("F" & i).Value = Monresultat
Range("F" & i).NumberFormat = "0.00" 'Format à deux décimales
i = i + 1
End If

Next MaCellule

End Sub
Exercice réalisé début décembre 2020 à partir d'un tableau de Philippe Paulin du Service Commun des Laboratoires

Pour aller plus loin voir les Liens avec l'applications Word en VBA


< Page précédente VARIABLES VBA Page suivante >