Suppression zero sur plusieurs colonnes
Bonjour à tous
Je viens vers vous après plusieurs heures de recherches infructueuses, je débute en VBA et j'ai le problème suivant :
J'extrais d'une base de données plusieurs colonnes d'informations, sur la plupart d'entres-elles j'obtiens des zéros sur chaque ligne et j'aimerais supprimer les lignes où je n'ai que des zéro.
voici le code que j'ai réalisé mais il n'est pas optimisé et il y a sans doute une meilleure manière de faire
Sub Test()
Dim i As Long
Application.ScreenUpdating = False
i = 65000
Do While Range("B" & i) = 0
If Range("C" & i) = 0 And Range("D" & i) = 0 ...jusque I Then
Rows(i).EntireRow.Delete
i = i - 1
End If
i = i + 1
Loop
End Sub
Je vous remercie d'avance pour votre aide
Bonjour,
Sub Test()
Dim i As Long, n As Long
Application.ScreenUpdating = False
With ActiveSheet
n = .Cells(.Rows.Count, 2).End(xlUp).Row
For i = 1 To n
If WorksheetFunction.Sum(.Cells(i, 2).Resize(, 8)) = 0 Then _
.Cells(i, 2).ClearContents
Next i
.Range("B1:B" & n).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
End SubEn l'absence de fichier, sous réserve que les colonne B à I contiennent des valeurs numériques...
Si la ligne 1 est une ligne d'en-tête, faire partir la boucle de 2 et non de 1 (sinon la ligne 1 sera supprimée !)
Si macro lancée à partir d'une autre feuille (bouton...) remplacer activesheet par la désignation de la feuille.
Cordialement.
ça fonctionne magnifiquement bien je vous remercie, néanmoins j'ai du mal a comprendre la plupart du code. Je me forme sur un tuto venant d'openclassroom mais cela reste les bases, pourriez vous m'aiguiller vers un tuto pour les confirmés ? Mon projet s'annonce compliqué et je ne vais pas venir poster ici à chaque fois que je rencontre un problème.
Encore merci
Je me souviens avoir émis quelque critique sur OpenClassRoom sur un autre sujet il y a peu de temps.
Non pas sur les explications, qui sont excellentes, mais sur quelques à côtés. En particulier 2 éléments :
D'abord dire que l'on n'a pas besoin de désigner la feuille dans une expression parce que l'on s'y trouve et qu'elle est la feuille active, ce qui incite le débutant à ne pas qualifier ses expressions s'il n'y est pas expressément obligé, soit à produire un code approximatif et nécessairement plus lent.
Ensuite le choix des premiers exemples sur les méthodes Select et Activate, ce que je considère inciter à les utiliser alors qu'il est toujours préférable de s'en dispenser si ce n'est pas l'objectif unique de l'action...
En ce qui concerne la procédure de suppression, elle est assez simple. Plutôt que de les supprimer une à une, on vise à les supprimer d'un seul coup, en créant sur la colonne B des cellules vides que l'on peut regrouper avec la méthode SpecialCells afin de procéder à la suppression des lignes de ces cellules.
On va donc opérer une boucle sur toutes les lignes (comme on ne supprime pas individuellement, il n'est pas utile de parcourir en partant du bas), et on va tester le critère de suppression sur chaque ligne.
La condition est que 8 cellules contiennent la valeur 0. Si c'est le cas, leur somme sera égale à zéro. Tester la somme sera très légèrement plus rapide que parcourir les 8 cellules à chaque fois. Ce que l'on fait en utilisant la fonction Excel (il n'y a pas de fonction Somme en VBA).
Si la condition est vérifiée, on efface la cellule en B. Dans la mesure où l'on intervient sur la feuille d'une façon qui modifierait l'affichage, on inhibe préalablement ce dernier pour que le déroulement soit plus rapide.
En matière de tutos, tu as les cours des sites spécialisés dont celui-ci. Pour être en mesure de mieux utiliser les outils qu'offre VBA, je conseillerais volontiers d' avoir une vue précise des différents types de modules et de leur utilisation, des types de procédures et leur portée, les variables, les tableaux, les boucles, les instructions spécifiques. Cela fait quelques chapitres importants que l'on ne digère pas du premier coup mais qu'il est indispensable d'approfondir...
Cordialement.