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? :/
Version imprimable
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 :
wapeCode:
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:
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
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:
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, 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 :D
je viens de tester les 3 méthodes :) et toutes se valent :D (1 adaptation necessaire seulement, juste un détail)
et donc un grand merci a vous :) je m'attendais pas a une réponse aussi rapide ;)
merki!
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:
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:
1
2
3
4 For Each rng in Selection r = rng.Row c = rng.Column Next rng
J’utilise simplement une matrice qui permetCode:
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!:king:
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.