Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Passer d'une notation Excel en lettre à une notation en chiffre

4 réponses
Avatar
Roumégou Eric
Bonjour,
j'ai un peu honte mais j'ai passé une ou 2 h hier à cherché un algo qui
me donnerait le n° de colonne quand je lui donnerais sa notation à la
façon par défaut d'excel (A, B, C .. AA,AB, CH ).

C'est pour un import excel, je veux que les utilisateurs localisent
leur colonne en parlant colonne A,B,C etc ... et que le programme
transcrive cela pour les fn XLSDonnées.
Le seul code que j'ai pu pondre est celui là, qui marcherait jusqu'à ZZ
(c'est suffisant, y'a des tarés avec excel mais qd même !) mais je ne
le trouve vraiment pas très clean.


PROCEDURE XLS_NotationLetversNum(pLettre="")
i,w1 est un entier
codasc est un entier=0
taillech est un entier=Taille(pLettre)
SELON taillech
CAS 1 : codasc=Asc(Majuscule(pLettre)) -64
CAS 2 :
codasc=(Asc(Majuscule(Milieu(pLettre,1,1)))-64)*26+Asc(Majuscule(Milieu(pLettre,2,1)))-64
AUTRE CAS
codasc=0
FIN


RENVOYER codasc

Avez vous qq chose de plus beau à me proposer ?

--
Eric Roumégou
Webmaster des wtabletes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)

4 réponses

Avatar
Albert
Bonjour,

Pourquoi ne pas utiliser la classe CExcel qui est très conviviale
et qui utilise cette notation

Exemple de code

// [< Instanciation de la classe Excel >]
oXls est un objet CExcel

// [< Ouverture du classeur / Sélectionner la feuille >]
oXls:Ouvrir(sNomXls)
oXls:SelectionnerFeuille(sFeuille)

// [< Jauge >]
nNbLgn = oXls:sLireValeur("N1")
JAUGE_Encours..BorneMax = nNbLgn
JAUGE_Encours..Visible = Vrai
Multitâche()

// [< Parcours du tableau Xls >]
POUR nLgn = 3 A nNbLgn

sDate = EntierVersDate(oXls:sLireValeur("J" + nLgn )+36523)
sJnl = oXls:sLireValeur("K" + nLgn )

SI Taille(SansEspace(sJnl)) <> 3 ALORS SORTIR

sNoCpte = oXls:sLireValeur("L" + nLgn )
sNote = oXls:sLireValeur("M" + nLgn )
nDébit = oXls:sLireValeur("N" + nLgn )
nCrédit = oXls:sLireValeur("O" + nLgn )
...

Cordialement

Albert
Avatar
Roumégou Eric
Albert avait soumis l'idée :
Bonjour,

Pourquoi ne pas utiliser la classe CExcel qui est très conviviale
et qui utilise cette notation

Exemple de code

// [< Instanciation de la classe Excel >]
oXls est un objet CExcel

// [< Ouverture du classeur / Sélectionner la feuille >]
oXls:Ouvrir(sNomXls)
oXls:SelectionnerFeuille(sFeuille)

// [< Jauge >]
nNbLgn = oXls:sLireValeur("N1")
JAUGE_Encours..BorneMax = nNbLgn
JAUGE_Encours..Visible = Vrai
Multitâche()

// [< Parcours du tableau Xls >]
POUR nLgn = 3 A nNbLgn

sDate = EntierVersDate(oXls:sLireValeur("J" + nLgn )+36523)
sJnl = oXls:sLireValeur("K" + nLgn )

SI Taille(SansEspace(sJnl)) <> 3 ALORS SORTIR

sNoCpte = oXls:sLireValeur("L" + nLgn )
sNote = oXls:sLireValeur("M" + nLgn )
nDébit = oXls:sLireValeur("N" + nLgn )
nCrédit = oXls:sLireValeur("O" + nLgn )
...

Cordialement

Albert



bonjour
j'utilise aussi cette classe mais elle a le gros défaut d'utiliser OLE
et donc de devoir avoir excel installé. Pour un serveur web, c'est
embêtant.

C'est pour cela que j'utilise les fn xls du wlangage ou la classe de
D.daussy qui génère du xls 2.1.

--
Eric Roumégou
Webmaster des wtabletes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Olivier P.
Hello Eric,

en fait, c'est juste une petite formule. Je me suis amusé à pondre le code :

-----------
PROCEDURE NotationExcelVersChiffre(LOCAL sNomColonne est une chaîne)

sNomColonne = Majuscule(sNomColonne)
nNoColonne est un entier

POUR i = 1 _A_ Taille(sNomColonne)
nNoColonne = nNoColonne * 26
nNoColonne += Asc(sNomColonne[[i]]) - 64
FIN

RENVOYER nNoColonne
-----------

Attention, Excel ne supporte que 256 colonnes (c'est déjà pas mal) jusqu'à la version 2003 (en 2007 c'est plus..).
Ce code ne marcherait que jusqu'à ZZ.

A bientôt,

Oliv
Avatar
Roumégou Eric
Après mûre réflexion, Olivier P. a écrit :
Hello Eric,

en fait, c'est juste une petite formule. Je me suis amusé à pondre le code :

-----------
PROCEDURE NotationExcelVersChiffre(LOCAL sNomColonne est une chaîne)

sNomColonne = Majuscule(sNomColonne)
nNoColonne est un entier

POUR i = 1 _A_ Taille(sNomColonne)
nNoColonne = nNoColonne * 26
nNoColonne += Asc(sNomColonne[[i]]) - 64
FIN

RENVOYER nNoColonne
-----------

Attention, Excel ne supporte que 256 colonnes (c'est déjà pas mal) jusqu'à la
version 2003 (en 2007 c'est plus..). Ce code ne marcherait que jusqu'à ZZ.

A bientôt,

Oliv



Bonjour,
Merci de ta réponse.
je crois que j'avais fait le meme code que toi sur mes premiers essais
mais il ne fonctionnait pas.
je vais le retester dès que j'ai un moment

--
Eric Roumégou
Webmaster des wtabletes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)