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 trop rapide? Je dois l'exécuter plusieurs fois pour avoir le bon résultat


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut Macro trop rapide? Je dois l'exécuter plusieurs fois pour avoir le bon résultat
    Bonjour à tous,
    la macro ci-dessous parcourt ligne par ligne ma feuille, et m'efface toutes les lignes pour lesquelles la cellule de la colonne B est différente de la colonne 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
    Sub ajout()
    Dim NoLigneF2, DerniereLigneF2 As Long
    Dim FL2 As Worksheet
     
    Set FL2 = ThisWorkbook.ActiveSheet
     
    DerniereLigneF2 = FL2.Range("A65535").End(xlUp).Row
     
        'Suppression des lignes "vides"
        For NoLigneF2 = 1 To DerniereLigneF2
            If Cells(NoLigneF2, 2) <> Cells(NoLigneF2, 1) Then
                Cells(NoLigneF2, 2).EntireRow.Select
                Selection.Delete Shift:=xlUp
            End If
        Next
    End Sub
    Problème: je dois l'éxécuter plusieurs fois car à chaque fois ele m'"oublie" certaines lignes qu'elle devrait effacer; après 4 ou 5 exécutions (sur un total de 100 lignes) j'obtiens le résultat final que je désirerai initalement.
    Ma question: d'ou vient le problème?
    Comment arriver à un traitement en l'exécutant une unique fois?
    Merci d'avance pour vos réponses,
    M

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Bonjour,

    On ne saurait le dire assez :

    Lorsque l'on supprime des lignes dans une boucle, on bouleverse bien évidemment les numéros de lignes à traiter.

    Solution : commencer par la dernière ligne et remonter vers la première (de cette façon : les numéros des lignes restant à traiter restent identiques, ce qui n'est pas le cas dans le sens inverse)...

    donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For NoLigneF2 = DerniereLigneF2 to 1 step -1

  3. #3
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Salut,

    En ayant simplement survolé ton code, l'erreur vient simplement du fait que si tu supprime ou pas la ligne, tu incrémentes quand même.
    Ce qui fait que tu laisses des lignes que tu devrais supprimer si 2 lignes (ou plus) à supprimer se suivent.

    De tête, si tu supprimes une ligne, tu fais remonter les autres.

    Ex :
    Tu dois supprimer la ligne 4 et 5
    Tu tombes sur la 4.
    Tu supprimes.
    La 5 deviens la 4.
    Mais ton compteur passe à 5 et loupe la ligne 4 à supprimer !!!

    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        For NoLigneF2 = 1 To DerniereLigneF2
            If Cells(NoLigneF2, 2) <> Cells(NoLigneF2, 1) Then
                Cells(NoLigneF2, 2).EntireRow.Select
                Selection.Delete Shift:=xlUp
                NoLigneF2 = NoLigneF2 - 1
            End If
        Next
    Ou comme le dit ucfoutu: tu commences par la fin.

  4. #4
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut
    Merci pour vos réponses!
    A+,
    M

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

Discussions similaires

  1. [XL-2010] macro à exécuter plusieurs fois
    Par jad73 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 24/04/2013, 16h18
  2. scipt pour exécuter plusieurs fois un programme
    Par djocin dans le forum Linux
    Réponses: 5
    Dernier message: 02/05/2011, 04h13
  3. [E-00] Macro trop rapide
    Par vovor dans le forum Macros et VBA Excel
    Réponses: 31
    Dernier message: 11/05/2009, 18h30
  4. Sous-requête excutée plusieurs fois dans une requête
    Par sheridan31 dans le forum Oracle
    Réponses: 8
    Dernier message: 03/07/2006, 16h18
  5. [VBA-E] Liaisons qui ne se mettent pas à jour (macro trop rapide?)
    Par minikisskool dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 21/11/2005, 09h36

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