VBA : Fonction appel et fonctionnement, éclaircissement [Résolu/Fermé]

Signaler
Messages postés
23
Date d'inscription
mercredi 2 avril 2014
Statut
Membre
Dernière intervention
6 juin 2014
-
Messages postés
23821
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
28 janvier 2021
-
Bonjour,

Dans mon code VBA, je calcule le nombre de colonnes d'un fichier puis je veux transformer ce nombre en lettres correspondant aux colonnes. Pour cela j'utilise la fonction proposée sur le site de Microsoft (https://docs.microsoft.com/en-us/office/troubleshoot/excel/convert-excel-column-numbers

Function ConvertToLetter(iCol As Integer) As String
   Dim iAlpha As Integer
   Dim iRemainder As Integer
   iAlpha = Int(iCol / 27)
   iRemainder = iCol - (iAlpha * 26)
   If iAlpha > 0 Then
      ConvertToLetter = Chr(iAlpha + 64)
   End If
   If iRemainder > 0 Then
      ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64)
   End If
End Function


J'appelle ensuite dans mon sub la fonction de cette manière :

Lettr = ConvertToLetter(DernColonne)


J'ai aussi essayé de ne pas passer par la variable Lettr et d'intégrer directement l'appel de fonction dans mon test :

Do Until Not IsEmpty(xlBook.Sheets("Feuil1").Range(ConvertToLetter(DernColonne) & DernLigne).Value)


Ma variable DernColonne étant un Integer, pas de soucis de ce côté, je n'ai juste pas le renvoi des lettres voulues et pas de renvoi de lettre tout cours en fait.

Je me demande si j'ai bien déclaré ma fonction et si elle est correctement appelée. Elle se trouve au début de mon code avant le Private Sub d'initialisation de mon UserForm

Je ne sais pas si je suis très clair ? Je reste à disposition pour des précisions.
Merci d'avance.


4 réponses

Messages postés
16376
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
25 janvier 2021
3 122
Bonjour

Tu as 2 manières pour désigner une cellule: "range" que tu as utilisé et qui t'obllge à convertir la colonne en lettre

ou

Cells(ligne, colonne)
dans ton cas
Cells(DernLigne,DernColonne)

Michel
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Messages postés
23821
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
28 janvier 2021
6 601
Bonjour,

et si tu as toujours besoin des lettres des colonnes :
col = 28
lettreCol = Split(Cells(1, col).Address, "$")(1)

Ils ne savent pas faire simple des fois chez MS

eric

1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Messages postés
23
Date d'inscription
mercredi 2 avril 2014
Statut
Membre
Dernière intervention
6 juin 2014
1
Tout d'abord merci à vous deux.

Michel, j'ai essayé de modifier mon test en tenant compte de ta réponse mais ça ne semble pas fonctionner dans mon code. Il faudra que je retouche.

Eric, peux tu m'expliquer comment fonctionne ta ligne, je ne comprends pas tout...
Messages postés
23
Date d'inscription
mercredi 2 avril 2014
Statut
Membre
Dernière intervention
6 juin 2014
1
J'ai corrigé le problème et je me suis servi de la réponse d'Eric, en effet, j'ai besoin des lettres des colonnes pour plus tard.
Sa solution l'emporte donc.

Encore une fois merci et : Résolu !
Messages postés
23821
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
28 janvier 2021
6 601
comment fonctionne ta ligne
Tu as sans doute trouvé depuis :
Avec Cells(1, col).Address tu te fabriques une référence en utilisant le n° de colonne dont tu récupères l'addresse => $AB$1
Il ne reste plus qu'à découper avec Split() pour récupérer les lettres désignant cette colonne.

Et ta fonction tu devrais essayer de la mettre dans un module Standard.

eric