IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

incrémentation colonne en lettre


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 238
    Par défaut incrémentation colonne en lettre
    Bonjour a tous,

    J'ai un petit problème,

    Dans un classeur j'ai un Module avec une "option Private Module"
    et dans ce module j'ai toute une liste de colonne
    et je voudrait que chaque colonne soit définie par incrément
    En gros je voudrait en résultat que ca fasse :

    Colonne_1 = "A"
    Colonne_2 = "B"
    Colonne_3 = "C"
    etc..

    mais je ne veux pas que les colonnes soit écrit en dur sur le classeur,
    la première colonne pas de problème mais pas les autres non
    Soit un truc du genre :

    Colonne_1 = "A"
    Colonne_2 = Colonne_1 + 1
    Colonne_3 = Colonne_2 + 1
    etc..

    Mais pour des lettres cela ne fonctionne pas ^^
    N'hésité pas a poser des questions si ce n'est pas clair

    Merci.

  2. #2
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    passe par le code ASCII, ANSI, Unicode des lettres A= 65,B= 66 etc... cf les tables et fonctions.

    cordialement,

    Didier

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    que ce passe-t-il quand la colonne arrive à "Z"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub Test()
    Dim I As Long
    Dim Txt As String
    Txt = ""
    For I = 1 To 100
      Txt = AtoZ(Txt)
      Debug.Print Txt
    Next
    End Sub
    Function AtoZ(ByVal Txt As String, Optional ByVal inx As Long = 0) As String
    Txt = Space(inx + 1) & Txt
        For I = Len(Txt) - inx To 1 Step -1
            If Trim(Mid(Txt, I, 1)) = "" Then Mid(Txt, I, 1) = "A": AtoZ = Txt: Exit Function
            If Trim(Mid(Txt, I, 1)) = "Z" Then Mid(Txt, I, 1) = "A": AtoZ = AtoZ(Txt, inx + 1): Exit Function
            Mid(Txt, I, 1) = Chr(Asc(Mid(Txt, I, 1)) + 1): AtoZ = Trim(Txt): Exit Function
        Next
     
    End Function
    Dernière modification par Invité ; 26/02/2015 à 11h27.

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 238
    Par défaut
    Bonjour et merci a vous deux

    Didier Gonard ,

    Oui, je savais que je devais passer par le code ascii
    mais cela me fait un truc énorme,

    j'ai 215 colonne à définir et à incrémenter.
    toute avec un nom différents
    Je voudrait pas que le code ne soit trop long..

    rdurupt,

    Ton code fonctionne mais vue que ce module me sert de base et que la pluparts de mes codes vont tapé dedans,
    Si je mets une boucle cela va être super long,
    mais j'ai juste fait




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Sub Test()
     
    Dim I As Long
    Dim Txt As String
     
    Txt = ""
    I = 1 
     
    Colonne_1 = AtoZ(Txt)
    Colonne_2 = AtoZ(Colonne_1)
    Colonne_3 = AtoZ(Colonne_2)
     
    End Sub
    Function AtoZ(ByVal Txt As String, Optional ByVal inx As Long = 0) As String
    Txt = Space(inx + 1) & Txt
        For I = Len(Txt) - inx To 1 Step -1
            If Trim(Mid(Txt, I, 1)) = "" Then Mid(Txt, I, 1) = "A": AtoZ = Txt: Exit Function
            If Trim(Mid(Txt, I, 1)) = "Z" Then Mid(Txt, I, 1) = "A": AtoZ = AtoZ(Txt, inx + 1): Exit Function
            Mid(Txt, I, 1) = Chr(Asc(Mid(Txt, I, 1)) + 1): AtoZ = Trim(Txt): Exit Function
        Next
     
    End Function

    Merci en tout cas <3

    Par contre avec cette solution,

    Comment je peux faire si je saute des colonnes
    Ca veux dire que je dois toutes les rentrer.
    alors qu'il y en a qui sont vide et ca me sert a rien de les enregistrer, mais je suis obligé de les laisser.
    Le format n'est pas modifiable.

  5. #5
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, une fonction parmi une myriade.

    NumCol2Lettre(1) : A
    NumCol2Lettre(2147483647) : FXSHRXW

    Ce qui laisse de la marge .....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Option Explicit
     
    Function NumCol2Lettre(iNumCol As Long) As String
    Dim i As Long, sStr As String
        i = iNumCol
        sStr = ""
        Do While i > 0
            sStr = Chr$(((i - 1) Mod 26) + 65) & sStr
            i = (i - 1) \ 26
        Loop
        NumCol2Lettre = sStr
    End Function
    et la réciproque
    Lettre2NumCol(FXSHRXW) = 2147483647

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Explicit
     
    Function Lettre2NumCol(sChaine As String) As Long
    Dim i As Long, ValeurCh As Long, v As Long
    Const sChaineAlpha As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        For i = 1 To Len(sChaine)
            ValeurCh = InStr(1, sChaineAlpha, Mid$(UCase$(sChaine), i, 1))
            v = v * 26 + ValeurCh
        Next i
        Lettre2NumCol = v
    End Function

  6. #6
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Je ne comprends trop rien à la question qui, comme souvent est à tiroir,
    Par contre avec cette solution,

    Comment je peux faire si je saute des colonnes
    Ca veux dire que je dois toutes les rentrer.
    alors qu'il y en a qui sont vide et ca me sert a rien de les enregistrer, mais je suis obligé de les laisser.
    Le format n'est pas modifiable.
    Un projet , ça commence avec un crayon et un papier (ou l'équivalent), un questionnement aussi, donc on analyse sa demande Avant afin de l'exprimer clairement et complètement ( ça s’appelle la programmation Utopique)

    Donc pour le fun uniquement, par rapport au fond, pourquoi se casser la tête, vu que nous sommes sous Excel , utilisons le comme dirait mon ami Pierre

    ça pourrait donner un truc du genre à adapter au contexte , le truc à retenir n'étant que la référence aux colonnes d'Excel Feuille...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Gogo()
    Dim lngNumcol As Long
    Dim strLettreVoulue As String 'lettre qui peut en comporter plusieurs :)
     
    lngNumcol = Int(16384 * Rnd)
    strLettreVoulue = Split(Cells(1, lngNumcol).Address, "$")(1) 'La ligne utile
    Debug.Print strLettreVoulue
    End Sub
    cordialement,

    Didier

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 238
    Par défaut
    Bonjour a toi kiki29

    Ce que tu m'as donnée est exactement ce que je voulais
    je l'ai modifier à ma sauce pour que je comprenne et que cela fonctionne dans mon cas

    Je te remercie


    Ensuite Didier Gonard,

    Le cahier des charges c'est moi qui ai du le faire (alors que je ne suis pas le client)
    Donc niveau cahier et stylo je pense que j'en ai pas mal fait.
    Le questionnement pour une question comme cela je ne vois pas trop l'intérêt, c'est plus la formulation qui est a revoir..
    Effectivement ce que j'ai pondu dans ma réponse juste avant n'était pas bien claire,
    c'est pour cela que au début du poste je vous ais proposer de poser des questions si vous compreniez pas ce que je voulais dire

    Mais bon ce que j'a fonctionne grâce a vous
    et je vous en remercie

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Convertir un numéro de colonne en lettre
    Par zoidy dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 18/04/2017, 22h37
  2. Incrémentation auto : code lettre+chiffres
    Par Mafalda123 dans le forum Modélisation
    Réponses: 11
    Dernier message: 16/07/2008, 16h33
  3. incrémentation colonnes excel
    Par derhy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/07/2007, 11h16
  4. Réponses: 3
    Dernier message: 26/09/2006, 11h33
  5. Réponses: 8
    Dernier message: 15/04/2005, 08h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo