Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 01/07/2009, 16h57   #1 (permalink)
Membre du Club
 
Date d'inscription: novembre 2008
Messages: 109
Par défaut Suppression de lignes

Bonjour,

Il faut que j'exécute 3 fois ce code sur ma feuille Histo contenant 388 lignes pour supprimer celles dont je ne trouve pas la référence dans la feuille OF.
Code :
i = Sheets("Histo").Range("B65536").End(xlUp).Row
 
For Each c In Sheets("Histo").Range("A" & i & ":A2")
    Set v = Sheets("OF").Range("G:G").Find(What:= c.Value, LookIn:=xlValues, LookAt:=xlPart)
        If v Is Nothing Then
            k = c.Row
            Rows(k).Delete
            j = j + 1
        End If
Next c
 
MsgBox j & " lignes supprimées"
j = 0
Alors qu'il me suffit d'exécuter une seule fois celui là pour colorer la cellule de la colonne A de la ligne que je voudrais supprimer.
Code :
i = Sheets("Histo").Range("B65536").End(xlUp).Row
 
For Each c In Sheets("Histo").Range("A" & i & ":A2")
    Set v = Sheets("OF").Range("G:G").Find(What:= c.Value, LookIn:=xlValues, LookAt:=xlPart)
        If v Is Nothing Then
            c.Interior.ColorIndex = 4
            j = j + 1
        End If
Next c
Quelqu'un pourrait-il m'expliquer car là je séche

Bruno
Brunodm13 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/07/2009, 17h02   #2 (permalink)
Membre actif
 
Date d'inscription: octobre 2007
Localisation: 29
Messages: 176
Par défaut

Bonjour,

si tu pars du bas vers le haut, n'oublie pas le Step -1

Code :
For Each c In Sheets("Histo").Range("A" & i & ":A2") Step -1
mapeh est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/07/2009, 17h23   #3 (permalink)
Membre du Club
 
Date d'inscription: novembre 2008
Messages: 109
Par défaut

Bonjour mapeh,

merci de ta réponse rapide.
Citation:
Envoyé par mapeh Voir le message
Bonjour,

si tu pars du bas vers le haut, n'oublie pas le Step -1
L'ajout de Step -1 me génère une erreur de compilation : Erreur de syntaxe.

De toute façon, si je fait :
Code :
For Each c In Sheets("HistoriqueGSI").Range("A2:A" & i)
 
le problème est le même.

As-tu une autre idée ?

Bruno
Brunodm13 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/07/2009, 17h31   #4 (permalink)
Membre actif
 
Date d'inscription: octobre 2007
Localisation: 29
Messages: 176
Par défaut

Re-,

essaie avec ce code :

pour une suppression de lignes, il faut toujours aller du bas vers le haut....

Code :
Sub suppr()
Dim Derlig As Long, I As Long
With Sheets("Histo")
    Derlig = .Range("B65536").End(xlUp).Row
 
    For I = Derlig To 2 Step -1
        Set v = Sheets("OF").Range("G:G").Find(What:=.Cells(I, 1).Value, LookIn:=xlValues, LookAt:=xlPart)
        If v Is Nothing Then
            Rows(I).Delete
            j = j + 1
        End If
    Next I
End With
MsgBox j & " lignes supprimées"
j = 0
End Sub
 
mapeh est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/07/2009, 17h46   #5 (permalink)
Membre du Club
 
Date d'inscription: novembre 2008
Messages: 109
Par défaut

Ton code supprime bien les lignes en une seule fois

Je ne comprends toujours pas pourquoi il faut que j'exécute le mien 3 fois pour arriver au même résultat...

Encore une fois

A plus.

Bruno
Brunodm13 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/07/2009, 10h19   #6 (permalink)
Expert Confirmé
 
Avatar de Krovax
 
Date d'inscription: juillet 2008
Localisation: Elsass
Âge: 24
Messages: 1 887
Par défaut

Le problème du for each est qu'il a de haut en bas

Tu test la ligne 1 c'est bon
tu tests la ligne 2 tu la supprime, la ligne 3 monte a la place de la ligne 2
Tu test la ligne 3 (qui est l'ancienne ligne 4)
....

Il y a des ligne que tu ne testera jamais, du coup tu doit lancer le code plusieurs fois Regarde a l'envers ce que cela donne, tu comprendra l'intérêt
Krovax est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/07/2009, 18h03   #7 (permalink)
Membre du Club
 
Date d'inscription: novembre 2008
Messages: 109
Par défaut

Bonjour Krovax,

Citation:
Envoyé par Krovax Voir le message
Le problème du for each est qu'il a de haut en bas
Le For Each qui pose problème teste bien les lignes de bas en haut.
Code :
For Each c In Sheets("Histo").Range("A" & i & ":A2")
Effectivement, au départ, je testais les lignes de haut en bas. Je me suis fait la réflexion qu'effectivement je ratais des lignes tel que tu le décris. Je suis donc passé à un test de bas en haut.

Ce qui est curieux c'est que quelque soit la méthode de test des lignes, le code me supprime 61 lignes, puis 26 et enfin 1.

As-tu une autre idée, car je ne vois pas où se trouve l'erreur.

Cordialement.

Bruno
Brunodm13 est déconnecté   Envoyer un message privé Réponse avec citation
NEWS EXCELF.A.Q EXCELTUTORIELS EXCELSOURCES EXCELOUTILS EXCELLIVRES EXCELOFFICE 2010

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 11h29.


Vos questions techniques : forum d'entraide Excel - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.