Lettre(s) pour définir une colonne...

  • Initiateur de la discussion Initiateur de la discussion Gibson94
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Gibson94

Nous a quitté
Repose en paix
Bonjour le forum,

En VBA, j'aimerais connaître la ou les lettre(s)... (style L1C1)... qui représente la colonne.

Dans une recherche
For Each C in Range('A1:B10')
Col = C.column ... représente un nombre

Si Col = 5 comment obtenir à la place: Col = 'E'

J'aimerais utiliser cette formule pour ce style de syntaxe

Range('A1:' & Col & '10').select

Merci à vous et bonne journée
 
Salut,

La soution par 'Cells' est évidemment la solution à adopter mais pour répondre strictement à la question (extraction de la lettre de colonne)ton code aurait cette allure :

Sub zz()
For Each c In Range('A1:G10')
x = Split(c.Address, '$')(1)
If x = 'B' Then Range('A1:' & x & '10').Select
Next
End Sub

AV [aaa]
 
Bonjour pierrejean, ERIC S, Pascal, le forum

Merci à tous les deux de m'avoir répondu aussi rapidement.

Je vais utiliser le 'Chr (64)' proposé par pierrejean pour mon problème. Ce qui me donne si DerCol = 22 ... DerColLettre = 'V'. Ce qui me paraît très bien.

DerCol = Range('IV1').End(xlToLeft).Column
DerColLettre = Chr(64 + DerCol)

ou
DerColLettre = Chr(64 + Range('IV1').End(xlToLeft).Column)

Eric, j'utilise toujours 'Cells' en général lorsque ma recherche ne concerne pas une plage.
Aujourd'hui, ma demande est uniquement pour construire l'adresse d'une plage dans un 'For Each...'.

Par exemple:
Si la ligne est en variable
DerLign = Range('A65536').End(xlUp).Row
For Each C In Range('A1:A' & DerLign)


ou
Si la colonne est en variable
DerCol = Range('IV1').End(xlToLeft).Column
DerColLettre = Chr(64 + DerCol)
For Each C In Range('A1:' & DerColLettre & '10')


Je veux bien voir ta proposition avec 'Cells' sur un exemple style ' For Each C in ...'

Juste avant d'envoyer, je vois que Pascal vient de passer et amène cette autre solution avec 'Cells', donc Eric, tu n'as plus besoin de me la donner. Effectivement ces 2 formules ne sont pas plus longues l'une que l'autre, je n'ai plus que l'embarras du choix... lol...

Merci encore à vous trois et bonne journée au forum...

Edition: Salut AV et merci d'apporter ta petite touche perso... je crois que ce coup-ci, je vais pouvoir continuer mon prog sans problème... Enfin, jusqu'au prochain... lol. Je vais utiliser 'Cells'. Allez, pas de régime sans 'cells' pour aujourd'hui.

Message édité par: gibson94, à: 12/05/2006 15:56
 
Re,

Allez, pas de régime sans 'cells' pour aujourd'hui.

Pour cette formule 'For Each...', mon choix devient

DerCol = Range('IV1').End(xlToLeft).Column
For Each C In Range(cells(1,1),cells(5,DerCol))

Si DerCol = 10, Range(cells(1,1),cells(5,DerCol)) devrait faire Range('A1:E10').
Si pas d'erreur, c'est l'bonheur...lol.
 
Salut AV

si tu avais regardé de plus pres le code que j'ai proposé tu aurais constaté que je selectionne la colonne AA

par ailleurs je ne fais jamais d'extrapolation sur les demandes , je me contente de donner une solution pour laquelle je fais un minimum de test

Message édité par: pierrejean, à: 12/05/2006 16:14
 
Re,

'..Dans la macro zz proposée par AV à partir de excel2000 pour le split..''

Tout à fait exact et pour une validité ''toutes versions'' :

x = Left$(c.Address(0, 0), (c.Column < 27) + 2)


PS : A destination de pierrejean :
J'ai beau me tordre l'oeil sur ta ligne de code (Range(Chr(64 + 5) & 1 & ':' & Chr(64 + 1) & Chr(64 + 1) & 1).Select), je ne vois pas l'ombre d'une sélection de la colonne AA !
Mais bon...

AV [aaa]
 
Re Gibson94,

Dans la question initiale (la tienne) l'index de la colonne n'est pas une constante (5) mais une variable ''Col = C.column'' susceptible, par conséquent, de varier de 1 à 256 et donc d'être incompatible avec l'utilisation directe de Chr(xx) pour extraire la lettre de colonne.

PS : Comme il me semble que un rien chagrine, je vais donc sortir de ce fil...
AV [aaa]
 
@pierrejean écrit


''...quel est le role du ‹27 ...''

Explications….. Pour ceux, intéressés :

27 sert à tester si la lettre de colonne est comprise dans les lettres de l'alphabet (A à Z) ou au-delà (AA à IV)
c.Column ‹ 27 est un test logique qui renverra -1 si il est vrai (valeur du True en vba) et 0 s'il est Faux
(c.Column ‹ 27) + 2 est le 2° argument de la fonction left (nbre de caractères à extraire)
Si l'index de colonne est entre 1 et 26 (A et Z), le test logique ''c.Column ‹ 27'' va renvoyer - 1 (True) d'où le + 2 pour que ça fasse 1 et qu'on extrait la première lettre de la chaîne représentant l'adresse relative de la colonne
Si l'index de colonne est entre 27 et 256 (AA et IV), le test logique ''c.Column ‹ 27'' va renvoyer 0 (False) donc on ajoute + 2 pour extraire les 2 premières lettres de la chaîne représentant l'adresse relative de la colonne

AV [aaa]
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
825
  • Question Question
Microsoft 365 Probléme VBA
Réponses
8
Affichages
421
Réponses
21
Affichages
967
Retour