Suppression de ligne

bonjour

je souhaite supprimer toutes les lignes non commandées d'un bon de commande. Sachant qu'il faut vérifier plusieurs colonne.

j'y arrive parfaitement en verifiant la premiere colonne avec le code suivant :

Sub Masquer_lignes()

Dim x As Integer
For x = 27 To 367
If Range("M" & x) = "" Then
Rows(x).Hidden = True
Else
Rows(x).Hidden = False
End If
Next
End Sub

Mon probleme : je dois verifier aussi les colonnes O et Q.

j'avais pensé faire la somme des colonne M O et Q, et si =0, la ligne disparait, mais je coince.

pourriez vous m'aider?

Par ailleurs premier code est tres lent car il verifie ligne à ligne de 27 à 365. auriez vous une solution plus rapide?

merci

Bonjour,

Savoir si il faut SUPPRIMER ou comme l'indique La macro les MASQUER

Si on supprime, il faut commencer depuis le bas

Savoir ce que contient les colonnes M,O & Q (des chiffres ou lettres et chiffres)

Bonjour,

Comme la plupart du temps le code que vous utilisez n'a qu'un intérêt relatif : Il montre seulement que vous avez tenté quelque chose...

Pour faire mieux une feuille de donnée jointe (anonymisée) serait bienvenue.

Pour faire rapide on évite de travailler sur la feuille elle-même on utilise une copie virtuelle des données. Encore faut-il avoir une idée de la feuille.

Avec une feuille zombie difficile de faire une copie...

Pourquoi 27 ? pourquoi 367 ? Comment est fichue cette feuille ? Qui a-t-il avant et après ces lignes ?

Qu'y a-t-il avant la colonne M et après la colonne Q ? Un état des lieux de chaque colonne est indispensable !

A=

je veux simplement les masquer.

merci

J'arrive à ce que je veux avec

Sub Masquer_lignes()
Dim x As Integer
For x = 27 To 367
If Range("m" & x) + Range("o" & x) + Range("q" & x) = 0 Then
Rows(x).Hidden = True
Else
Rows(x).Hidden = False
End If
Next
End Sub

mais ca prend 20 sec à la macro pour faire le tri.

auriez vous quelque chose de plus rapide?

Au dessus de 27 ce sont des entetes que je veux garder et en dessous de 367 il a les totaux de commande que je veux garder aussi.

M O et Q sont les quantités pour 3 commandes possibles. les autres colonnes sont des prix ou des totaux par commande.

merci

S'il y a beaucoup de lignes à masquer, il n'est pas évident que le gain de temps soit significatif (car -in fine- cela équivaut quand même à parcourir toutes les lignes...)

Rajouter simplement sur la première ligne :

Application.ScreenUpdating = False

et voir le résultat.

Après on peut également tenter :

Sub Masquer_lignes()
Dim Arr, i%
Application.ScreenUpdating = False
Arr = Range("M27:Q367").Value
   For i = 1 To 341
      If Arr(i, 1) + Arr(i, 3) + Arr(i, 5) = 0 Then Rows(i + 26).Hidden = True
   Next
End Sub

Ce qui prend chez moi encore une 'tite dizaine de secondes...

A+

Nota :

Le plus intéressant serait de rajouter une colonne (S par exemple) avec une formule du type :

=M27+O27+Q26

et d'appliquer un filtre automatique qui lui est instantané (Filtre numérique > 0 )

Si le filtre est présent :

ActiveSheet.Range("$A$24:$S$367").AutoFilter Field:=19, Criteria1:=">0"

A+

Merci pour le nouveau code. il fonctionne un peu plus rapidement.

j'avais bien pensé à faire un tri sur une colonne supplementaire mais pas très envie de rajouter une colonne de plus.

Merci pour votre aide.

Rechercher des sujets similaires à "suppression ligne"