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 :

Simplifier une suite de chiffres


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2018
    Messages : 5
    Par défaut Simplifier une suite de chiffres
    Bonjour à tous

    Pour commencer, merci pour ce forum et les nombreux sujets auxquels vous avez répondus, ils m’ont été très souvent d’une grande aide.

    Alors, je voudrais faire une macro pour simplifier une suite de chiffres qui est dans une cellule et je n’arrive pas à trouver une solution.
    Je m’explique, dans une cellule, exemple "A1" j’ai une suite de chiffres « 1, 2, 3, 5, 6, 9, 11, 12 » et je voudrais supprimer les numéros que se suivent et mettre une flèche entre : « 1->6, 9, 11->12 »
    Avez-vous une idée ?

    Merci pour votre aide !

    Bonne journée

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour
    je sais pas si ça va t'aider au non mais pour scinder ta chaîne de caractère sur plusieurs colonne tu peux faire avec ça :
    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
    Sub extractiondeschiffres()
        Dim Tableau() As String
        Dim i As Integer
        Dim j As Integer
     
        With Sheets("feuil1")
        Tableau = Split(.Cells(1, 1), ",")
        j = 2
        For i = 0 To UBound(Tableau)
            Debug.Print Tableau(i)
             .Cells(1, j) = Tableau(i)
             j = j + 1
        Next i
        End With
    End Sub

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2018
    Messages : 5
    Par défaut
    Bonjour BENNASR

    Merci pour ton aide, j'ai déjà fait une macro qui ressemble à la tienne mais je voulais une macro plus simple et en évitent d’écrire sur ma feuille. Je préférait utiliser des variables.

    Merci!

  4. #4
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonsoir
    j'ai bricolé ça
    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
    27
    28
    29
    30
    Sub test()
     
    Dim Tableau() As String
        Dim i As Integer
        Dim j As Integer
        Dim x
        Dim c
        With Sheets("feuil1")
        Tableau = Split(.Cells(1, 1), ",")
        j = 2
        For i = 0 To UBound(Tableau)
            Debug.Print Tableau(i)
        Next i
        End With
     
     
    Cells(1, 2) = ""
    Dim L As Integer
     
    c = Tableau(0)
    On Error Resume Next
    For L = 0 To UBound(Tableau)
    If Tableau(L + 1) - Tableau(L) <> 1 Then
    x = Tableau(L)
    Cells(1, 2) = Cells(1, 2) & " , " & c & "->" & x
    c = Tableau(L + 1)
    End If
    Next L
     
    End Sub
    Fichiers attachés Fichiers attachés

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    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()
        Debug.Print regroup("1, 2, 3, 5, 6, 9, 11, 12")
    End Sub
     
    Function regroup(s As String) As String
        Dim pl As Range, i As Long, tmp, tmp2
        If s = "" Then regroup = "": Exit Function
        tmp = Split(Application.Trim(s), ",")
        For i = 0 To UBound(tmp)
            If pl Is Nothing Then Set pl = Rows(tmp(i)) Else Set pl = Union(pl, Rows(tmp(i)))
        Next i
        tmp = Split(pl.Address(False, False), ",")
        For i = 0 To UBound(tmp)
            tmp2 = Split(tmp(i), ":")
            If tmp2(0) = tmp2(1) Then tmp(i) = tmp2(0) Else tmp(i) = Join(tmp2, "->")
        Next i
        regroup = Join(tmp, ", ")
    End Function
    fonction à mettre dans un module Standard si tu veux l'appeler depuis une feuille.
    Je ne teste pas si la chaine passée est bien conforme à ce qui est attendu. Ajouter les tests si besoin.
    eric

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2018
    Messages : 5
    Par défaut
    BENNASR et Eriiic

    Je vous remercie beaucoup pour votre aide!!
    J'ai repris la macro d'Eriiic, elle correspondait parfaitement à ce dont j'avais besoin
    J'ai beau venir souvent sur ce forum, vous m'impressionnez toujours autant par votre rapidité et vos solutions!!

    Bon Week-ends

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    bonsoir
    sinon j'ai un doute
    Je m’explique, dans une cellule, exemple "A1" j’ai une suite de chiffres « 1, 2, 3, 5, 6, 9, 11, 12 » et je voudrais supprimer les numéros que se suivent et mettre une flèche entre : « 1->6, 9, 11->12 »
    perso si je prends au pied de la lettre ta demande le resultat devrait etre "2, 5, 9, 11"
    y a pas quelque chose qui te gene dans ton raisonnement et le resultat « 1->6, 9, 11->12 » que tu attends !!!!?????

    chez moi 3 et 5 ne se suivent pas 6 et 9 non plus 9 et 11 non plus

    au pied de la lettre ta demande donne ca "1->3, 5->6, 9, 11->12 "

    ma foi ?????
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Ah ben si tu lis questions avant de répondre aussi... ;-)

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    oui Bonjour eriic

    je te suggere d'en faire tout autant

    Pour commencer, merci pour ce forum et les nombreux sujets auxquels vous avez répondus, ils m’ont été très souvent d’une grande aide.

    Alors, je voudrais faire une macro pour simplifier une suite de chiffres qui est dans une cellule et je n’arrive pas à trouver une solution.
    Je m’explique, dans une cellule, exemple "A1" j’ai une suite de chiffres « 1, 2, 3, 5, 6, 9, 11, 12 » et je voudrais supprimer les numéros que se suivent et mettre une flèche entre : « 1->6, 9, 11->12 »
    Avez-vous une idée ?

    Merci pour votre aide !

    Bonne journée
    je le repete ou on a vu que 3 et 5 se suivent ?????
    le resultat attendu désigné dans la demande ne corespond pas a la demande
    relis la a ton tour et regarde bien le resultat qu'il attend

    parce qu'entre nous si ta logique veut que le 5 doit partir le 6 aussi y a pas de raison il suit bien le 5 que je sache non?????

    ca n'a aucune logique
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    oui tu as raison, je t'ai bien compris dès la première fois.
    C'est juste une faute inattention dans l'exemple à laquelle, c'est vrai, je n'avais pas prêté garde.

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    conclusion il a cliqué résolu avec peut etre un résultat éroné en tout cas tel que présenté c'est faux
    souhaitons que ca ne parle pas de monnaie
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2018
    Messages : 5
    Par défaut
    Bonjour patricktoulon

    Effectivement, je suis allé un peu trop vite dans mon exemple! Très bon sens de l'observation! Merci
    En tout cas, la solution d'Eriiic fonctionne a merveille!!!

    Merci a tous et bonne journée

  13. #13
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    a bon ben voila il est bien que tu revienne le signaler
    c'est important si ton enoncé n'est pas correcte les reponses risquent d'etre erronées

    en attendant comme ca vite fait en 2 secondes si je raisonne logiquement

    une petite boucle de rien du tout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
        chaine = "1,2,3,4,5,6,9,11,12"
        tbl = Split(chaine, ","): tbl2 = tbl
        For i = LBound(tbl2) + 1 To UBound(tbl2) - 1
            If Val(tbl(i)) = Val(tbl(i - 1)) + 1 Then tbl2(i) = "" Else tbl2(i - 1) = tbl(i - 1)
        Next
        Debug.Print Application.Trim(Join(tbl2, " "))
    End Sub
    a tester sur des chaines plus complexes
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/01/2014, 14h26
  2. Réponses: 3
    Dernier message: 27/01/2011, 09h40
  3. Réponses: 2
    Dernier message: 30/06/2010, 17h52
  4. [RegEx] comment prélever une suite de chiffres dans une chaine
    Par thor76160 dans le forum Langage
    Réponses: 2
    Dernier message: 19/03/2010, 11h29
  5. Réponses: 1
    Dernier message: 27/01/2010, 14h17

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