Voi je cherche a trouver les positions des cellules (n° de ligne et n° de colonne) d'une selection de plusieurs cellules dans l'ensemble de la feuille en cours
quelqu'un a une idée? :/
Voi je cherche a trouver les positions des cellules (n° de ligne et n° de colonne) d'une selection de plusieurs cellules dans l'ensemble de la feuille en cours
quelqu'un a une idée? :/
Bonjour,
Essaye ceci :
wape
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Dim Cellule As Range For Each Cellule In Selection MsgBox "Ligne : " & Cellule.Row & vbCrLf & "Colonne : " & Cellule.Column Next Cellule
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Dim rng as Range Dim r as Long Dim c as long For Each rng in Selection r = rng.Row c = rng.Column Next rng
Bonsoir,
Singular, avec ta méthode, tu n’obtiens à la fin de la boucle que la ligne et la colonne de la dernière cellule de la sélection![]()
Merci a tous ca fait plaisir
je viens de tester les 3 méthodeset toutes se valent
(1 adaptation necessaire seulement, juste un détail)
et donc un grand merci a vousje m'attendais pas a une réponse aussi rapide
merki!
Bonjour,
Tu peux utiliser les propriétés Address qui te donneront la combinaison de lettres pour la colonne, et le numéro de ligne, ou Row et Column qui te donneront le numéro de ligne et de colonne pour chaque cellule.
Par exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Sub NumLignesEtColonnes() Dim Mat(), c As Range, i As Integer ReDim Mat(Selection.Count - 1, 1) For Each c In Selection Mat(i, 0) = c.Row Mat(i, 1) = c.Column i = i + 1 Next MsgBox "La dernière cellule de la sélection est sur la " & Mat(i - 1, 0) & "ème ligne," & vbNewLine & "dans la " & Mat(i - 1, 1) & "ème colonne." End Sub
Bonsoir Singular,
Je me doute bien qu’en ajoutant quelque chose dans la boucle on peut obtenir ce que l’on veut !
Mais étant donné la question initiale :
il me semblait plus logique de renseigner une matrice permettant d’avoir accès à l’ensemble des positions à la fin du traitement, c'est tout.
Désolé, Bigalo, mais...
C'est pour les avoir séparément que je fais une boucle. Bien sur, je pourrais toujours passer par:
Mais là, on n'a pas les positions mais plutôt les Ranges séparés.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Dim c As Range For Each c In Selection ' Faire quelque chose avec c Next c
En employant Address, on obtient un String qui est un peu plus compliqué à utiliser que des indices de cellules. Faudrait employer des IIf() et des Split() imbriqués pour en sortir quelque chose.
![]()
Singular,
Nous somme d’accord sur les positions
Si tu examine le code VBA que nous avons proposé tous les 2, il est d’aileurs très proche :
Voici ta boucle :
et voici la mienne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 For Each rng in Selection r = rng.Row c = rng.Column Next rng
J’utilise simplement une matrice qui permet
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 For Each c In Selection Mat(i, 0) = c.Row Mat(i, 1) = c.Column i = i + 1 Next
- avec Mat(1, 0) de stocker le numéro de ligne de la seconde cellule,
- avec Mat(3, 1) de stocker le numéro de colonne de la quatrième cellule,
Cela permet de s’en servir lors de chaque passage dans la boucle, ou plus tard, puisque pour chaque cellule, les numéros de ligne et de colonne sont conservés.
NB - Par défaut dans VBA, les indices d’une matrice ou d’un Array commencent à 0. Mat(0, 0) fait donc référence à la première cellule, et Mat(1, 0) à la seconde.
Vu!
Pour l'indice qui commence à zéro, Option Base 1 au début du module permet aux tableaux de commencer à 1.
Bonsoir,
Là encore, nous sommes d’accord. C'est pour cela que j'ai écrit :
J’utilisais Option Base 1 assez fréquemment quand je suis passé de l’ancien langage macro d’Excel à VBA, puis j’ai complètement cessé par la suite. Avec un peu d’habitude, le fait que des indices commencent à 0 plutôt qu’à 1 devient parfaitement naturel.
Partager