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 :

Série incrémentée sous forme texte dans fichier CSV [XL-2019]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 50
    Par défaut Série incrémentée sous forme texte dans fichier CSV
    Bonjour,

    J'ai récupéré en CSV un fichier dont la colonne A se présente comme suit

    REFERENCE
    2023-
    2023-
    2023-
    2023-00028
    2023-00027
    ...

    Mon souhait: compléter toutes les cellules incomplètes avec l'incrémentation correcte.

    J'arrive en VBA à retrouver la dernière ligne complète (5), la référence sous forme texte (00028) et sa valeur numérique (28) - pour l'incrémentation -
    Je bloque un peu sur la conversion des nombres incrémentés en texte dans le format désiré(5 chiffres)
    Cstr ? Numberformat ? @ ? probablement, mais où, quand, comment ??

    Merci d'avance pour votre aide,vos suggestions
    Phil.D

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2013
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2013
    Messages : 122
    Par défaut
    Bonjour Phil

    Pour remettre la référence sous le format texte avec 5 caractères numerique
    val = 58
    s= Format(val, "00000")
    Debug.Print s

    l'execution devrait renvoyer
    00058

  3. #3
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 192
    Par défaut
    Hello,
    voici une solution en VBA qui utilise les expressions régulières.
    Il faut que la dernière ligne de la plage de données contienne une chaîne complète.
    Il faut que les valeurs en fin de chaîne s'incrémente de 1 en revenant vers la première ligne de la plage de données.
    La plage de données est une plage nommée MaPlage qui inclut toutes les lignes de données.
    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
    Sub CompleterChaines()
    Dim sht As Worksheet, LastRow As Long, FirstRow As Long
    Dim regEx As Object, Matches As Object, Val(1 To 2), x As Integer, lastVal As Integer
    Set sh = ThisWorkbook.Worksheets("Feuil1")
    FirstRow = sh.Range("MaPlage").Row
    LastRow = sh.Range("MaPlage").Rows.Count + FirstRow - 1
    Set regEx = CreateObject("VBScript.RegExp")
    regEx.Pattern = "(\d+)-(\d*)" ' Expression régulière
             For x = LastRow To FirstRow Step -1
                    ' Recherche d'une correspondance avec l'expression régulière
                    Set Matches = regEx.Execute(sh.Cells(x, 1))
                    If (Matches.Count = 1) Then
                        Val(1) = Matches(0).submatches(0)
                        Val(2) = Matches(0).submatches(1)
                        If Val(2) <> "" Then
                           lastVal = CInt(Val(2))
                        Else
                           sh.Cells(x, 1) = Val(1) + "-" + Format(lastVal, "00000")
                        End If
                        lastVal = lastVal + 1
                        Debug.Print lastVal
                    End If
            Next x
    End Sub
    Nom : CompleterChaines.gif
Affichages : 96
Taille : 50,3 Ko

    Ami calmant, J.P

  4. #4
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 50
    Par défaut
    Salut fraflt69 ,

    juste le coup de pouce espéré, merci à toi
    Ma procédure est maintenant complète, elle repère la dernière référence entière
    puis permet de compléter toutes les cases incomplètes

    Merci à toi

  5. #5
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 50
    Par défaut
    Merci aussi à Jurassik Pork dont j'aperçois la solution à l'instant.

    Du cousu main en finesse, dont je pourrai m'inspirer pour arriver à écrire du code plus propre ...

    Merci

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

Discussions similaires

  1. Rechercher une valeur dans des plages sous forme texte
    Par wd_newbie dans le forum Langage SQL
    Réponses: 3
    Dernier message: 06/02/2019, 20h41
  2. Réponses: 1
    Dernier message: 14/03/2017, 16h53
  3. Réponses: 2
    Dernier message: 16/04/2013, 02h58
  4. Réponses: 2
    Dernier message: 04/05/2008, 20h45
  5. Sauvegarde de données dans fichier csv
    Par issou dans le forum C
    Réponses: 1
    Dernier message: 22/12/2005, 08h36

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