Macro Insertion Lignes + Copier la ligne "maîtresse"

Régis28

XLDnaute Nouveau
Bonsoir,

Tout d'abord merci pour ce forum dans lequel j'ai déja pu trouver des infos qui m'ont beaucoup aidé. Mais aujourd'hui malgré mes recherches dans les archives du forum je n'ai pas trouvé les lignes de commandes pour la macro que je souhaiterai faire.

Voilà ma requête :

Je souhaiterais pouvoir insérer un nombre prédéterminé de lignes aux lignes déjà existantes, (le nombre de ligne à insérer étant préalablement renseigné dans une colonne du fichier).
Une fois les lignes insérées j'aimerais que le contenu de la ligne "master" soit répliqué dans les lignes insérées.
Voir fichier joint (exemple simplifié) qui je l'espère devrait être parlant.

Merci d'avance de votre aide.
Régis
 

Pièces jointes

  • Classeur1.xls
    15.5 KB · Affichages: 164
  • Classeur1.xls
    15.5 KB · Affichages: 176
  • Classeur1.xls
    15.5 KB · Affichages: 171
Dernière édition:

ninbihan

XLDnaute Impliqué
Re : Macro Insertion Lignes + Copier la ligne "maîtresse"

Bonsoir Régis,

Un essai, à tester:

Code:
Sub regis()
Dim cell As Range
Set cell = Range("A2")
Do While cell.Value <> ""
    If WorksheetFunction.CountIf(Range("A:A"), "=" & cell.Value) < cell.Offset(0, 3).Value Then
        Range(Cells(cell.Row + 1, 1).Address & ":" & Cells(cell.Row + 1, 4).Address) _
        .Insert Shift:=xlDown
        For i = 1 To 4
            Cells(cell.Row + 1, i) = Cells(cell.Row, i)
        Next i
    End If
    Set cell = cell.Offset(1, 0)
Loop
End Sub

Bonne soirée,

Ninbihan
 

Pièces jointes

  • régis28.xls
    27 KB · Affichages: 145

GIBI

XLDnaute Impliqué
Re : Macro Insertion Lignes + Copier la ligne "maîtresse"

Bonsoir,

Une petite macro à adapter

Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 04/06/2008 par GIBIOT
'

'
Max = Range("J65536").End(xlUp).Row 'Recherche de la derniere ligne colonne j

For i = Max To 2 Step -1

Rows(i).Select
Selection.Copy
Rows(i + 1 & ":" & i + Cells(i,4)).Select 'Inserton du nombre de ligne
Selection.Insert Shift:=xlDown
Next

End Sub


Bonne nuit

gibi

PS : j'n'avais pas vu ninbihan, mais m'a slution est différente, enfin un peu
 
Dernière édition:

Régis28

XLDnaute Nouveau
Re : Macro Insertion Lignes + Copier la ligne "maîtresse"

Merci à vous 2 pour votre rapidité, je teste tout ça et je vous dt

J'ai testé les 2 versions sur un fichier plus élaboré que celui d'hier et qui ressemble plus à celui que j'utiliserai (il pourra avoir une Vingtaine de colonnes et jusqu'à 5000 Lignes).

Voir fichier joint avec 3 onglets :
- le fichier avant macro
- le résultat Macro Ninbihan
- le résultat Macro Gibi.

J'ai eu des petits problèmes différents pour les 2 Macros, vous verrez mes commentaires dans chaque onglet.

Encore un grand merci d'avance de votre aide et j'espère que vous pourrez résoudre les petite problèmes facilement.
Régis

PS : J'utilise Excel 2007
 

Pièces jointes

  • Regis28.zip
    23.1 KB · Affichages: 107
C

Compte Supprimé 979

Guest
Re : Macro Insertion Lignes + Copier la ligne "maîtresse"

Salut Régis28,

Essaye ça pour voir ;)

Code:
Sub RecopieLigne()
  Dim Lig As Long, Max As Long, NbLig As Integer
  'Recherche de la derniere ligne colonne j
  Max = Range("D65536").End(xlUp).Row
  For Lig = Max To 2 Step -1
    NbLig = Range("D" & Lig).Value
    Rows(Lig).Copy
    'Inserton du nombre de ligne
    Rows(Lig + 1 & ":" & Lig + NbLig + 1).Insert Shift:=xlDown
  Next
End Sub

A+
 

Régis28

XLDnaute Nouveau
Re : Macro Insertion Lignes + Copier la ligne "maîtresse"

Merci Bruno, ça fonctionne bien, le seul petit truc est que si j'en demande 8 dans ma case ça m'en génère 9.

L'idéal serait que si j'en demande 8 ça m'en génère 7 pour en avoir 8 au total.
Est ce possible ?
Sinon, si j'en demande 8 ça en génère 8, ça m'ira aussi je m'adapterai.

Merci d'avance
Régis
 
C

Compte Supprimé 979

Guest
Re : Macro Insertion Lignes + Copier la ligne "maîtresse"

Re,

Merci Bruno, ça fonctionne bien, le seul petit truc est que si j'en demande 8 dans ma case ça m'en génère 9
Juste comme ça, sur ton premier message
Je souhaiterais pouvoir insérer un nombre prédéterminé de lignes aux lignes déjà existantes, (le nombre de ligne à insérer étant préalablement renseigné dans une colonne du fichier).
Donc moi je fait qu'est-ce qu'on m'dis :D

L'idéal serait que si j'en demande 8 ça m'en génère 7 pour en avoir 8 au total. Est ce possible ?
Ma bien sur que oui, tu enlève le + 1 derrière NbLig
Rows(Lig + 1 & ":" & Lig + NbLig).Insert Shift:=xlDown

Voili, voilà ;)
 

Régis28

XLDnaute Nouveau
Re : Macro Insertion Lignes + Copier la ligne "maîtresse"

Désolé de vous solliciter une nouvelle fois, mais je n'avais pas envisagé le cas où il n'y a pas de ligne à insérer et que l'on laisse la case vide.
Avec ta macro Bruno, si je mets 0, ça m'insère 3 lignes par défaut (alors que je n'en souhaiterai aucune) ?
Est ce modifiable ?
Merci d'avance
Régis

Sub RecopieLigne()
Dim Lig As Long, Max As Long, NbLig As Integer
'Recherche de la derniere ligne colonne j
Max = Range("D65536").End(xlUp).Row
For Lig = Max To 2 Step -1
NbLig = Range("D" & Lig).Value
Rows(Lig).Copy
'Inserton du nombre de ligne
Rows(Lig + 1 & ":" & Lig + NbLig).Insert Shift:=xlDown
Next
End Sub
 
Dernière édition:

Régis28

XLDnaute Nouveau
Re : Macro Insertion Lignes + Copier la ligne "maîtresse"

Up

Quelqu'un peut-il SVP m'aider en complétant la macro ci-dessous ;
Si valeur de la colonne D=0 (ou "blanc" ça m'est égal), alors ne pas insérer de ligne.

Merci à l'avance
Cordialement
Régis
 
C

Compte Supprimé 979

Guest
Re : Macro Insertion Lignes + Copier la ligne "maîtresse"

Salut Régis28,

Si valeur de la colonne D=0 (ou "blanc" ça m'est égal), alors ne pas insérer de ligne.
Tout est dans ta question...

Si en VBA c'est IF et avec IF il faut Then ... Else ... End IF
La valeur de la colonne D on l'a récupère dans la variable NbLig

Donc ça nous donne : If NbLig <> 0 Then "Insérer les ligne"

Ce qui donne le code entier suivant :
Code:
Sub RecopieLigne()
Dim Lig As Long, Max As Long, NbLig As Integer
'Recherche de la derniere ligne colonne j
Max = Range("D65536").End(xlUp).Row
For Lig = Max To 2 Step -1
NbLig = Range("D" & Lig).Value
If NbLig <> 0 then
  Rows(Lig).Copy
  'Inserton du nombre de ligne
  Rows(Lig + 1 & ":" & Lig + NbLig).Insert Shift:=xlDown
End IF
Next
End Sub

Voili, voilà ;)
 

Régis28

XLDnaute Nouveau
Re : Macro Insertion Lignes + Copier la ligne "maîtresse"

Merci beaucoup et aussi pour l'explication !!!
ça m'a toujours l'air logique après coup, mais sur le moment je me sens incapable de créer la bonne commander et de la placer au bon endroit.
Encore un grand merci !
Régis
 

Discussions similaires

Statistiques des forums

Discussions
312 195
Messages
2 086 078
Membres
103 111
dernier inscrit
Eric68350