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 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
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 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
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 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
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