supprimer ligne avec condition cumulée et coller formule

  • Initiateur de la discussion Initiateur de la discussion zeltron
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

zeltron

XLDnaute Occasionnel
Bonjour à tout le forum,

Voici mon problème, il concerne:
- la suppression de lignes sur une feuille spécifique ( cf exemple feuille "NN") : avec comme condition d'une part la suppression de toutes les lignes situées en dessous de la ligne comprenant en colonne "B" le mot "sédentaires" (cf exemple) ainsi que la suppression de cette ligne comprenant ce mot. et d'autres part la suppression de toutes les lignes dont la colonne "A" ET la colonne "B" sont vides ( je n'ai pas réussi à trouver des fils concerant cette condition et n'ai pas réussi a adapter les codes proposés sur les fils de suppression de lignes).
- Puis l'insertion d'une colonne avec un titre spécifique en ligne 1 ( le titre est "formule", cf exemple) et une formule pour toutes les autres lignes de cette colonne jusqu'à la dernière ligne dont la colonne "A" est remplie, formule qui est copiée en "E1" de la feuille "Formule". (D'ailleurs sur ce point, est ce une bonne méthode pour intégrer une formule dans une colonne, car interpréter une formule excel ,qui peut être complexe,en VBA n'est pas évident; c'est manière est elle intelligente ?)

J'espère avoir été le plus explicite possible, je me permet de vous joindre un fichier afin que cela soit plus explicite.

N'hésitez pas à me demander plus de détail si cela n'est pas suffisant.

Je vous remercie d'avance pour votre aide

Cordialement

Zeltron
 

Pièces jointes

Re : supprimer ligne avec condition cumulée et coller formule

Salut

Ci joint un peu de code simple mais vu l'heure je suis encore moins bon que la journee.

Sub Suppression()
x = 2
'traitement des lignes avant sedentaire

Do While Cells(x, 2) <> "sédentaires"
If Cells(x, 1).Value = "" And Cells(x, 2).Value = "" Then
Rows(x).EntireRow.Delete
x = x - 1
End If
x = x + 1
Loop

Range("A" & Trim(Str(x)) & ":A65536").EntireRow.Delete

End Sub


Bonne nuit
 
Re : supprimer ligne avec condition cumulée et coller formule

Merci beaucoup lapix de t'interresser à mon pb.

Pour ce qui est de la suppression des lignes cela fonctionne, mais le bouton que j'utilise pour déclencher la macro est sur la feuille "accueil" et la feuille "à traiter" est la feuille "NN", j'ai donc intégrer sur ton les précision suivantes:

Private Sub CommandButton1_Click()
With Sheets("NN")
x = 2
'traitement des lignes avant sedentaire

Do While Cells(x, 2) <> "sédentaires"
If Cells(x, 1).Value = "" And Cells(x, 2).Value = "" Then
Rows(x).EntireRow.Delete
x = x - 1
End If
x = x + 1
Loop

Range("A" & Trim(Str(x)) & ":A65536").EntireRow.Delete
End With
End Sub


Cependant malgré cela la macro s'execute toujours sur la feuille où se trouve le bouton, comment cela se fait il?

De plus peux tu m'expliquer un peu ton code bien qu'il fasse exactement ce que je souhaite je du mal a le comprendre, jusqu'à "Rows(x).EntireRow.Delete " je comprends ensuite j'ai du mal à comprendre.

De plus, si je relance l'action, forcément il n'y a plus en colonne B aucune ligne contenant "sédentaires", dès lors il tourne sans arrêt, aussi que faut il ajouter dans ton code afin de lui dire en quelques sorte: "si en colonne "b" il y a le mot sédentaires" alors dans un premier temps tu supprime les lignes se trouvant en dessous de cette lignes contenant le mot "sédentaires" puis ensuite tu supprimes les lignes dont la colonne "A" ET la colonne "B" sont vides, sinon sil il n' y a aucune ligne en colonne "B" contenant le mot "sédentaires", alors tu supprimme directement toutes les lignes dont la colonne "A" ET la colonne "B" sont vides ???

Merci encore pour ton aide et je vous remercie tous de votre aide future.

Cordialement

Zeltron
 
Re : supprimer ligne avec condition cumulée et coller formule

Bonsoir zeltron, lapix,

zeltron, en complément, ci-joint une autre façon de procéder.

J'ai utilisé le code ci-dessous :
Code:
[SIZE=2]Sub Traitement()
[COLOR=green]'myDearFriend! - Août 2006[/COLOR]
[COLOR=navy]Dim [/COLOR]Plage[COLOR=navy] As [/COLOR]Range, C[COLOR=navy] As [/COLOR]Range, RAZPlage[COLOR=navy] As [/COLOR]Range
      [COLOR=navy]With[/COLOR] Sheets("NN")
            [COLOR=green]'Insertion de la formule[/COLOR]
            [COLOR=navy]If [/COLOR].Range("C1") = "Formule" [COLOR=navy]Then Exit Sub[/COLOR]
            [COLOR=navy]Set[/COLOR] Plage = .UsedRange.Columns("C")
            Plage.Insert Shift:=xlToRight
            [COLOR=navy]Set[/COLOR] Plage = .UsedRange.Columns("C")
            Sheets("Formule").Range("E1").Copy Plage
            Plage.Range("A1").Value = "Formule"
            [COLOR=green]'Répérer les lignes avec A et B vides[/COLOR]
            [COLOR=navy]For Each[/COLOR] C[COLOR=navy] In [/COLOR]Plage.Cells
                  [COLOR=navy]If [/COLOR]C.Value = "_" [COLOR=navy]Then[/COLOR]
                        [COLOR=navy]If [/COLOR]RAZPlage[COLOR=navy] Is Nothing Then[/COLOR]
                              [COLOR=navy]Set[/COLOR] RAZPlage = C.EntireRow
                        [COLOR=navy]Else[/COLOR]
                              [COLOR=navy]Set[/COLOR] RAZPlage = Union(RAZPlage, C.EntireRow)
                        [COLOR=navy]End If[/COLOR]
                  [COLOR=navy]End If[/COLOR]
            [COLOR=navy]Next[/COLOR] C
            [COLOR=green]'Repérer la ligne avec "sédentaires" en B[/COLOR]
            [COLOR=navy]Set[/COLOR] C = Plage.Find("_sédentaires", LookIn:=xlValues)
            [COLOR=green]'Constitution de la plage de lignes à supprimer[/COLOR]
            [COLOR=navy]If Not [/COLOR]C[COLOR=navy] Is Nothing Then[/COLOR]
                  [COLOR=navy]Set[/COLOR] C = .Range(C.EntireRow, Plage.SpecialCells(xlCell[COLOR=navy]Type[/COLOR]LastCell).EntireRow)
                  [COLOR=navy]Set[/COLOR] RAZPlage = Union(RAZPlage, C)
            [COLOR=navy]End If[/COLOR]
            [COLOR=navy]If Not [/COLOR]RAZPlage[COLOR=navy] Is Nothing Then[/COLOR]
                  RAZPlage.Delete
            [COLOR=navy]End If[/COLOR]
      [COLOR=navy]End With
End[/COLOR] Sub[/SIZE]
Cordialement,
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
6
Affichages
294
Réponses
5
Affichages
370
Réponses
7
Affichages
302
Retour