Suppression cellules a droite d'une cellule vide
Bonjour
j'ai une feuille avec 12 colonnes et dans 3 colonnes j'ai des cellules vident
J'aimerais une macro qui efface les 3 cellules a droite de la cellule vide
Exemple: si D36 est vident j'aimerais que la macro efface D36, E36, F36 et G36 et quelles remontent les lignes en dessous pour pas avoir de lignes vident
Je joins mon fichier dans la feuille "liste finale" il y a une meilleur explication je pense.
Merci de votre aide
Bonjour,
Voici un essai,
Sub sup()
Dim c As Range
dl = Worksheets("liste finale").Range("D" & Rows.Count).End(xlUp).Row
For Each c In Range("D3:D" & dl)
If c.Value = "" Then
c.Resize(, 3).Delete shift:=xlUp
End If
Next
End SubA appliquer plusieurs fois car il ne supprime pas tout d'un coup.
Ca serait plus pratique saans doute de travailler avec des tableaux.
Bonjour Thrrybo,
Déjà merci pour ta réponse.
J'aurais deux questions s'il te plait:
Peux tu me faire si cellule vide en L me supprimé les 3 cellules à gauche.
Et que veux tu dire par "Ça serait plus pratique sans doute de travailler avec des tableaux." Je suis preneur de toute amélioration :)
Tu peux remplacer le code par celui-ci du coup.
Sub sup()
Dim c As Range
For Each c In Range("D3:D300")
If c.Value = "" Then
c.Resize(, 3).Delete shift:=xlUp
End If
Next
For Each c In Range("L3:L300")
If c.Value = "" Then
c.Offset(0, -3).Resize(, 4).Delete shift:=xlUp
End If
Next
End SubLes tableaux en générale sont pratiquement, maintenant il y a déjà beaucoup de données dans tes feuilles et ça risque de perturber plus qu'autre chose.
Bonjour,
Attention, pour supprimer des lignes , il faut partir de la dernière ligne en remontant vers la première, sinon vous allez en sauter.
Le code dans le module 7, la macro est affectée au bouton "Supprimer si D ou L vides"
Sub sup()
Dim c As Range
Dim DerLig As Long, i As Long
Application.ScreenUpdating = False
DerLig = Range("A1").CurrentRegion.Rows.Count
For i = DerLig To 3 Step -1
If Cells(i, "D") = "" Then Range(Cells(i, "D"), Cells(i, "G")).Delete shift:=xlUp
Next
DerLig = Range("A1").CurrentRegion.Rows.Count
For i = DerLig To 3 Step -1
If Cells(i, "L") = "" Then Range(Cells(i, "I"), Cells(i, "L")).Delete shift:=xlUp
Next
End Sub
Cdlt
Bonjour Arturo83,
Merci de ton aide mais tu supprimes que D et L donc les doublons entre Retards et convoc1 et Retards et convoc2 mais il faut aussi supprime H sinon j'ai encore des doublons entre convoc1 et convoc2.
Et je me posais la question n'y a t-il pas moyen d'inclure la formule dans la macro directement et bien sur toujours en trois étapes:
étapes 1 : =SI(NB.SI(B:B;F3)=0;F3;"")
étapes 2 : =SI(NB.SI(F:F;J3)=0;J3;"")
étapes 3 : =SI(NB.SI(B:B;J3)=0;J3;"")
car si on regarde les formules après avoir cliqué sur ton bouton on s'aperçoit qu'il y a des formules qui ont été modifiés.
En espérant avoir été compréhensible?
En tout cas merci de ton aide.
Bonjour,
mais tu supprimes que D et L donc les doublons entre Retards et convoc1 et Retards et convoc2 mais il faut aussi supprime H sinon j'ai encore des doublons entre convoc1 et convoc2.
Ok, mais 3 cellules vides à gauche de la colonne L, pour moi, cela s'arrête à la colonne I et pas H, donc pour effacer la colonne H il suffit de remplacer cette ligne:
If Cells(i, "L") = "" Then Range(Cells(i, "I"), Cells(i, "L")).Delete shift:=xlUppar
If Cells(i, "L") = "" Then Range(Cells(i, "H"), Cells(i, "L")).Delete shift:=xlUpEn fait, il me semble que l'énoncé initial de votre problème n'est pas correct, alors si j'ai bien compris cela devrait être ceci:
si D est vide, on efface de A à D
si H est vide, on efface de E à H
si L est vide, on efface de I à L
c'est bien ça?
Voici le code avec intégration des formules
Sub sup()
Dim c As Range
Dim DerLig As Long, i As Long
Application.ScreenUpdating = False
DerLig = Range("A1").CurrentRegion.Rows.Count
For i = DerLig To 3 Step -1
If Cells(i, "D") = "" Then Range(Cells(i, "A"), Cells(i, "D")).Delete shift:=xlUp
Next
Range("D3:D" & DerLig).FormulaR1C1 = "=IF(COUNTIF(C[-2],RC[2])=0,RC[2],"""")"
DerLig = Range("E1").CurrentRegion.Rows.Count
For i = DerLig To 3 Step -1
If Cells(i, "D") = "" Then Range(Cells(i, "E"), Cells(i, "H")).Delete shift:=xlUp
Next
Range("H3:H" & DerLig).FormulaR1C1 = "=IF(COUNTIF(C[-2],RC[2])=0,RC[2],"""")"
DerLig = Range("I1").CurrentRegion.Rows.Count
For i = DerLig To 3 Step -1
If Cells(i, "L") = "" Then Range(Cells(i, "I"), Cells(i, "L")).Delete shift:=xlUp
Next
Range("L3:L" & DerLig).FormulaR1C1 = "=IF(COUNTIF(C[-10],RC[-2])=0,RC[-2],"""")"
End SubCdlt
Arturo83,
Non Arturo83 il ne faut pas supprimé les véhicules en retards, j'essaye de l’expliqué correctement, les véhicules en retards ont dépassé leurs dates d'entretien cela ne sert a rien que je convoque un véhicule qui va avoir un entretien d'échéance de 1 a 30 jours ou de 31 a 60 jours vu qu'il est déjà en retards cela ne fait que rallonger la liste pour rien.
Pareil pour convocation 1 et 2 cela ne sert a rien que je convoque un véhicule en convoc2 si il se trouve déjà dans la liste de convoc1 ou de retards.
si D est vide, on efface de D à G (compare F à B, convocation1 à retards)
si H est vide, on efface de H à K (compare J à F, convocation2 a convocation1)
si L est vide, on efface de I à L (compare J à B, convocation2 a retards)
si D est vide, on efface de D à G (compare F à B, convocation1 à retards)
si H est vide, on efface de H à K (compare J à F, convocation2 a convocation1)
si L est vide, on efface de I à L (compare J à B, convocation2 a retards)
Alors ceci:
Sub sup()
Dim c As Range
Dim DerLig As Long, i As Long
Application.ScreenUpdating = False
DerLig = Range("A1").CurrentRegion.Rows.Count
For i = DerLig To 3 Step -1
If Cells(i, "D") = "" Then Range(Cells(i, "D"), Cells(i, "G")).Delete shift:=xlUp
Next
Range("D3:D" & DerLig).FormulaR1C1 = "=IF(COUNTIF(C[-2],RC[2])=0,RC[2],"""")"
DerLig = Range("E1").CurrentRegion.Rows.Count
For i = DerLig To 3 Step -1
If Cells(i, "H") = "" Then Range(Cells(i, "H"), Cells(i, "K")).Delete shift:=xlUp
Next
Range("H3:H" & DerLig).FormulaR1C1 = "=IF(COUNTIF(C[-2],RC[2])=0,RC[2],"""")"
DerLig = Range("I1").CurrentRegion.Rows.Count
For i = DerLig To 3 Step -1
If Cells(i, "L") = "" Then Range(Cells(i, "I"), Cells(i, "L")).Delete shift:=xlUp
Next
Range("L3:L" & DerLig).FormulaR1C1 = "=IF(COUNTIF(C[-10],RC[-2])=0,RC[-2],"""")"
End Sub