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 :

Supprimer les lignes tant qu'une cellule ne contient pas un mot précis


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2020
    Messages : 25
    Points : 9
    Points
    9
    Par défaut Supprimer les lignes tant qu'une cellule ne contient pas un mot précis
    Bonjour,

    Je souhaite supprimer toutes les lignes tant que la cellule de la colonne B ne contient pas "Total général" en commençant du haut de la feuille (qui s'appelle Bac)
    Il faudrait qu'une fois que "Total général" est trouvé cela s'arrête car il y a un deuxième "Total général" plus bas qui doit rester

    J'ai testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim count, i As Long
    If SheetExists("Bac") Then
    count = Sheets("Bac").Cells(Rows.count, "B").End(xlUp).Row
    i = 1
    Do While i <= count
    If Not Cells(i, 2) = "Total général" Then
    Rows(i).Delete
    End If
    i = i + 1
    Loop
    End If
    Mais cela ne supprime pas les lignes en question

  2. #2
    Membre éprouvé
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Points : 1 141
    Points
    1 141
    Par défaut
    Bonjour,

    Essayez de modifier vos lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Not Cells(i, 2) = "Total général" Then
        Rows(i).Delete
    End If
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Not Cells(1, 2) = "Total général" Then
        Rows(1).Delete
    End If
    Cela devrait suffire.

    Cdt

  3. #3
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Salut

    Citation Envoyé par Ben_L Voir le message
    [...]
    Les codes sont identiques...

    Comme le précise Philippe (qui a supprimé son message depuis ), il est préférable de commencer par le bas sinon, à chaque suppression de ligne, on saute une ligne, puisque les lignes remontent lors de la suppression. Si on souhaite commencer par le haut, il faut "remonter le numéro de ligne" à chaque suppression pour être certain de balayer toutes les lignes.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 765
    Points : 28 623
    Points
    28 623
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    j'ai supprimé mon intervention car la question semble plus complexe s'il faut conserver la deuxième partie de la liste de données contenant le texte Total général
    donc pour résumer
    • la boucle doit être négative, c'est à dire qu'il faut commencer à partir de la dernière ligne et remonter vers la première.
    • Il y a lieu d'utiliser un flag (variable booléenne) qui prendra la valeur True à partir du moment où on détecte le second texte Total général
    • On supprime les lignes di le flag est à True
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Cela dit, il n'est pas forcément nécessaire d'itérer, au vu de ta demande initiale. Tu peux trouver la première cellule qui contient "Total général" et supprimer jusque celle-là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Delete1()
      Dim r As Range
     
      Set r = Range("a:a").Find(what:="Total général", LookIn:=xlValues, lookat:=xlWhole)
      If Not r Is Nothing Then Range("a2:a" & r.Row).EntireRow.Delete
    End Sub
    A adapter par rapport à la colonne de test, la ligne à laquelle tes données commencent et le fait de voir si tu dois garder le 1er "Total général" ou pas...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2020
    Messages : 25
    Points : 9
    Points
    9
    Par défaut
    Tu peux trouver la première cellule qui contient "Total général" et supprimer (les lignes) jusque celle-là:
    Oui tout à fait c'est ce que je cherche, à condition que cela parte du haut de la feuille pour que cela trouve le premier "total général"

    A adapter par rapport à la colonne de test, la ligne à laquelle tes données commencent et le fait de voir si tu dois garder le 1er "Total général" ou pas...
    Le "Total général" se trouve en colonne B/2, mais le nombre de lignes pour arriver jusqu'au "total général" varie selon les fichiers (je souhaite intégrer ce code à ma macro qui fonctionne pour plusieurs fichiers d'un dossier, tous ces fichiers sont constitués des mêmes onglets, mais le nombre de ligne varie)

  7. #7
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    La ligne avec .Find permet de retrouver la première cellule qui contient ce terme. Cette ligne peut donc être mobile d'un fichier à l'autre. Teste mon code dans les différentes configurations que tu rencontres pour voir si c'est ok ou pas. Si NOK, on adaptera en fonction des tes observations
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Es-tu certaine que le code que tu postes est en lien avec le problème dont tu parles?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    La ligne If Not r Is Nothing Then Range("b:b" & r.Row).EntireRow.Delete est incorrecte, car Range("b:b" & r.row) ne saurait pas renvoyer une plage valide. Elle devrait normalement lever un message d'erreur qu'il est intéressant de donner. Si pas de message d'erreur, c'est que le terme "Total général" n'est pas trouvé dans l'entièreté de la cellule. Il est donc important de bien vérifier comment est orthographié ce terme dans Excel, mais aussi de bien vérifier s'il n'y a pas d'espaces en trop, notamment à droite. Pour VBA, "Total général" n'est pas égal à "Total Général" ou à "Total général " (avec un espace derrière "général")...

    Dans mon code, je donnais Range("a2:a" & r.row), pour supprimer la plage allant de la première ligne de données jusqu'à la première qui contient "Total général").

    Il est important de bien analyser et comprendre le code qui est donné. Au besoin, pose des questions.

    Le but de la démarche est donc de trouver, dans la colonne censée contenir les 2 "total Général", la cellule qui contient la première occurrence, puis de supprimer les lignes du début des données jusqu'à la ligne; comprise ou non selon ton besoin.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Membre éprouvé
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Points : 1 141
    Points
    1 141
    Par défaut
    Bonjour à tous,

    Citation Envoyé par Pierre Fauconnier Voir le message
    Les codes sont identiques...
    Les indices "i" ont été transformés en "1".

    Il n'est pas nécessaire d'itérer avec un pas négatif pour réaliser la suppression demandée. Itérer la suppression de la 1ère ligne jusqu'à réalisation du critère est suffisant.

    Une proposition de code ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If SheetExists("Bac") Then
        With Sheets("Bac")
            Do
                .Rows(1).Delete
            Loop While .Cells(1, 2).Text <> "Total général"
        End With
    End If
    Attention, ce code ne vérifie pas l'existence de deux cellules contenant le texte "Total général" en colonne B.
    Si, lors du lancement de la macro, aucune cellule de la colonne B (hors ligne 1) ne contient "Total général", alors l'intégralité de la feuille sera supprimée et la macro bouclera à l'infini.
    Plusieurs moyens de protection sont envisageables si nécessaire.

    Utiliser la fonction Find a l'avantage certain de masquer l'itération et de faciliter la protection du code.

    Cdt

  11. #11
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par Ben_L Voir le message
    [...]
    Les indices "i" ont été transformés en "1".[...]
    Je me disais bien qu'il devait y avoir une différence, mais le nez sur l'écran, je ne l'avais pas aperçue... Au temps pour moi.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  12. #12
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2020
    Messages : 25
    Points : 9
    Points
    9
    Par défaut
    Merci Ben_L,
    cela permet de supprimer les lignes jusqu'au premier "total général". Y aurait-il un moyen de supprimer y compris le premier "total général" ?

  13. #13
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Bonjour à tous

    Citation Envoyé par axlle6 Voir le message
    Merci Ben_L,
    cela permet de supprimer les lignes jusqu'au premier "total général". Y aurait-il un moyen de supprimer y compris le premier "total général" ?
    pas de grosses difficulté si tu as bien compris ce que fait ce code.

    il suffit d'ajouter une ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    If SheetExists("Bac") Then
        With Sheets("Bac")
            Do
                .Rows(1).Delete
            Loop While .Cells(1, 2).Text <> "Total général"
            .Rows(1).Delete
        End With
    End If
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  14. #14
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Ben_L Voir le message
    Bonjour à tous,


    Les indices "i" ont été transformés en "1".

    Il n'est pas nécessaire d'itérer avec un pas négatif pour réaliser la suppression demandée. Itérer la suppression de la 1ère ligne jusqu'à réalisation du critère est suffisant.

    Une proposition de code ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If SheetExists("Bac") Then
        With Sheets("Bac")
            Do
                .Rows(1).Delete
            Loop While .Cells(1, 2).Text <> "Total général"
        End With
    End If
    Attention, ce code ne vérifie pas l'existence de deux cellules contenant le texte "Total général" en colonne B.
    Si, lors du lancement de la macro, aucune cellule de la colonne B (hors ligne 1) ne contient "Total général", alors l'intégralité de la feuille sera supprimée et la macro bouclera à l'infini.
    Plusieurs moyens de protection sont envisageables si nécessaire.

    Utiliser la fonction Find a l'avantage certain de masquer l'itération et de faciliter la protection du code.

    Cdt
    On peut aussi généré une variable Der_Lign que l'on décrémentera à chaque suppression et on ajoutera au test loop while Derlign=1

    Enfin c'est ce que moi je ferais
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  15. #15
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par axlle6 Voir le message
    [...] Y aurait-il un moyen de supprimer y compris le premier "total général" ?
    Le code (deux lignes) que j'ai proposé dans ce message fait cela depuis le 04/08 sans boucle et sans supprimer toutes les lignes s'il ne trouve pas "Total général"

    L'as-tu testé?

    PS: J'ai restauré les messages supprimés, car leur suppression rend caduques certaines réponses
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  16. #16
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2020
    Messages : 25
    Points : 9
    Points
    9
    Par défaut
    Bonjour,
    Le code (deux lignes) que j'ai proposé dans ce message fait cela depuis le 04/08 sans boucle et sans supprimer toutes les lignes s'il ne trouve pas "Total général"
    L'as-tu testé?
    Je l'ai testé mais je n'ai pas eu le résultat que je cherchais.
    Sinon j'ai utilisé le code de Ben_L ce qui donne :

    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
    If SheetExists("Bac") Then
     With Sheets("Bac")
          Do
               .Rows(1).Delete
            Loop While .Cells(1, 2).Text <> "Total général"
        End With
    End If
     
    If SheetExists("Bac") Then
      With Sheets("Bac")
           Do
                .Rows(1).Delete
            Loop While .Cells(1, 2).Text = "Total général"
        End With
    End If
    et supprime des lignes jusqu'au premier total général compris.
    Cependant, il y a un certain nombre de lignes vides (nombre qui varie selon le fichier) qui précèdent la première cellule non vide, et je souhaiterais donc les supprimer

    J'ai ajouté à la suite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'If SheetExists("Bac") Then
    'For r = ActiveSheet.UsedRange.Rows.count To 1 Step -1
    'If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
    'Next r
    'End If
    et cela fonctionne très bien seulement pour le dernier fichier traité (surement à cause du 'activesheet'?) mais pas pour les autres.

    Comment est ce que je pourrais adapter cette formule pour qu'elle traite de cette façon chaque feuille "bac"de chaque fichier ?

  17. #17
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par axlle6 Voir le message
    Bonjour,

    Je l'ai testé mais je n'ai pas eu le résultat que je cherchais.[...]
    C'est "normal" puisqu'apparemment "Total général" doit être recherché dans la colonne B alors que mon code effectue la recherche dans la colonne A. il faut essayer de comprendre les codes fournis et de les adapter à sa propre situation.


    Pour ce qui est de ton problème de lignes vides, tu gagnerais à travailler avec des procédures/Fonctions qui font "une chose". Si tu as besoin de supprimer les lignes vides d'une feuille, tu devrais utiliser une procédure qui supprime les lignes vides de la feuille reçue en paramètre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub DeleteEmptyRows(sh As Worksheet)
      Dim r As Long
      For r = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
        If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
      Next r
    End Sub
    A priori, le test d'existence s'effectue avant l'appel de cette procédure. Tu ne nous dis pas comment tu boucles sur tes classeurs (tu en ouvres plusieurs à la fois que tu parles du dernier?). il serait intéressant que tu donnes le code que tu utilise pour boucler sur les classeurs.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  18. #18
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2020
    Messages : 25
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    C'est "normal" puisqu'apparemment "Total général" doit être recherché dans la colonne B alors que mon code effectue la recherche dans la colonne A. il faut essayer de comprendre les codes fournis et de les adapter à sa propre situation.
    Effectivement le "Total général" est en colonne b et j'ai adapté votre code à ma situation.
    Dans un fichier, cela m'a laissé successivement une ligne non vide, 15 lignes vides, puis la ligne qui devrait être une ligne n°1
    Dans un autre fichier, cela n'a rien modifié

  19. #19
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par axlle6 Voir le message
    [...]
    Dans un fichier, cela m'a laissé successivement une ligne non vide, 15 lignes vides, puis la ligne qui devrait être une ligne n°1
    Dans un autre fichier, cela n'a rien modifié
    Pour la ligne non vide, j'ai commencé la suppression à la ligne 2. A toi d'adapter en commençant de A1 avec If Not r Is Nothing Then Range("a1:a" & r.Row).EntireRow.Delete pour supprimer également la première. L'histoire des lignes vides, je n'y crois pas trop ^^ car les lignes sont supprimées, pas vidées.

    Pour le second fichier, c'est que "Total général" n'est pas bien écrit (un espace qui traine, une majuscule qui manque, ...). Il est possible d'exécuter le code pas à pas pour tester et voir si cellule "Total général" est trouvée. J'ai déjà évoqué ce problème dans un de mes messages.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  20. #20
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Ok, mais tu parles de "dernier classeur" or je ne vois pas de code qui gère "des classeurs"

    Si tu cherches à supprimer les lignes uniquement pour la feuille Bac, il n'est pas nécessaire de boucler sur les feuilles. Tu envoies la feuille Bac à la procédure que je t'ai donnée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If SheetExists("Bac") Then DeleteEmptyRows Worksheets("Bac")
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2016] Supprimer les lignes vides d'une liste déroulante
    Par touch my tralala dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 29/06/2017, 16h49
  2. [XL-2007] Compter les lignes visibles d'une cellule fusionnée
    Par mouftie dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/05/2015, 13h32
  3. [XL-2003] Supprimer la ligne sélectionnée sauf une cellule
    Par MARGAR dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/05/2014, 18h10
  4. Réponses: 5
    Dernier message: 18/03/2009, 12h11
  5. [SQL] Supprimer les lignes d'une table sql
    Par radhwene dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/06/2007, 11h48

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