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

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
 

pierrejean

XLDnaute Barbatruc
bonjour Gibson

E est la 5eme lettre majuscule de l'alphabet A etant la 1ere

teste ceci et je pense que tu comprendras

sinon a ton service pour plus d'explications

Range(Chr(64 + 5) & 1 & ':' & Chr(64 + 1) & Chr(64 + 1) & 1).Select
 
A

AV

Guest
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]
 

Gibson94

Nous a quitté
Repose en paix
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
 

Gibson94

Nous a quitté
Repose en paix
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.
 

pierrejean

XLDnaute Barbatruc
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
 
A

AV

Guest
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]
 
A

AV

Guest
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]
 
A

AV

Guest
@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]
 

Discussions similaires

Réponses
21
Affichages
317
Réponses
7
Affichages
334

Statistiques des forums

Discussions
312 329
Messages
2 087 333
Membres
103 519
dernier inscrit
Thomas_grc11