Insérer_Supprimer Lignes selon critère variable

victorinox

XLDnaute Junior
Bonjour à tous,

Je sollicite votre aide aujourd'hui car je souhaite mettre en place une petite macro me permettant d'insérer ou supprimer des lignes selon un critère, ici un chiffre variable. J'ai commencé un début de code pour l'insertion de ligne mais je suis bloqué sur l'aspect "plage variable".

Le fichier ci-joint devrait être beaucoup plus parlant que de longues explications écrites.

Merci d'avance,

Victorinox
 

Pièces jointes

  • Draft_Insert_Delete Rows.xls
    56 KB · Affichages: 38

vgendron

XLDnaute Barbatruc
Re : Insérer_Supprimer Lignes selon critère variable

bonjour,

Essaie ce code (qui ne fait que rajoutter des lignes en cas de besoin.
s'il y a trop de lignes (est ce que ca peut etre le cas?) ,il ne fait que te le dire

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Address = "$B$1" Then
    'calcul du nombre de ligne déjà présentes
    Set c = Range("A:A").Find("TOTAL")
    If Not c Is Nothing Then
        nblignes = c.Row - 2 - 2
    End If
    If Range("B1") > 15 And ((nblignes = 15) Or nblignes < Range("B1")) Then
        'ajout de lignes B1-nblignes)
        nbmanquantes = Range("B1") - nblignes
        MsgBox ("manque" & nbmanquantes & " lignes")
        Rows(nblignes + 2 & ":" & nblignes + 1 + nbmanquantes).Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        
    End If
    
    If Range("B1") <= 15 And nblignes > 15 Then
    MsgBox ("trop de lignes")
    End If
End If
End Sub
 

vgendron

XLDnaute Barbatruc
Re : Insérer_Supprimer Lignes selon critère variable

petite modif pour enlever des lignes en trop. si nécessaire..
pas sur que ca couvre tous les cas... pas assez cherché pour ca ;-)

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Address = "$B$1" Then
    'calcul du nombre de lignes déjà présentes
    Set c = Range("A:A").Find("TOTAL")
    If Not c Is Nothing Then
        nblignes = c.Row - 2 - 2
    End If
    
    'cas pas assez de lignes
    If Range("B1") > 15 And (nblignes < Range("B1")) Then
        'ajout de lignes B1-nblignes)
        nbmanquantes = Range("B1") - nblignes
        MsgBox ("manque " & nbmanquantes & " lignes")
        Rows(nblignes + 2 & ":" & nblignes + 1 + nbmanquantes).Select
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    End If
    
    'cas trop de lignes au dessus de 15
    If Range("B1") >= 15 And nblignes > Range("B1") Then
        NbLignesTrop = nblignes - Range("B1")
        MsgBox ("il y a " & NbLignesTrop & " lignes en trop")
        Rows(nblignes + 2 & ":" & nblignes + 3 - NbLignesTrop).Select
        Selection.Delete Shift:=xlUp
    End If
    
    'cas trop de lignes en dessous de 15
End If
End Sub
 

vgendron

XLDnaute Barbatruc
Re : Insérer_Supprimer Lignes selon critère variable

Ce coup ci. suis sur.. ;-)

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$1" Then
    'calcul du nombre de lignes déjà présentes
    Set c = Range("A:A").Find("TOTAL")
    If Not c Is Nothing Then
        nblignes = c.Row - 2 - 2
    End If
    
    'cas pas assez de lignes
    If Range("B1") > 15 And (nblignes < Range("B1")) Then
        'ajout de lignes B1-nblignes)
        nbmanquantes = Range("B1") - nblignes
        MsgBox ("manque " & nbmanquantes & " lignes")
        Rows(nblignes + 2 & ":" & nblignes + 1 + nbmanquantes).Select
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    End If
    
    'cas trop de lignes au dessus de 15
    If Range("B1") >= 15 And nblignes > Range("B1") Then
        NbLignesTrop = nblignes - Range("B1")
        MsgBox ("il y a " & NbLignesTrop & " lignes en trop")
        Rows(nblignes + 2 & ":" & nblignes + 3 - NbLignesTrop).Select
        Selection.Delete Shift:=xlUp
    End If
    
    'cas trop de lignes en dessous de 15
    If Range("B1") < 15 And nblignes > 15 Then
        NbLignesTrop = nblignes - 15
        MsgBox ("il y a " & NbLignesTrop & " lignes en trop")
        Rows(nblignes + 2 & ":" & nblignes + 3 - NbLignesTrop).Select
        Selection.Delete Shift:=xlUp
    End If
End If
End Sub

autre point à noter: c'est l'évènement utilisé pour déclencher la macro.. il faut utiliser le worksheet change.. et pas slectionchange
sinon, tu es obligé de re selectionner la cellule B1 après avoir modifié la valeur
 

victorinox

XLDnaute Junior
Re : Insérer_Supprimer Lignes selon critère variable

Un très grand MERCI vgendron, les trois codes sont bons, le dernier correspond en tout point à ce que je voulais faire!! C'est top! Merci beaucoup!!

Juste pour parfaire ma compréhension, que désigne exactement
nblignes = c.Row - 2 - 2


Merci aussi pour l'astuce Worksheet_Change vs SelectionChange ;)
 

vgendron

XLDnaute Barbatruc
Re : Insérer_Supprimer Lignes selon critère variable

C est la cellule ou il trouve TOTAL
C.row est le numéro de la ligne
-2-2 c'est pour ajuster au nombre de ligne:
le premier -2: c'est parce que ta zone colorée finit 2 lignes avant TOTAL
le second -2 c'est parce qu'elle commence en ligne 3

Voila..
c'est surement pas une macro optimisée.. on pourrait aussi passer avec une table, une zone nommée etc etc etc..
 

victorinox

XLDnaute Junior
Re : Insérer_Supprimer Lignes selon critère variable

Ok je comprends! Merci!
Tu lui avais demandé auparavant de retrouver "TOTAL" au sein de la colonne A et ensuite tu délimites la zone.

La macro fait ce que je souhaite c'est déjà top!

Merci à toi!!
 

Statistiques des forums

Discussions
312 082
Messages
2 085 168
Membres
102 804
dernier inscrit
edaguo