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 :

boucle qui ne marche pas


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 13
    Par défaut boucle qui ne marche pas
    Bonjour,
    Je n'arrive pas à faire de boucle, je cherche à trouver tous les mots "total" d'une page et a supprimer La Ligne dans laquel le mot apparaît.
    Voici un code, il fonctionne mais il bug
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For i = 1 To 20
      Cells.Select
        Selection.Find(What:="total", After:=ActiveCell, LookIn:=xlFormulas, _
            lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False).Activate
            ActiveCell.EntireRow.Delete
    Merci de votre aide.

  2. #2
    Membre émérite
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Par défaut
    Bonjour à tous
    Bonjour eudeline91

    Essaie 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
    15
    16
    17
    18
    19
    20
    Sub efface()
    Dim c As Range
    Dim ligne As Integer
     
    With Worksheets("Feuil1").Range("a1:j20")   ' MODIFIER SUIVANT LA PLAGE
     
    mavar = "total"
        Set c = .Find(mavar, LookIn:=xlValues, Lookat:=xlWhole) ' Lookat:=xlwhole => recherche exacte
                                                              ' Lookat:=xlPart  => recherche dans la cellule n'importe où
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                ligne = c.Row
                Range(ligne & ":" & ligne).Delete
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
    End With
     
    End Sub
    Eric

  3. #3
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    bonjour,

    il vaux mieux utiliser findnext pour les recherche suivante

    un peu comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub fra()
     
    Dim c As Range
        Set c = Cells.Find(What:="total", After:=ActiveCell, LookIn:=xlFormulas, _
            lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False)
     
    Do Until c Is Nothing
        c.EntireRow.Delete
        Set c = Cells.FindNext
    Loop
     
    End Sub

  4. #4
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    Quel est ta plage de cellules ?
    Petite remarque, lorsqu'on fait une boucle afin de supprimer des lignes entières, il faut la faire en remontant sinon tu risques qu'il en saute si plusieurs lignes d'affilées.

    Supposons que ta plage de cellules est la colonne D, de la cellule D2 à Dxx, cela donnerait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
    Dim i As Integer '<-- déclaration de la variable i
     
    For i = Cells(Rows.Count, 4).End(xlUp).Row To 2 Step -1 '<-- boucle de la dernière ligne occupée de la colonne D à la ligne 2
        If Cells(i, 4) = "total" Then Rows(i).Delete
    Next
    End Sub

  5. #5
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    D'accord mais dans ce cas ci en supprimant la ligne, il va continuer la recherche sur la ligne suivante.
    Il n'y a aucune raison, qu'il en oublie, vu que si ily en avais d'autre sur la même lignes... elles sont déjà supprimées

    non?


  6. #6
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 13
    Par défaut Merci
    Merci à tous les deux pour votre aide, cela fonctionne. Le deuxième code de mayekeul me semble plus facile à comprendre.
    Merci beaucoup !!

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

Discussions similaires

  1. boucle For qui ne marche pas entiérement
    Par ayms75 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/10/2014, 15h06
  2. Encore une boucle qui ne marche pas
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/04/2011, 09h16
  3. boucle while avec Or qui ne marche pas
    Par tibofo dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 18/01/2009, 23h33
  4. boucle for qui ne marche pas
    Par Invité dans le forum Langage
    Réponses: 16
    Dernier message: 12/06/2006, 10h59
  5. Réponses: 1
    Dernier message: 28/07/2005, 14h21

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