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émenter des chiffres à la fin d'une chaîne de caractères [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2012
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Incrémenter des chiffres à la fin d'une chaîne de caractères
    Bonjour à tous !

    je travaille avec VBA sous Excel 2003 depuis un mois environ, donc je suis encore débutant...

    Je n'ai pas trouvé de réponse à mon problème que voici :

    j'ai une colonne avec une référence de documents du type
    LDE00001
    LDE00002
    ...

    j'aimerais en VBA être capable d'identifier le nombre le plus grand dans cette colonne pour continuer à numéroter mes documents à la suite !

    Ce que je veux faire c'est donc incrémenter ma chaine de caractère qui se termine par des chiffres !!

    (j'aimerais éviter d'avoir à séparer les chiffres des lettres puis concaténer)

    Voilà tout, merci d'avance !!

    Mattouf

  2. #2
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Bonjour,

    Si tes codes sont tous formatés comme dans ton exemple:
    LDE00001
    LDE00002
    ça ne devrait pas trop être compliqué d'extraire la partie numérique (fonction right) et d'identifier l'indice le plus grand dans la colonne

    Par contre je ne comprends pas trop pourquoi tu aimerais
    (éviter d'avoir à séparer les chiffres des lettres puis concaténer)
    Peux tu préciser ta question que l'on puisse t'aider.

    Cordialement.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2012
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci pour la réponse rapide !

    en effet j'avais pensé à ça aussi, mais je veux absolument que ça reste codé sur 5 chiffres, est-ce possible ? (il faut qu'il y ait les "00" au début)

    c'est pour cette même raison que je ne voulais pas séparer pour reconcaténer ensuite, de peur de perdre les premiers "0"

    Merci !

  4. #4
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour, testes ce code et adaptes si ça te plait
    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
    23
    24
    25
    26
    Sub choixmax()
    'ta colonne est en A
    'tes données commencent en A2
    'les données sont dans le désordre
    'ta feuille se nomme "Feuil1"
    Dim derlg As Long, tb, i As Long, valeur As Long
    Dim cible As Variant, y As Long
    With Sheets("Feuil1")
      derlg = .Range("A" & .Rows.Count).End(xlUp).Row
      tb = .Range("A2:A" & derlg)
    End With
    Do
      valeur = 0
      For i = 1 To UBound(tb) - 1
        If tb(i, 1) < tb(i + 1, 1) Then
          cible = tb(i, 1)
          tb(i, 1) = tb(i + 1, 1)
          tb(i + 1, 1) = cible
          valeur = 1
        End If
      Next i
    Loop While valeur = 1
    y = Len(tb(1, 1))
    y = Val(Right(tb(1, 1), y - 3)) + 1
    MsgBox "LDE" & y
    End Sub

  5. #5
    Expert éminent sénior
    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
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, une version bestiale, sans doute à adapter
    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
    Option Explicit
     
    Sub Tst()
    Dim iLastRow As Long
    Dim sStr As String
     
        iLastRow = Feuil1.Range("A" & Rows.Count).End(xlUp).Row
        sStr = CStr(CLng(Mid$(Feuil1.Range("A" & iLastRow), 4)) + 1)
     
        Do
            sStr = "0" & sStr
        Loop Until Len(sStr) = 5
     
        Feuil1.Range("A" & iLastRow + 1) = "LDE" & sStr
     
    End Sub

  6. #6
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Kiki, ta réponse suppose que la colonne soit ordonnée.

    casefayere:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tb(i, 1) < tb(i + 1, 1)
    tu compares des chaines de caractères!

  7. #7
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    tu compares des chaines de caractères!
    Oui, quel est le problème ?, ça fonctionne, j'ai testé

  8. #8
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    oui ton code fonctionne si le préfixe ne change pas

    Testes avec des préfixes différents tu auras des surprises:
    LDE00001 et ADE00002 par exemple.
    Attention également à la casse.

    Je te renvoie à cet excellent tutoriel, partie sur les comparaisons de chaines da caractères: http://silkyroad.developpez.com/VBA/...racteres/#LI-Q

  9. #9
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    OK, je suis d'accord alors espèrons que le préfixe ne change pas sinon une petite adaptation est possible mais j'attends des nouvelles de Mattouf

    Bonne journée

  10. #10
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Pour ma part, je séparerais la partie texte de la partie numérique. Et au niveau de la concaténation, utilise la fonction FORMAT pour être sûr qu'il y ait bien 5 chiffres.
    Pour la partie séparation, si tu as toujours 3 lettres et 5 chiffres c'est facile, sinon il faut parser la chaîne de caractère de droite à gauche jusqu'à trouver un caractère qui n'est pas un chiffre.

  11. #11
    Expert éminent sénior
    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
    Points : 11 274
    Points
    11 274
    Par défaut
    Re, pour l'ordonner ajouter qqch comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Feuil1.Columns("A:A").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
    et là on repart sur une discussion sur les méthodes de tris d'Excel, bref sans fin
    Vérifier que les 3 premeiers caractères sont LDE et non Lde ou lDE etc ...

  12. #12
    Expert éminent
    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
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,
    Citation Envoyé par Mattouf Voir le message
    j'ai une colonne avec une référence de documents du type
    LDE00001
    LDE00002
    etc..
    Ce que je comprend à ta question est qu'à chaque ajout de document, tu veux rechercher le numéro le plus grand pour l'incrémenter, si c'est ça, il ne faut pas procéder ainsi, mais trouver le N° la plus grand une fois pour toutes (cf proposition de Kiki29 par exemple) et créer une cellule Compteur qui sera la base de ta variable compteur et l’incrémenter via ton code comme ceci par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub DGincremente()
    Dim radical As String
    Dim NewID As String
     
    radical = "LDE"
    With Range("MonCompteur")
      .Value = .Value + 1
      NewID = radical & .Text
    End With
    'sauvegarde du fichier
    Debug.Print NewID
    End Sub
    avec une cellule formatée ainsi :
    Nom : Ormonth-Data.jpg
Affichages : 2585
Taille : 65,6 Ko

    Cordialement,

    Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

    Didier

  13. #13
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2012
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Re,

    merci à tous pour vos réponses !! désolé d'avoir fait le mort je suis allé dej et j'avais ensuite une formation !

    Bref, merci issoram pour le tutoriel, je ne savais pas qu'on pouvais comparer des chaines de caractères comme ça ! en plus moi j'aurai toujours les 3 mêmes lettres au début donc c'est parfait ça facilite bien la tâche !

    Merci casefayere pour ton code qui marche bien en effet, mais par contre si je veux que mon code écrive le numéro qui suit, par exemple il a capté que le dernier était LDE00012 et il veut écrire LDE00013, je vois pas comment faire pour qu'il écrive les "0" avant le "13" ?
    je vais essayer de chercher (si vous avez des idées hésitez pas..!!), mais en tout cas merci pour vos réponses qui m'ont bien aidé déjà !

    Mattouf

  14. #14
    Expert éminent
    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
    Points : 6 699
    Points
    6 699
    Par défaut
    bonjour,

    Citation Envoyé par Mattouf Voir le message
    il a capté que le dernier était LDE00012 et il veut écrire LDE00013, je vois pas comment faire pour qu'il écrive les "0" avant le "13" ?
    je vais essayer de chercher (si vous avez des idées hésitez pas..!!), mais en tout cas merci pour vos réponses qui m'ont bien aidé déjà !

    Mattouf
    C'est ce que fait le compteur que je t'ai fournit, si tu le teste
    Nom : Ormonth-Data.jpg
Affichages : 2590
Taille : 33,8 Ko
    Cordialement,

    Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

    Didier

  15. #15
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2012
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Pardon Didier je n'avais pas vu ta réponse !!

    parfait j'ai tous les outils je devrais y arriver !

    dès que ça marche je valide le sujet.

    merci beaucoup encore !!

    Mattouf

  16. #16
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Pour les 0 la fonction FORMAT que t'as conseillée Zèbreloup est bien adaptée.

    Cordialement

  17. #17
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2012
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    encore moi,

    Désolé mais je ne parviens pas à utiliser la fonction FORMAT...?

    vous pourriez m'expliquer svp ? Merci !

  18. #18
    Expert éminent
    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
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,

    à quel niveau, dans la 1ere copie écran, tu as le formatage cellule, en vba, ça donne pour une cellule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("B6").NumberFormat = "00000"
    en pur VBA interne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub DGSoluce()
    Dim varCpteur
     
    varCpteur = 5
     
    varCpteur = Format(varCpteur, "00000")
    Debug.Print varCpteur
    End Sub
    Cordialement,

    Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

    Didier

  19. #19
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2012
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Parfait merci beaucoup !!

    ça marche, un immense merci j'ai gagné pas mal de temps grâce à vous tous

    à bientôt !

    Mattouf

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 31/05/2020, 19h18
  2. Réponses: 1
    Dernier message: 28/01/2014, 10h42
  3. [Turbo Pascal] Remplir une chaîne de caractères avec des chiffres et des lettres majuscules
    Par MoNdEtYnOtEcK dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 03/03/2013, 14h02
  4. Réponses: 4
    Dernier message: 25/09/2007, 12h59
  5. Tri sur une chaîne de caractères contenant des nombres
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/05/2006, 11h52

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