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 :

Macro séparation de données après un mot définit [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2021
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Macro séparation de données après un mot définit
    Bonjour,

    J'ai un fichier excel qui après une extraction d'un fichier texte est arrangé avec toutes les données dans une colonne.
    Je voudrais pourvoir séparer ces valeurs pour pouvoir les coller par la suite dans une autre feuille excel.
    Tout ça de façon automatisée avec VBA.
    J'ai d'abord utilisé l'enregistrement de Macro avec le convertisseur de données/largeur fixe.
    Cependant, d'un fichier texte a un autre, la largeur peut être différente et les données ne sont pas séparées comme je le voudais.

    J'aimerais donc si cela est possible avec du code VBA, prendre le contenu d'une colonne après un mot ou une chaine données, et le mettre dans une autre cellule (juxtaposée ou non), plutôt que d'utiliser une conversion par largeur fixe.

    Je joins un fichier exemple pour que ce soit plus clair. J'ai mis la forme que j'ai et la forme que je voudrais.

    Si mon problème n'est pas très clair, je peux donner plus de détail, je débute en VBA
    Fichiers attachés Fichiers attachés

  2. #2
    Membre émérite
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 133
    Points : 2 685
    Points
    2 685
    Par défaut
    Bonjour

    Vous avez un outil dédié dans Excel pour transformer votre fichier source selon vos besoins sans taper une seule ligne de code : allez dans le menu "Données/Récupérer et transformer", "A partir d'un fichier Excel".
    La fenêtre Power Query vous permettra de fractionner la colonne par position ou par délimiteur suivant votre source. Vous pourrez définir les champs texte, date, numérique.. et utiliser vos données dans des tableaux croisés dynamiques
    la richesse de cet outil est énorme : oubliez la solution VBA pour réaliser votre import.

    Précision : cet outil est disponible de base dans les versions Excel depuis quelques années, mais pour 2010 il y un complément à charger. N'hésitez pas, vous gagnerez beaucoup de temps dans de nombreux projets.

    Stéphane

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2021
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci pour votre réponse, mais ce que j'écris n'est qu'une partie de mon travail. Je travaille sur une macro qui va automatiquement remplir un tableau à partir d'un document externe. La macro à lieu d'être car c'est un travail répétitif et cela me permet de gagner du temps.
    De plus, je ne peux pas télécharger de contenu supplémentaire pour mon excel 2010, je ne suis pas administrateur de l'ordinateur de mon stage, pour lequel je réalise ce projet.

    Cependant, je prends bien note de votre réponse pour ma culture et cela me permettra de gagner du temps sur des projets plus personnels

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 095
    Points : 9 581
    Points
    9 581
    Par défaut
    hello,
    Citation Envoyé par lude57 Voir le message
    J'aimerais donc si cela est possible avec du code VBA, prendre le contenu d'une colonne après un mot ou une chaine données, et le mettre dans une autre cellule (juxtaposée ou non), plutôt que d'utiliser une conversion par largeur fixe.
    Je joins un fichier exemple pour que ce soit plus clair. J'ai mis la forme que j'ai et la forme que je voudrais.

    Si mon problème n'est pas très clair, je peux donner plus de détail, je débute en VBA
    On peut faire cela aussi avec des expressions régulières mais cela est assez compliqué et ne fonctionnera que si les délimitateurs de chaînes sont toujours les mêmes et si les données sont toujours de même type. Pour utiliser les expressions régulières en VBA il faut cocher Microsoft VBScript Regular Expressions 5.5 dans les Références.
    Exemple :
    Avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub ExtraireData()
    Chaine = "Référence PDL        :     5159334226100                                           Date d'effet souhaitée :          29/03/2021"
    Set objReg = New RegExp
    objReg.IgnoreCase = Fals
    objReg.Pattern = "([^:]+)[^\d]+(\d+)\s+([^:]+):\s+([\d/]+)"
    Set objMatches = objReg.Execute(Chaine)
    For Each Match In objMatches             'The variable match will contain the full match
        a = Match.Submatches.Count           'total number of groups in the full match
        For i = 0 To a - 1
            Debug.Print Match.Submatches.Item(i)  'display each group
        Next
    Next
    Set objReg = Nothing
    End Sub
    j'obtiens ceci :
    Référence PDL
    5159334226100
    Date d'effet souhaitée
    29/03/2021
    Il y a certainement plus simple en expression régulière

    Ami calmant, J.P

  5. #5
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 952
    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 952
    Points : 5 180
    Points
    5 180
    Par défaut
    bonjour
    astuce à tester sur une copie de ton fichier pour munir contre tout risque de perte données :
    Etape 1 : Remplacer les espace et les deux point avec un code VBA par (|)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()     
        With Sheets("Feuil2")
       .Range("A2:A" & .Range("A" & Rows.Count).End(xlUp).Row).Replace What:="  ", Replacement:="|", LookAt:=xlPart
        .Range("A2:A" & .Range("A" & Rows.Count).End(xlUp).Row).Replace What:=":", Replacement:="|", LookAt:=xlPart
        End With  
    End Sub
    Etape 2 sans VBA :
    selectionner tes données / Onglet Données / Convertir / coché délimité/ suivant / coché Autre et saisir "|" / coché : interpréter des séparateurs identique ..... / suivant / suivant
    et tu aura normalement tes données en bon endroit
    La deuxième étape refaite avec l'enregistreur automatique du macro (avec qq modif) donne ç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
    Sub test()
        With Sheets("Feuil2")
        .Range("A2:A" & .Range("A" & Rows.Count).End(xlUp).Row).Replace What:="  ", Replacement:="|", LookAt:=xlPart
        .Range("A2:A" & .Range("A" & Rows.Count).End(xlUp).Row).Replace What:=":", Replacement:="|", LookAt:=xlPart
     
        For L = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
        .Cells(L, 1).TextToColumns Destination:=Range("A" & L), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
            :="|", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), _
            TrailingMinusNumbers:=True
        Next L
        End With
    End Sub

  6. #6
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2008
    Messages : 59
    Points : 18
    Points
    18
    Par défaut
    Bjr la fonction SPLIT de Excel VBA! Elle permet de couper sur un caratère donné, et magie elle met tous en tableau en AUTO.

    La Fonction TextTocolumns vba le fais aussi... (Equivalent de la fontion CONVERTIR dans Excel).

    Le Livre pour débutant "Macro et Language VBA" trouvable en PDF contiens 1 gros chapitres sur les Fichiers textes, mais oublie la meilleures fonctions VBA : TextTocolumns.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2021
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    J'ai entre temps trouvé une solution qui consiste a faire une feuille que je masque, avec les formules TROUVE() et STXT() combinées. Cela permet d'extraire en continu les infos. Le code VBA permettre simplement d'aller chercher les données dans ces cellules. Je pense que cette solution est intéressante car elle simplifie le code VBA et permet surement de gagner du temps d'exécution du code.
    Cependant je vais tout de même me pencher sur les solutions que vous m'avez proposées qui permet de regrouper tout au même endroit dans le code.

    Bonne continuation, je note cette discussion "Résolue"

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

Discussions similaires

  1. [Batch] Extraire donnée apres un mot précis (batch)
    Par Joebol dans le forum Scripts/Batch
    Réponses: 33
    Dernier message: 30/07/2016, 23h46
  2. [AC-2010] Macro de données après MAJ
    Par Kanigui dans le forum Macros Access
    Réponses: 3
    Dernier message: 22/12/2013, 15h29
  3. [AC-2010] Macro de Données Aprés MAJ
    Par guen dans le forum Macros Access
    Réponses: 4
    Dernier message: 02/12/2013, 11h39
  4. [XL-2002] Message "Pour éviter la perte de données.." apres un RefreshStyle par macro
    Par Williamm dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 12/08/2011, 12h35
  5. peut-on séparer d'une meme cellule des mots apres un mot donné ?
    Par cendrine20 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/01/2009, 18h02

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