Macro Excel - Suppression lignes à 0

Résolu/Fermé
Caféïne - 4 juin 2008 à 12:26
 Nana - 15 juil. 2022 à 16:20
Bonjour,

Voila le problème:

Je travail dans la logistique sur un ERP. Nous effectuons des extracts sur excel afin d'exploiter les données. Mais à cause d'un bug nous avons des lignes dans excel qui se répète. Nous les supprimons grace à un filtre. pour automatiser la mise en forme du tableau, je mets sur pied une macro. Je voudrais donc supprimer ces lignes. Mais comme je l'ai vu dans d'autres topics, lorsqu'on supprimer une ligne, celle d'en dessous remonte à l'adresse de celle que tu viens de supprimer. Les codes proposés ne me permettent pas de résoudre mon problème (je débute et je ne décrypte pas tout le texte encore).

Pouvez-vous svp m'aider pour corriger ce code.

Sub Macro17()
'
' Macro17 Macro
'
Selection.AutoFilter Field:=7, Criteria1:="0,000"
Selection.AutoFilter Field:=8, Criteria1:="0,000"
Range("D4").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.EntireRow.Delete
ActiveWindow.WindowState = xlNormal
ActiveWindow.WindowState = xlNormal
End Sub


Merci d'avance pour votre aide.

Caféïne

9 réponses

Je confirme il y n'y a pas de différence ni d'espace.
1
m@rina Messages postés 17474 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 29 septembre 2022 10 971
4 juin 2008 à 14:52
Bonjour,

J'ai pas bien compris ton problème... En fait, tu veux supprimer des lignes doublons, c'est ça ?

m@rina
0
Mum c'est un peu plus complexe. Exemple si nous avions la liste suivante

Poulet-frites 03 euro brut 02 euro net
Poulet frites 00 euro brut 00 euro net
Poulet frites 00 euro brut 00 euro net
Poulet frites 00 euro brut 01 euro net

Dans ce cas je voudrais supprimer la ligne 2 et 3. Dans la macro, j'ai donc filtré deux colonnes pour être sur de bien prendre les lignes qui ne servent à rien.

Désolé pour ce pauvre exemple mais je ne peux pas diffuser d'information.

Cordialement.
0
m@rina Messages postés 17474 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 29 septembre 2022 10 971
4 juin 2008 à 15:35
Rebonjour Caféine,

OK, donc admettons que les critères (selon ton exemple) sont dans les colonnes 2 et 4 : si les coloinnes 2 et 4 ont comme valeur 0, on supprime la ligne.

Voici la macro :

Sub supprime()
For Each c In Worksheets("feuil1").Range("B1:B50").Cells 'boucle sur chaque cellulle 1 à 50 de la colonne B
If c.Value = 0 And c.Offset(0, 2).Value = 0 Then 'test sur la cellule de la colonne B puis sur la cellule située 2 colonne plus loin

c.EntireRow.Delete
End If

Next
End Sub

Le mieux serait d'utiliser un nom pour la colonne. Si cette colonne a une taille plus ou moins importante, utiliser un nom avec DECALER.

m@rina
0
Mum ça progresse, mais une fois la macro terminée, il reste toujours des lignes avec un 0 dans les deux colonnes (compris dans mon périmètre)??

Sub supprime()
For Each c In Worksheets("Extract").Range("G1:G360").Cells
If c.Value = 0 And c.Offset(0, 1).Value = 0 Then

c.EntireRow.Delete
End If
Next
End Sub

Merci Marina pour ta réponse et ton aide. J'espère qu'on va arriver au bout.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
m@rina Messages postés 17474 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 29 septembre 2022 10 971
4 juin 2008 à 16:54
La macro supprime la ligne si les deux cellules contiennent la valeur 0.
Dans les 0 qui restent, ce ne sont peut être pas des 0 tout seuls. Vérifie s'il n'y a pas un espace par exemple.

m@rina
0
m@rina Messages postés 17474 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 29 septembre 2022 10 971
4 juin 2008 à 17:17
En plus, même s'il y avait un espace, ça devrait quand même fonctionner car la valeur serait toujours 0...

Les colonnes dans lesquelle tu testes les 0 sont bien les colonnes G et H ?

Si ça ne fonctionne pas, pourrais tu juste extraire une ligne dans un nouveau classeur excel et la mettre là :
https://www.cjoint.com/

m@rina
0
J'observe par contre que si j'active de noveau la macro elle me supprime tous les zéros non annulés. Le mieux serait que cela fonctionne la première fois.

voici le lien:

https://www.cjoint.com/?gerDS8p0uq

Merci encor epour ton aide.
0
m@rina Messages postés 17474 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 29 septembre 2022 10 971
4 juin 2008 à 18:38
Rebonsoir,

Effectivement, j'avais oublié le problème des suppression de lignes dans une boucle... Quand la ligne est supprimée, Excel descend d'une ligne parce qu'elle est supprimée, et descend à nouveau parce que c'est la boucle, et toutes les lignes souhaitées ne sont donc pas supprimées !

Pour pallier ce problème il faut partir du bas :

Sub supprime()
Dim i As Integer
For i = Range("G65000").End(xlUp).Row To 1 Step -1
If Range("G" & i) = 0 Then
If Range("H" & i) = 0 Then
Range("G" & i).EntireRow.Delete
End If
End If
Next

End Sub

m@rina
0

Merci! Ce post est toujours utile 14 années plus tard! :)

0
Merci bcp Marina. Le sujet est résolu.

Juste une dernièer question: comment as-tu approfondi le sujet des macros et VBA? Y a t'il une méthode, un livre que tu conseillerais?
0
m@rina Messages postés 17474 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 29 septembre 2022 10 971
5 juin 2008 à 23:19
Bonsoir Caféine,

C'est difficile de te répondre. Mon parcours personnel est particulier puisque la bureautique est mon métier... Je fias des formations bureautiques depuis longtemps et je suis auteur de bouquins sur Office. Parallèlement à cela, j'ai fait pas mal de développements VBA. Le VBA est un langage de programmation simple, mais évidemment pour quelqu'un qui n'a jamais touché à la programmation, ça ne paraît toutefois pas comme un langage naturel ! :D

Pour commencer, tu peux déjà utiliser l'enregistreur de macros... Mais il faut absolument ensuite aller voir le code et le nettoyer, bien souvent réécrire la syntaxe. L'enregistreur permet néanmoins de voir et de comprendre comment ça fonctionne. Mais il y a bien entendu un certain nombre de choses que l'enregistreur ne sait pas faire, comme par exemple les boucles. Le code que je t'ai donné ne pouvait pas être enregistré.

Il y a beaucoup de livres sur le VBA, Excel en particulier... Beaucoup moins pour les autres applications. Il y en a u n que je trouve bien car pas trop débutant, mais pas trop ardu, et l'intérêt c'est qu'il touche à Excel bien sûr, mais aussi à Word et PowerPoint. C'est le Guide du Codeur édité chez MicroApplication :
https://www.amazon.fr/VBA-pour-Office-2007-applications/dp/2742982450/ref=sr_1_6?ie=UTF8&s=books&qid=1212700499&sr=8-6

L'aide des applications renferment également beaucoup d'exemple et est bien pratique. T trouveras aussi pas mal d'aide sur Internet. Et si tu es très débutant, regarde sur mon site le B A BA du VBA, en particulier le paragraphe "Quelles sont les notions de base pour comprendre le code VBA ?"
http://faqword.free.fr/anacoluthe1/vba_ana.htm

m@rina
0
Parfait merci Marina encore une fois.

Je m'y connais deja pas mal dans EXCEL mais le stade de programmation me dépasse un peu. J'ai pris le réflex d'aller voir le code lorsque j'utilise l'enregistreur de macro.

J'ai plus qu'a passer chze le libraire et décortiquer les sites.

Merci @ bientot.
0