Suppression de lignes à l'intérieur d'un tableau
Bonjour,
Pour commencer, je tiens à dire que je suis intermédiaire en Excel. Je suis familier avec plusieurs formules mais question macro, je me considère plutôt débutant. Pour les Macros en fait, je suis plus de genre de enregistrer mes macros et ensuite aller voir le code et apprendre de cette façon.
Mon problème est le suivant. Je travaille avec un tableau qui contient quelques colonnes. Attention ici, par tableau, je parle du type qu'on obtient via Insertion/Tableau. J'aimerais avoir une macro qui va valider dans un premier temps si les cellules d'une des colonnes sont vides et va effacer les lignes correspondantes si c'est le cas. Ensuite, la macro fera l'inverse avec une autre des colonne, soit effacer toutes les lignes dont la cellule contiendrait quelque chose.
J'ai joint le fichier et voici ce que la macro devrait faire :
1- Vérifier le contenu des cellules de la colonne "Résolution", puis effacer les lignes dans le cas de ceux qui ne contiennent rien.
2- Vérifier le contenu des cellules de la colonne "Trouble Majeur", puis effacer les lignes dans le cas de ceux qui contiennent quelque chose.
À noter que ce fichier final servira pour l'extraction de rapport et donc que le nombre total de ligne va varier.
J'ai essayé de créer la macro moi même en enregistrant la séquence mais dès que la disposition des lignes ou le nombre de ligne change, ça ne fonctionne pas et me donne une erreur. Ça ressemble à ça :
Sub Traitement()
Range("Tableau1[Résolution]").Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.ListObject.ListRows(2).Delete
Selection.ListObject.ListRows(2).Delete
Range("Tableau1[Trouble Majeur]").Select
Selection.SpecialCells(xlCellTypeConstants, 23).Select
Selection.ListObject.ListRows(3).Delete
End Sub
J'ai cherché sur le web et sur ce forum mais je n'ai rien trouvé qui traite de tableau ou qui fait ce genre d'opérations.
Merci beaucoup de prendre quelques minutes pour m'aider.
Bonjour,
essaye ceci et dis nous si ça te convient
Sub Delet()
last = [B65000].End(xlUp).Row
For i = last To 5 Step -1
If Cells(i, "D") = "" Then
Cells(i, "D").EntireRow.Interior.ColorIndex = 23
'Cells(i, "D").EntireRow.Delete Shift:=xlUp ' enlever la ' pour rendre la ligne opérationnelle
End If
If Cells(i, "E") <> "" Then
Cells(i, "E").EntireRow.Interior.ColorIndex = 33
'Cells(i, "E").EntireRow.Delete Shift:=xlUp
End If
Next i
End Sub
Bonjour Patrick,
Pour commencer un gros merci d'avoir répondu. Pour ce qui est de si ça fonctionne ou non, je dirais oui mais ça reste insatisfaisant.
J'ai copié cette macro dans le document véritable dans lequel ça va être utilisé (que je ne peux pas posté ici à cause des informations sensibles qu'il contient) et ça semble vouloir fonctionner...
Cependant, le tableau en question contient 800 lignes et plus, et chaque ligne a 30 colonnes. La macro prend un temps fou à traiter l'information.
Existe t-il un code différent ou quelque chose qui permettrait de réduire le temps de traitement ?
Aussi, dans un souci d'apprendre et non pas juste copier le travail des autres, j'ai décortiquer ta formule du mieux que je peux et je la comprends en partie. J'apprécierais une explication de la logique derrière :
For i = last To 5 Step -1
Merci beaucoup !
Rebonjour,
J'ai cherché un peu à partir de la formule fournie et j'ai réussi à trouver la version qui procède comme je veux.
Sub Traitement()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
last = [B65000].End(xlUp).Row
For i = last To 6 Step -1
If Cells(i, "X") = "" Or Cells(i, "R") <> "" Then
Cells(i, "X").EntireRow.Delete Shift:=xlUp
End If
Next i
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Mais je ne serais pas arrivé là sans toi. Merci beaucoup !!