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 :

Modifier excel avec une macro VBA : supprimer lignes , et séparer les lignes dans des onglets différents


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Créateur d'entreprise
    Inscrit en
    Août 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Créateur d'entreprise
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2016
    Messages : 32
    Par défaut Modifier excel avec une macro VBA : supprimer lignes , et séparer les lignes dans des onglets différents
    Bonsoir,
    Etant (très) débutant dans les macros VBA sur Excel, j'essaie de modifier un excel d'une manière simple et efficace, sur des fichiers importants (plusieurs milliers de lignes) , et plusieurs fois dans une journée (manuellement ce serait sans fin), donc d'essayer d'automatiser un maximum. Après avoir posté ce sujet initialement sur le forum Python, on m'a proposé de le poster ici à la place :

    1 : J'ai des lignes à supprimer en me basant sur le contenu de la cellule de la première colonne. Ces lignes ne se suivent pas, elles sont éparpillées dans le fichier

    Le fichier "source" est comme cela :

    toto texte
    tata texte
    tata texte
    tata texte
    tata texte
    titi texte
    toto texte
    toto texte
    tata texte
    tata texte
    tata texte
    titi texte
    tata texte

    => je dois supprimer toutes les lignes avec "titi" présent dans la première cellule , en sachant que je ne connais pas les numéros de lignes etc et le fichier fait des milliers de lignes, donc pas possible de les noter toutes ou les supprimer une par une

    Cela donnera :
    Toto texte
    tata texte
    tata texte
    tata texte
    tata texte
    toto texte
    toto texte
    tata texte
    tata texte
    tata texte
    tata texte

    2 : Par la suite, je dois mettre les blocs de lignes qui commencent par tata et se finissent par tata dans des onglets séparés dans l'excel :

    tata texte
    tata texte
    tata texte
    tata texte

    tata texte
    tata texte
    tata texte
    tata texte

    Est-ce que cela est faisable avec une macro en VBA ? Si vous avez des idées et conseils pour me faire avancer merci beaucoup !

    Nico

  2. #2
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 539
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 539
    Par défaut
    Bonjour

    Si la liste des non titi est fermée, le plus simple est de faire par PowerQuery (totalement intégré à Excel 2016 et+, en add on sur 2010 et 2013)

    Précise ce que tu entends par éparpillés... elles sont bien dans la même colonne ?

  3. #3
    Membre averti
    Homme Profil pro
    Créateur d'entreprise
    Inscrit en
    Août 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Créateur d'entreprise
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2016
    Messages : 32
    Par défaut
    Bonsoir 78Chris,

    Merci pour ta réponse, je vais regarder PowerQuery. "Ces lignes ne se suivent pas, elles sont éparpillées dans le fichier":oui bien sur, la sélection ne se fait que sur le contenu des cellules de la première colonne. "éparpillées" parmi les autres lignes du fichier

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 157
    Par défaut
    hello,
    pour la première partie je te propose le code VBA suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Supprimer_Lignes()    
        Dim lRow As Long
        Dim iCntr As Long
        lRow = Cells(Rows.Count, 1).End(xlUp).Row
        For iCntr = lRow To 1 Step -1
            If InStr(1, Cells(iCntr, 1).Value, "titi") <> 0 Then
                Rows(iCntr).Delete
            End If
        Next
    End Sub
    Le principe :
    On balaie les lignes de la dernière vers la première car si on le fait de la première vers la dernière avec des suppression de lignes cela ne fonctionnera pas. Quand on repère une cellule de la colonne A qui contient titi on supprime la ligne.

    et voici le résultat :

    Nom : SupLignes.gif
Affichages : 184
Taille : 56,7 Ko

    La deuxième partie n'est pas assez précise :
    Qu'entends-tu par bloc ? des lignes qui commencent par tata et se terminent par quelque chose différent de tata ou une ligne vierge ? Une seule ligne avec tata est-elle considérée comme un bloc ?
    A chaque bloc tu crées une nouvelle feuille avec le contenu de chaque ligne du bloc ? Quel nom est donné aux nouvelles feuilles ?

    Ami calmant, J.P

  5. #5
    Membre averti
    Homme Profil pro
    Créateur d'entreprise
    Inscrit en
    Août 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Créateur d'entreprise
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2016
    Messages : 32
    Par défaut
    Bonjour JP,
    Merci pour le code, je vais tester de mon côté.
    Pour la partie "2", "Qu'entends-tu par bloc ? des lignes qui commencent par tata et se terminent par quelque chose différent de tata ou une ligne vierge ? Une seule ligne avec tata est-elle considérée comme un bloc ?
    A chaque bloc tu crées une nouvelle feuille avec le contenu de chaque ligne du bloc ? Quel nom est donné aux nouvelles feuilles ?
    "
    C'est vrai que ce n'est pas très clair : une fois que les lignes "titi" ont été enlevé, en fait il restera aussi d'autres lignes, "tata" "toto" et d'autres "tutu" etc .... Je dois faire une sélection de "blocs" de lignes qui seront comprise entre un "tata" et un "toto" (et comprenant "tata" et "toto"), toujours les mêmes délimiteurs, les blocs ont des tailles différentes. Idéalement, chaque bloc sera dans un nouvel onglet avec une nom quelconque ce n'est pas important.
    Ces data viennent de capteurs, mais certaines de ces lignes ne servent à rien et je ne veux garder que celles qui ont de l'intérêt : type de capteurs et données. Le schéma est toujours le même, le but est de faire un "nettoyage" et de ne conserver que les lignes ayant de l'intérêt.
    Merci pour ton aide
    Nico

  6. #6
    Membre averti
    Homme Profil pro
    Créateur d'entreprise
    Inscrit en
    Août 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Créateur d'entreprise
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2016
    Messages : 32
    Par défaut
    Sur le script VBA, si tu veux enlever plusieurs lignes en plus de celles avec "titi", comment l'ajouter ? j'ai essayé avec le code ci-dessous mais sans succès, message d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub Supprimer_Lignes()    
        Dim lRow As Long
        Dim iCntr As Long
        lRow = Cells(Rows.Count, 1).End(xlUp).Row
        For iCntr = lRow To 1 Step -1
            If InStr(1, Cells(iCntr, 1).Value, "titi" "tete" "tktk") <> 0 Then
                Rows(iCntr).Delete
            End If
        Next
    End Sub
    Merci
    Nico

  7. #7
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 539
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 539
    Par défaut
    Bonjour à tous
    Citation Envoyé par Nico_projet Voir le message
    C'est vrai que ce n'est pas très clair : une fois que les lignes "titi" ont été enlevé, en fait il restera aussi d'autres lignes, "tata" "toto" et d'autres "tutu" etc .... Je dois faire une sélection de "blocs" de lignes qui seront comprise entre un "tata" et un "toto" (et comprenant "tata" et "toto"), toujours les mêmes délimiteurs, les blocs ont des tailles différentes. Idéalement, chaque bloc sera dans un nouvel onglet avec une nom quelconque ce n'est pas important.
    Ces data viennent de capteurs, mais certaines de ces lignes ne servent à rien et je ne veux garder que celles qui ont de l'intérêt
    Nico
    Si toto, tata, tutu... sont les capteurs fait une table des capteurs à conserver

    Un simple croisement dans PowerQuery de la tables des mesures avec celle des capteurs et c'est fini en quelques clics par capteur...
    Fichiers attachés Fichiers attachés

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 157
    Par défaut
    hello,
    Citation Envoyé par Nico_projet Voir le message
    Sur le script VBA, si tu veux enlever plusieurs lignes en plus de celles avec "titi", comment l'ajouter ? j'ai essayé avec le code ci-dessous mais sans succès, message d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub Supprimer_Lignes()    
        Dim lRow As Long
        Dim iCntr As Long
        lRow = Cells(Rows.Count, 1).End(xlUp).Row
        For iCntr = lRow To 1 Step -1
            If InStr(1, Cells(iCntr, 1).Value, "titi" "tete" "tktk") <> 0 Then
                Rows(iCntr).Delete
            End If
        Next
    End Sub
    Merci
    Nico
    Pour faire de la recherche multi valeurs on peut faire comme cela 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 Supprimer_Lignes()
        Dim lRow As Long
        Dim iCntr As Long
        lRow = Cells(Rows.Count, 1).End(xlUp).Row
        For iCntr = lRow To 1 Step -1
            If InStr(1, Cells(iCntr, 1).Value, "titi") <> 0 Or _
               InStr(1, Cells(iCntr, 1).Value, "tete") <> 0 Or _
               InStr(1, Cells(iCntr, 1).Value, "tktk") <> 0 Then
                Rows(iCntr).Delete
            End If
        Next
    End Sub
    Ami calmant, J.P

  9. #9
    Membre averti
    Homme Profil pro
    Créateur d'entreprise
    Inscrit en
    Août 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Créateur d'entreprise
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2016
    Messages : 32
    Par défaut
    ça marche nickel, merci !

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/03/2021, 18h41
  2. Réponses: 0
    Dernier message: 03/12/2019, 18h34
  3. Parcourir un segment EXCEL PowerPivot avec une macro vba
    Par samizou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/11/2015, 22h59
  4. supprimer un commentaire avec une macro vba
    Par nsqualli dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/11/2008, 15h55
  5. Nouveau problème avec un tableau Excel et une macro VBA
    Par valouche dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 30/06/2007, 10h30

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