Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, faq, codes sources, astuces pour VBA
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/06/2011, 13h32   #1
Expert Confirmé
 
Avatar de grafikm_fr
 
Inscription : juillet 2003
Messages : 2 393
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 2 393
Points : 2 729
Points : 2 729
Envoyer un message via ICQ à grafikm_fr
Par défaut Bug dans un code la FAQ VBA?

Hello,

J'ai voulu repiquer un code dans la FAQ VBA, plus précisement celui qui concerne le moyen d'obtenir la valeur en lettre de la colonne (ici), et je me suis aperçu qu'il y avait un souci.

En effet, pour les colonnes en "Z" (AZ, BZ etc...) la valeur retournée est incorrecte. Par exemple, pour la colonne 52, la valeur retournée est B@ et non AZ. C'est un effet de bord lié au "Mod 26"

En ce qui me concerne, j'ai modifié le code comme suit:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
Public Function GetColLetter(NumCol As Integer) As String
'obtenir un numéro de colonne
Dim temp As String
 
If NumCol > 26 Then
    temp = IIf(NumCol Mod 26 <> 0, Chr(64 + NumCol \ 26) & Chr(64 + NumCol Mod 26), Chr(63 + NumCol \ 26) & "Z")
Else
    temp = Chr(64 + NumCol)
End If
 
GetColLetter = temp
End Function
Graf.
__________________
"L'éducation, c'est le début de la richesse, et la richesse n'est pas destinée à tout le monde" (Adolphe Thiers)
grafikm_fr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2011, 18h19   #2
Responsable
Office & Excel

 
Avatar de Pierre Fauconnier
 
Homme Pierre Fauconnier
Formateur et développeur informatique indépendant
Inscription : novembre 2003
Messages : 8 198
Détails du profil
Informations personnelles :
Nom : Homme Pierre Fauconnier
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Formateur et développeur informatique indépendant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 8 198
Points : 14 403
Points : 14 403
Envoyer un message via Skype™ à Pierre Fauconnier
Salut.

On va corriger dans la faq. Merci d'avoir signalé...

Tu pourrais utiliser ceci
Code :
1
2
3
4
5
6
Function LettresColonne(Numero As Long)
  Dim Adresse As String
 
  Adresse = Cells(1, Numero).Address(1, 0)
  LettresColonne = Left(Adresse, InStr(1, Adresse, "$") - 1)
End Function
__________________
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------

Ma nouvelle vidéo: comparer des listes via une MFC - Mes articles sur DVP
Vous souhaitez rédiger pour DVP? Contactez-moi
Amoureux de la langue française? Venez corriger nos ressources
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
N'oubliez pas de VOTER (en bas à droite d'un message)

---------------
Pierre Fauconnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 12h52   #3
Expert Confirmé
 
Avatar de grafikm_fr
 
Inscription : juillet 2003
Messages : 2 393
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 2 393
Points : 2 729
Points : 2 729
Envoyer un message via ICQ à grafikm_fr
Citation:
Envoyé par Pierre Fauconnier Voir le message
Tu pourrais utiliser ceci
J'ai préféré fournir une solution qui est dans la même veine que l'entrée d'origine de bidou
Et je préfère aussi avoir une fonction qui ne fait pas appel à un adressage excel (pas de Cells etc...) mais c'est juste mon point de vue, je suis pas sectaire
__________________
"L'éducation, c'est le début de la richesse, et la richesse n'est pas destinée à tout le monde" (Adolphe Thiers)
grafikm_fr est déconnecté   Envoyer un message privé Réponse avec citation 21
Vieux 14/06/2011, 21h01   #4
Responsable
Office & Excel

 
Avatar de Pierre Fauconnier
 
Homme Pierre Fauconnier
Formateur et développeur informatique indépendant
Inscription : novembre 2003
Messages : 8 198
Détails du profil
Informations personnelles :
Nom : Homme Pierre Fauconnier
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Formateur et développeur informatique indépendant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 8 198
Points : 14 403
Points : 14 403
Envoyer un message via Skype™ à Pierre Fauconnier
Avec la solution que je propose, il faut qu'une feuille de calcul soit active pour que la fonction ne plante pas.

A supposer qu'il a au moins une feuille de calcul dans le classeur, on pourrait utiliser
Code :
1
2
3
4
5
6
Function LettresColonne(Numero As Long)
  Dim Adresse As String
 
  Adresse = worksheets(0)Cells(1, Numero).Address(1, 0)
  LettresColonne = Left(Adresse, InStr(1, Adresse, "$") - 1)
End Function
Mais s'il n'y a pas de feuilles de calcul dans le classeur, ma fonction plantera.

C'est donc une bonne raison pour pouvoir préférer un algorithme qui n'utilise pas Cells (ou Range).
__________________
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------

Ma nouvelle vidéo: comparer des listes via une MFC - Mes articles sur DVP
Vous souhaitez rédiger pour DVP? Contactez-moi
Amoureux de la langue française? Venez corriger nos ressources
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
N'oubliez pas de VOTER (en bas à droite d'un message)

---------------
Pierre Fauconnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h53.


 
 
 
 
Partenaires

Hébergement Web