VBA : Fonction appel et fonctionnement, éclaircissement

Résolu
NyectoD Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   -  
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   -
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.


A voir également:

4 réponses

michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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   Statut Contributeur Dernière intervention   7 276
 
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   Statut Membre Dernière intervention   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...
0
NyectoD Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   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 !
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
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