VBA : Fonction appel et fonctionnement, éclaircissement

Résolu/Fermé
NyectoD
Messages postés
23
Date d'inscription
mercredi 2 avril 2014
Statut
Membre
Dernière intervention
6 juin 2014
- 5 mai 2014 à 10:23
eriiic
Messages postés
24393
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
26 mai 2022
- 5 mai 2014 à 17:16
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

michel_m
Messages postés
16570
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
26 mai 2022
3 280
Modifié par michel_m le 5/05/2014 à 10:59
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
eriiic
Messages postés
24393
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
26 mai 2022
7 078
5 mai 2014 à 11:07
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
NyectoD
Messages postés
23
Date d'inscription
mercredi 2 avril 2014
Statut
Membre
Dernière intervention
6 juin 2014
1
5 mai 2014 à 12:44
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...
0
NyectoD
Messages postés
23
Date d'inscription
mercredi 2 avril 2014
Statut
Membre
Dernière intervention
6 juin 2014
1
5 mai 2014 à 16:03
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 !
0
eriiic
Messages postés
24393
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
26 mai 2022
7 078
5 mai 2014 à 17:16
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
0