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 :

Suppression de lignes avec FOR EACH - supprime une ligne sur 2 au lieu de toutes les lignes [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Femme Profil pro
    retraitée
    Inscrit en
    Juin 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : retraitée

    Informations forums :
    Inscription : Juin 2006
    Messages : 147
    Points : 80
    Points
    80
    Par défaut Suppression de lignes avec FOR EACH - supprime une ligne sur 2 au lieu de toutes les lignes
    bonsoir le forum,

    dans mon exemple :

    http://www.cjoint.com/c/FKhrtH8kxfz

    je veux supprimer toutes les lignes de la feuille RESERVATIONS dont la cellule D: est égale à une TextBoxCde (nr de commande)

    cela supprime 1 ligne sur 2 au lieu de toutes les lignes correspondantes

    par contre si je fais la même macro et demande de passer le texte en rouge sur la même condition, cela traite bien toutes les lignes

    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
    '============================================================================================================================
    '3 - SUPPRESSION DE TOUTES LES LIGNES DE LA CDE SORTIE DANS LA FEUILLE RESERVATIONS
    '============================================================================================================================
    Sheets("RESERVATIONS").Select
    Range("D1").Select
    Dim derlig As Long
    Dim cde As Range
     
    With Feuil2 'feuille RESERVATIONS
     
     
            derlig = .Cells(.Rows.Count, "D").End(xlUp).Row
            For Each cde In .Range("D1:D" & derlig)
     
                If UCase(cde.Text) = TextBoxCde.Value Then
                cde.EntireRow.Delete 'supprime une ligne sur 2 ????
                'cde.EntireRow.Font.ColorIndex = 3 'colore bien toutes les lignes
                End If
            Next cde
    End With
    je ne comprends pas pourquoi le delete saute une ligne ?
    Une idée lumineuse à me soumettre ?

    d'avance merci
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Le comportement est normal et logique, une erreur classique et de faire une suppression en partant du haut pour aller vers le bas

    petite exercice de logique pour comprendre :

    - sur une feuille vierge, écrit en A1 le chiffre 1, puis en A2 le chiffre 2, puis en A3 le chiffre 3 etc....
    - supprime la ligne 1, et regarde quelle "ancienne ligne" vient à la ligne 1 dorénavant ... et imagine donc ce que fait ta procédure quand elle fait son deuxième tour de boucle ==> elle va supprimer quelle ligne "réellement" ?



    donc on supprime toujours en partant du bas, et en remontant

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    le mieux c'est d'utiliser un filtre simple non?
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test_filtre()
        With ActiveSheet.Range("D1:D" & Cells(Rows.Count, "D").End(xlUp).Row)  ' plage a adapter
            .AutoFilter Field:=1, Criteria1:="toto"    'mot recherché a adapter
            adresse = .Parent.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Address
            .AutoFilter    ' stop le filtre
            .Range(adresse).EntireRow.Delete
        End With
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/06/2014, 10h07
  2. [XL-2010] toutes les lignes sont vides alors supprimer la feuille
    Par coolmomodu31 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/09/2013, 10h31
  3. Réponses: 4
    Dernier message: 24/01/2013, 14h57
  4. Suppression de toutes les lignes avec cellule vide en colonne A
    Par Cyclemmanuel dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/05/2012, 19h43
  5. Réponses: 22
    Dernier message: 28/10/2010, 17h26

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