Macro pour recopier des lignes selon critères...

Prise_cm Messages postés 5 Statut Membre -  
Heliotte Messages postés 1561 Statut Membre -
Bonjour,
Je souhaiterais trouver la macro qui me permette de: sur une colonne donnée (ex: colonne C -- Quantité) de contrôler le contenu n afin d'insérer (n-1) de lignes entre deux cellules différentes.
Exemple : C1=1, passer à la cellule suivante,
C19=14, recopier la ligne 19, 13 fois et remplacer la valeur C19 par C19=1.
Ainsi de suite
Merci!

2 réponses

  1. Heliotte Messages postés 1561 Statut Membre 92
     
    Bonjour Prise_cm,

    Bon, eh bien je l'ai fait vers le bas et ça fonctionne:

    Public Sub VerifierNombreEtInsererLignes()
        Const NoCol As Integer = 3
        Const NoLigMin As Integer = 2
        Const NoLigMax As Integer = 7
        Dim i As Integer, NoLigEnCours As Integer, ValCellule As Long
        '
        NoLigEnCours = NoLigMin
        With Worksheets("Feuil2").Select
            For i = NoLigMin To NoLigMax
                ValCellule = Cells(NoLigEnCours, NoCol).Value
                If (ValCellule > 1) Then
                    'Rows("15:17").Select
                    'Cells(NoLigEnCours, NoCol).Value
                    Rows((NoLigEnCours + 1) & ":" & (NoLigEnCours + ValCellule - 1)).Select
                    Selection.Insert Shift:=xlDown
                    NoLigEnCours = (NoLigEnCours + ValCellule)
                Else
                    NoLigEnCours = (NoLigEnCours + 1)
                End If
            Next i
        End With
    End Sub
    0
    1. Prise_cm Messages postés 5 Statut Membre
       
      Merci Heliotte,
      Seulement la macro créé des lignes vides au lieu de recopier des lignes identiques.
      0
    2. Heliotte Messages postés 1561 Statut Membre 92
       
      Bonjour Prise_cm,

      Ok, il te suffit de prendre la valeur de chaque cellule de la ligne .. et de collé pour les autres lignes.
      0
    3. Prise_cm Messages postés 5 Statut Membre
       
      Ok, la question c'est : A quel niveau se ferait la recopie...
      0
    4. Heliotte Messages postés 1561 Statut Membre 92
       
      Dans ton vrai fichier, il n'y a qu'une seule cellule à copier ou plusieurs cellules ?

      J'ai besoin des noms des colonnes : A, B, C, etc.
      0
    5. Prise_cm Messages postés 5 Statut Membre
       
      Il y en a plusieurs. A, B, C, D, E, F.
      Exemple, la ligne A;B;C;D;E;F contenant les informations suivantes :
      "Interphones SSIS Bouyer PS 1155";221101;4;181648;DFOO;181648 (j'ai séparé avec ";") serait éclatée en 4 lignes suivantes:
      "Interphones SSIS Bouyer PS 1155";221101;1;181648;DFOO;181648
      "Interphones SSIS Bouyer PS 1155";221101;1;181648;DFOO;181648
      "Interphones SSIS Bouyer PS 1155";221101;1;181648;DFOO;181648
      "Interphones SSIS Bouyer PS 1155";221101;1;181648;DFOO;181648
      la ligne d'origine serait alors remplacée par 4 lignes identiques. 4 c'est la valeur initialement contenue dans la cellule de la colonne C.
      0
  2. Heliotte Messages postés 1561 Statut Membre 92
     
    Public Sub VerifierNombreEtInsererLignes()
        Const NoCol As Integer = 3
        Const NoLigMin As Integer = 2
        Const NoLigMax As Integer = 7
        Dim i As Integer, j As Integer, NoLigEnCours As Integer
        ' déclaration pour une ligne de six colonnes
        Dim CellA As String, CellB As Long, CellC As Long, CellD As Long, CellE As String, CellF As Long
        '
        NoLigEnCours = NoLigMin
        With Worksheets("Feuil2").Select
            For i = NoLigMin To (NoLigMax + 1)
                CellC = Cells(NoLigEnCours, NoCol).Value
                If (CellC > 1) Then
                    CellA = Cells(NoLigEnCours, 1).Value
                    CellB = Cells(NoLigEnCours, 2).Value
                    CellD = Cells(NoLigEnCours, 4).Value
                    CellE = Cells(NoLigEnCours, 5).Value
                    CellF = Cells(NoLigEnCours, 6).Value
                    Rows((NoLigEnCours + 1) & ":" & (NoLigEnCours + CellC - 1)).Select
                    Selection.Insert Shift:=xlDown
                    For j = 0 To (CellC - 1)
                        Cells(NoLigEnCours + j, 1).Value = CellA
                        Cells(NoLigEnCours + j, 2).Value = CellB
                        Cells(NoLigEnCours + j, 3).Value = 1
                        Cells(NoLigEnCours + j, 4).Value = CellD
                        Cells(NoLigEnCours + j, 5).Value = CellE
                        Cells(NoLigEnCours + j, 6).Value = CellF
                    Next j
                    NoLigEnCours = (NoLigEnCours + CellC)
                Else
                    NoLigEnCours = (NoLigEnCours + 1)
                End If
            Next i
        End With
    End Sub


    Heureux ;-)
    0
    1. Prise_cm
       
      C impeccable. Merci infiniment Heliotte.
      0
    2. Heliotte Messages postés 1561 Statut Membre 92
       
      @+
      0