Le fonctionnement de lettre = Split

Bonjour ,

J'ai trouvé la solution à mon problème sur le site. CAD trouver la lettre d'un colonne correspondant à la céllule séléectionnée.

lettre = Split(ActiveCell.Offset(0, Selection.Columns.Count - 1).Address, "$")(1)

Cela fonctionne très bien et répond à mes besoins. Toutefois j'ai appliqué la solution proposée sans comprendre comment cela fonctionne. Si quelqu’un pouvait m'expliquer cette fonction, j'aurai l'air moins bête.

Merci pour votre aide.

Jean-Marc Gally

Bonjour

ActiveCell.Offset(0, Selection.Columns.Count - 1).Address

est transformé en tableau avec la fonction split.

Le nombre de valeurs dans le tableau dépend du séparateur, ici le caractère $.

Le (1) à la fin correspond au deuxième enregistrement du tableau, le premier correspondant à l'indice 0.

Lettre est du type variant.

Merci pour ta réponse qui éclaircit beaucoup le contexte avec la notion de tableau basée sur le $ . Mais, un point reste dans l'ombre je ne comprends pas l'utilisation de " ActiveCell.Offset" . Si tu peux préciser, n'hésite pas.

Jean-Marc

bonjour

ActiveCell.Offset(0, Selection.Columns.Count - 1).Address est assez compliqué, activecell.address suffit aussi et le résultat est par exemple $C$1.

Si on divise cela sur le "$", on a 2 parts, le premier est part 0 (parce qu'on commence à compter avec 0) est le "C" et le deuxième, qui est part 1, est le 1.

Si on prend une plage de plusieurs cellules, le résultat sera par exemple $C$5:$D$50 et alors vous avez 4 parts, (index de 0 à 3) CAD "C", "5:", "D" et "50".

Super c'est exactement ce qu'il me fallait comprendre le mécanisme pour adapter la fonction à différents contextes. Avec vos deux explications, je vais pouvoir agir de façon autonome. Merci à vous deux.

Jean-Marc

re,

un autre exemple qui vous montre les parts avec une retour à la ligne et avec des plages différentes et à savoir qu'on commence à compter à 0.

Sub teste()
     Set c = Range("A1:D30,E40:G100,I50:K1000,S:V")     'plage assez "compliquée"
     sp = Split(Replace(Replace(c.Address, ":", ""), ",", ""), "$")
     MsgBox Join(sp, vbLf)
End Sub

EDIT: avec une plage avec plusieurs sous-plages

Bonsoir BsAlv !

Ne manquerait il pas les "$" dans le "texte" de la plage ? Car là le Split avec tous les remplacements se retrouve qu'avec une donnée en indice 0, non ?

@ bientôt

LouReeD

Salut LouReed,

pour moi, c'est encore dimanche soir, je crois, vous avez raison, moi, c'est :

j'ai ajouté ce "mid(...,2)" pour supprimer le premier "$"

Sub teste()
     Set c = Range("A1:D30,E40:G100,I50:K1000,S:V")     'plage assez "compliquée"
     sp = Split(Replace(Replace(Mid(c.Address, 2), ":", ""), ",", ""), "$")
     MsgBox Join(sp, vbLf)
End Sub

En fait non, dans les deux cas cela donne la même chose ! Je me suis trompé dans le sens que c.Address met bien en place les "$" devant chaque particule d'adresse ! Ca m'apprendra à lire un code sans en connaitre le fonctionnement ! Désolé pour mon intervention !

Bonne fin de dimanche alors !

@ bientôt

LouReeD

re,

non LouReed, vous aviez raison !!! Avec la macro de 19:43, sp(0)="" et avec la dernière sp(0)= "A"

Oui à ce niveau, mais pour toutes les adresses le split sur $ donne 0="".
Après si vous ne voulez pas de valeurs vides alors oui vous avez raison avec le MID.

Ma réflexion était sur le fait que la plage n'avait pas de $ donc pour moi pas de split... hors le ".Address" ajoute bien les $ non inscrit dans le Range...

Je me suis bel et bien trompé dans mon intervention !

@ bientôt

LouReeD

Bonsoir,

On peut aussi utiliser (pour l'exemple on prend la cellule active) :

pour la colonne en lettres : Split(ActiveCell.Address(1, 0), "$")(0)

pour la ligne en chiffres : Split(ActiveCell.Address(1, 0), "$")(1)

Rechercher des sujets similaires à "fonctionnement lettre split"