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
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.
m@rina
Messages postés21075Date d'inscriptionmardi 12 juin 2007StatutContributeurDernière intervention 3 novembre 202411 344 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
Messages postés21075Date d'inscriptionmardi 12 juin 2007StatutContributeurDernière intervention 3 novembre 202411 344 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.
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.
m@rina
Messages postés21075Date d'inscriptionmardi 12 juin 2007StatutContributeurDernière intervention 3 novembre 202411 344 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
m@rina
Messages postés21075Date d'inscriptionmardi 12 juin 2007StatutContributeurDernière intervention 3 novembre 202411 344 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é.
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
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.