Récupérer le nom de la colonne dans une feuille EXCEL

Résolu
K29CD Messages postés 4 Date d'inscription mardi 15 juillet 2008 Statut Membre Dernière intervention 30 octobre 2009 - 10 mars 2009 à 09:57
K29CD Messages postés 4 Date d'inscription mardi 15 juillet 2008 Statut Membre Dernière intervention 30 octobre 2009 - 30 oct. 2009 à 00:14
Bonjour,

Je met ce bout de code pour qu'à partir d'un numéro de colonne , on récupère la/les lettres de cette colonne façon "feuille EXCEL" ( par ex : pour 27 --> AA...)

Cette fonction passe l'entier numcol (le n° de colonne lu) comme paramètre
et renvoie la(les) lettre(s) correspondantes

private
string Lettre(
int numcol)

///

///Cette fonction renvoie le nom de la colonne de la Feuille EXCEL

/// ex : n° colonne --> 27

/// chaîne renvoyée --> AA

///{

string c =
"";

char [] Alpha = {
'A',
'B',
'C',
'D',
'E',
'F',
'G',
'H',
'I',
'J',
'K',
'L',
'M',
'N',
'O',
'P',
'Q',
'R',
'S',
'T',
'U',
'V',
'W',
'X',
'Y',
'Z'};

double g = (numcol / 26);

// si le n° de colonne est supérieur à 26

// le nom de la colonne est composée de 2 lettres

if (numcol > 26){

// la première lettre : PARTIE ENTIERE du résultat de la division du n° de colonne par 26

// la seconde lettre : RESTE de la DIVISION par 26 (%26)

// dans les 2 cas, on enlève 1 pour avoir la position correcte dans le tableau Alpha[] (index : 0 à 25)c =

"" + Alpha[
Convert.ToInt32(
Math.Truncate(g))-1]+ Alpha[numcol%26-1];}

else{

c =

"" + Alpha[numcol-1];}

return c;}

J'espère avoir posté dans la bonne section. Sinon, excusez-moi, je suis nouveau par ici...  

K29

3 réponses

cs_semen Messages postés 4 Date d'inscription samedi 30 octobre 2004 Statut Membre Dernière intervention 20 août 2009
20 août 2009 à 08:14
Excuse moi c'est pas ça en fait le problème, je me suis repenché dessus ce matin et il se trouve que finalement ton script est bon sauf quand il arrive a AZ ou BZ ou CZ etc... En clair pour les Z ton modulo trouve 0 donc moi j'ai rajouté quelque chose pour que quand le modulo est 0 sa récupère bien, voila ce qu'il faut changer dans le if(numcol>26):

 if (numcol > 26)
            {
                if ((numcol % 26) == 0)
                {
                    c = "" + Alpha[Convert.ToInt32(Math.Truncate(g)) - 2] + Alpha[(26 % numcol) - 1];
                }
                else
                {
                    c = "" + Alpha[Convert.ToInt32(Math.Truncate(g)) - 1] + Alpha[(numcol % 26) - 1];
                }

            }

J'ai testé et ça fonctionne très bien!
3
cs_semen Messages postés 4 Date d'inscription samedi 30 octobre 2004 Statut Membre Dernière intervention 20 août 2009
19 août 2009 à 13:59
Merci pour ton script il m'a bien servi, sauf que j'ai détecté une erreur, au lieu de mettre numcol%26, il faut mettre 26%numcol, sinon pour la colonne 52 qui est AZ il va trouver 0.
0
K29CD Messages postés 4 Date d'inscription mardi 15 juillet 2008 Statut Membre Dernière intervention 30 octobre 2009 1
30 oct. 2009 à 00:14
Merci Semen !

Je viens de me replonger dans le code (que j'avais abandonné depuis la fin de mon stage en février 2009) et effectivement, il y a bien une erreur.

Merci de ton aide et de ta perspicacité !

K29CD
0
Rejoignez-nous