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

11essai-cdm1.zip (317.30 Ko)

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 Sub

A 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 Sub

Les 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:=xlUp

par

If Cells(i, "L") = "" Then Range(Cells(i, "H"), Cells(i, "L")).Delete shift:=xlUp

En 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 Sub

Cdlt

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
Rechercher des sujets similaires à "suppression droite vide"