XL 2016 Insertion de lignes sous condition

TomAg

XLDnaute Nouveau
Bonjour,

Tout d'abord, un grand bravo à toutes les personnes bienveillantes qui prennent de leur temps pour aider les autres sur ce forum !

Après de nombreuses recherches et tentatives, je m'adresse à vous aujourd'hui dans l'espoir de résoudre mon problème :
Je souhaite, dans une feuille nommée "BUDGET", insérer un groupe de ligne (ligne 3 à ligne 77) présent sur sur une autre feuille "base", sous chaque sous détail de prix (ex. 101, 102, 103, 104, mais pas 100 et 200 sur la photo ci-joint)
Pour cela, je souhaite incorporer une condition : Le groupe de ligne à insérer devra être inséré seulement sous chacune des lignes où la valeur "VRAI" est indiquée en colonne L.
1588578228042.png

Feuille "BUDGET"

1588578298813.png

Feuille "base"

Pouvez-vous m'aider ?

En vous remerciant par avance !
 
Solution
Voici :


VB:
Sub test()
  Dim Plage As Range, Ligne As Long
  Dim i As Integer                               'ligne que j'ai rajouté
 
  Application.EnableEvents = False
  Application.ScreenUpdating = False
  With Sheets("base")
    Ligne = .Cells.Find("*", , , , xlByRows, xlPrevious).Row
    Set Plage = .Range("C3", .Cells(Ligne, 3)).EntireRow
  End With
  With Sheets("BUDGET")
    .Unprotect
    Ligne = .Cells(.Rows.Count, 12).End(xlUp).Row
    For i = Ligne To 5 Step -1
      If .Cells(i, 12) = True Then
        .Rows(i + 1).Resize(Plage.Rows.Count).Insert
        Plage.Copy .Cells(i + 1, 1)
      End If
    Next i
  End With
  Application.EnableEvents = True
  Application.EnableEvents = True
End Sub

Daniel

TomAg

XLDnaute Nouveau
Bonjour et merci pour votre réponse,

Désolé pour l'explication un peu foireuse...

Je vais tenter d'être un peu plus explicite !

Voici ci-dessous l'illustration du résultat que je souhaite obtenir de façon automatisé, sans avoir à insérer 100 fois à la main le "paquet" de lignes en vert pâle.
1588679831234.png

--> En cliquant sur un bouton de la feuille "BUDGET" (ci-dessus), je souhaite insérer sous chaque ligne où la case à cocher indique VRAI, l'ensemble des lignes présentes sur une feuille nommée "base", à savoir les lignes 3 à 74 (cf. ci-dessous). Je précise que les deux feuilles se situent sur le même classeur.
1588680022526.png


Si besoin, je pourrais vous transmettre une partie de mon fichier excel en supprimant les données confidentielles...

En vous remerciant par avance pour votre grande aide !!!
 

danielco

XLDnaute Accro
Attache cette macro au bouton :

VB:
Sub test()
  Dim Plage As Range, Ligne As Long
  Application.EnableEvents = False
  With Sheets("base")
    Set Plage = .Range("C2", .Cells(.Rows.Count, 3).End(xlUp)).Offset(, -2).Resize(, 8)
  End With
  With Sheets("BUDGET")
    Ligne = .Cells(.Rows.Count, 12).End(xlUp).Row
    For i = Ligne To 5 Step -1
      If .Cells(Ligne, 12) = True Then
        .Rows(i + 1).Resize(Plage.Rows.Count).Insert
        Plage.Copy .Cells(i + 1, 1)
      End If
    Next i
  End With
  Application.EnableEvents = True
End Sub

Daniel
 

TomAg

XLDnaute Nouveau
Attache cette macro au bouton :

VB:
Sub test()
  Dim Plage As Range, Ligne As Long
  Application.EnableEvents = False
  With Sheets("base")
    Set Plage = .Range("C2", .Cells(.Rows.Count, 3).End(xlUp)).Offset(, -2).Resize(, 8)
  End With
  With Sheets("BUDGET")
    Ligne = .Cells(.Rows.Count, 12).End(xlUp).Row
    For i = Ligne To 5 Step -1
      If .Cells(Ligne, 12) = True Then
        .Rows(i + 1).Resize(Plage.Rows.Count).Insert
        Plage.Copy .Cells(i + 1, 1)
      End If
    Next i
  End With
  Application.EnableEvents = True
End Sub

Daniel
Bonjour,

Tout d'abord, merci pour votre réponse !

Malheureusement, après avoir testé votre code, cela ne donne pas encore le résultat escompté.

Je me suis permis de rajouter une ligne "Dim i As Integer", suite à un message d'erreur au lancement de votre macro.

Malgré cela, deux problèmes majeurs sont encore présents :
- Je souhaite copier les lignes entières de la feuille base (afin de conserver le format), et non pas juste les cellules de B3 à H74 semble le faire ce code.
- Le code ne "fonctionne" seulement que pour les deux dernières lignes cochées de la feuille "BUDGET", or, il faudrait qu'elle fonctionne pour chaque ligne où la case est cochée...

Je vous joint le fichier avec le morceau de code inséré !

Merci d'avance !
 

Pièces jointes

  • V12 nue test.xlsm
    623 KB · Affichages: 7

danielco

XLDnaute Accro
Voici :


VB:
Sub test()
  Dim Plage As Range, Ligne As Long
  Dim i As Integer                               'ligne que j'ai rajouté
 
  Application.EnableEvents = False
  Application.ScreenUpdating = False
  With Sheets("base")
    Ligne = .Cells.Find("*", , , , xlByRows, xlPrevious).Row
    Set Plage = .Range("C3", .Cells(Ligne, 3)).EntireRow
  End With
  With Sheets("BUDGET")
    .Unprotect
    Ligne = .Cells(.Rows.Count, 12).End(xlUp).Row
    For i = Ligne To 5 Step -1
      If .Cells(i, 12) = True Then
        .Rows(i + 1).Resize(Plage.Rows.Count).Insert
        Plage.Copy .Cells(i + 1, 1)
      End If
    Next i
  End With
  Application.EnableEvents = True
  Application.EnableEvents = True
End Sub

Daniel
 

Discussions similaires

Réponses
18
Affichages
1 K
Réponses
8
Affichages
484

Statistiques des forums

Discussions
315 096
Messages
2 116 184
Membres
112 677
dernier inscrit
Justine11