Réaliser et comprendre les sélections en VBA !


Quand on se lance dans le VBA, un des point les plus difficile à comprendre est la sélection des cellules, plage de cellule, zone de cellule… bref tout ce qui se rapproche de la sélection en VBA (il y a aussi la déclaration des variables avec laquelle je jongle plus que je ne la maitrise !)

Pour faire une sélection deux méthodes : Le Range(cellule:cellule) ; ou la seconde Cells(ligne,colonne)
Voyons ces méthodes en détail :

Le Range :

Pour faire une sélection d’une cellule simple, ou d’une plage de cellule, le range est le plus facile à utiliser ; on va même le retrouver dans les codes fournis avec l’éditeur de macro.

Comment l’utiliser ? regarder les exemples ci-dessous

  1.  
  2. ‘Sélection d’une cellule simple
  3. Range("A1").select
  4.  
  5. ‘Sélection d’une plage de cellule en mode horizontal
  6. Range("A1:D1").select
  7. ‘ou en mode vertical
  8. Range("A1:D9999").select
  9. ‘ou encore les deux modes
  10. Range("A1:U9999").select
  11.  
  12. ‘Sélection d’une colonne :
  13. Range("A:A").select
  14.  
  15. ‘Selection d’une ligne
  16. Range("1:1").select
  17.  

Jusque là tout est simple, et vous pouvez retrouver le tout sur des forums, des tuto etc…
Maintenant passons aux choses sérieuse !

  1.  
  2. ‘On va attribuer la valeur d’une cellule à une variable
  3. mavariable = range("A1")
  4. ‘attention a bien supprimer le ".select"
  5.  
  6. ‘on va selectionner une plage de cellule en fonction d’une variable
  7. Range("A1:A" & nbdata).select
  8. ‘ou nbdata est le nombre de valeurs à sélectionner
  9. ‘on peut aussi en prendre plus
  10.  
  11. Range("A" & nbdatastart & ":B" & nbdataend).select
  12. ‘ou nbdatastart est la ligne de départ…
  13.  
  14. ‘on peut aller plus loin en sélectionnant une ligne
  15. Range(nbdata &";"& nbdata).select
  16. ”ou nbdata est le numéro de la ligne
  17.  

C’est à peu près tout pour l’utilisation de Range !

Le Cells :

L’utilisation de Cells(a,b) est similaire au Range, tout en étant plus compliqué, et en nous laissant aller plus loin dans nos sélection ! Personnellement je l’utilise dans des loop, ou je vais inscrire des données, a la fois dans des lignes différents, mais aussi dans des colonnes différentes !

Comment utiliser Range ?

  1.  
  2. ’sélectionner une cellule ; ici A1
  3. Cells(1,1).select
  4. ‘Ou B4 !
  5. Cells(4,2).select
  6. ‘Bref cela donne :
  7. Cells([Numéro de la ligne],[Numéro de la colonne (A=1, B=2,...,Z=26]).select
  8.  
  9. ‘on peut aussi faire des cellules contiguës avec un range au milieu !
  10. ‘Pour A1:B9
  11. Range(cells(1,1),cells(9,2)).select
  12.  

On peut faire la même chose avec des variables

  1.  
  2. ‘Pour affecter un nombre à nbdata situé en C2
  3. nbdata = cells(2,3)
  4.  
  5. ‘On peut aussi sélectionner en fonction des variables !
  6. Cells(b,a).select
  7. ‘où b est le numéro de ligne, et a celui de la colonne
  8.  
  9. ‘placé dans un loop cela donne :
  10. For i = 1 To 999
  11.     Cells(i, i).Select
  12.     ActiveCell.FormulaR1C1 = "=RANDBETWEEN(0,999)"
  13. Next i
  14. ‘ce qui donne un truc comme l’image ci-dessous (la fonction RANDBETWEEN(0,999) permet d’afficher un chiffre entre 0 et 999 de manière aléatoire !
  15.  

selection-avec-excel

Vous pouvez bien entendu avoir des utilisations plus utiles et plus complexe de ces fonctions, mais à vous de les trouver maintenant !

Par contre j’ai remarqué que dans certains cas la fonction Cells avait tendance à ne pas fonctionner (par exemple dans le cadre de la mise à jour d’un graphique !)

Pour y remédier, j’ai eu recourt à la fonction qui nous retourne la lettre de la colonne en fonction de l’adresse d’une cellule !
c’est : =GAUCHE(ADRESSE(1;COLONNE([adresse de la cellule]);4);NBCAR(ADRESSE(1;COLONNE([adresse de la cellule]);4))-1)

Ce qui nous permet donc de venir utiliser un Range à la place du select ; ce qui nous donne en VBA :

  1.  
  2. ‘on va coller cette formule dans la cellule A1
  3. Range("A1").Select
  4. ActiveCell.FormulaR1C1 = _
  5. "=LEFT(ADDRESS(1,COLUMN(RC[" & nbcolonne& "]),4),LEN(ADDRESS(1,COLUMN(RC[" & nbcolonne & "]),4))-1)"
  6. ‘ou nbcolonne est le numéro de votre dernière colonne
  7. ‘on vient récupérer cette lettre !
  8. lettrecolonne = range("A1")
  9.  
  10. ‘et on va l’utiliser dans notre sélection :
  11. range("A1:"& lettrecolonne & "9").select        
  12.  

Et voilà !

vous en voyez d’autre ? des questions ?

Tags: , , ,   Posted in excel, office, vba

  • Excel : Évitez les crises d’épilepsie !
  • Créer un annuaire Excel : rechercher dans les contacts en VBA et MYSQL
  • Intégrer sa pub dans le loop wordpress comme un article
  • Mettre du CSS dans vos emailings, oui mais ATTENTION
  • Supprimer les espaces en trop sur Excel !
  • Laisser un commentaire

    Votre commentaire :