Macro : Boucle (rajout de ligne copié en fin de tableau)

Résolu
gilles52300 Messages postés 36 Statut Membre -  
gilles52300 Messages postés 36 Statut Membre -
Bonjour,
voici plusieurs jours que je galère sur une macro en apparence toutes bête.
Voila je suis sur un classeur excel et je veux copier une plage de cellule de la feuille 'info' sur la feuille 'recap' à la suite des autres. A la fin de ma feuille 'recap' dans la rangée "A:A" j'ai mentionné le mot "fin" pour indiquer à la boucle que c'est à partir de cette cellule que je veux coller ma nouvelle plage de cellule.

3 réponses

  1. gilles52300 Messages postés 36 Statut Membre
     
    Sub Macro1()

    Dim ii As Integer 'ii est l'indice qui va être incrémenté

    'copie de la plage de cellule sur la feuille désirée
    Sheets("Informations").Range("J2:AK17").Copy

    'sélection de la feuille ou copier la plage de cellule
    Sheets("Carnet").Select

    'début de la boucle là je n'y arrive plus.

    ii = ii + 1
    Do

    Loop Until Cells(ii, 1) <> "fin" 'quand on arrive au mot "fin" on colle les données copiées et on met en forme la hauteur de ligne

    ActiveSheet.Unprotect
    'je n'arrive pas à coller non plus
    ActiveCell.Paste
    Selection.RowHeight = 28

    'protection de la feuille
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
    , AllowFiltering:=True, AllowUsingPivotTables:=True

    End Sub

    Merci de votre aide
    0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

    essaies
    Sub xxx()
    Dim Lig As Byte, Col As Byte, zone()
    Dim Ligvide As Integer
    
    With Sheets("Informations").Range("J2:AK17")
         Lig = .Rows.Count
         Col = .Columns.Count
         zone = .Value
    End With
    
    With Sheets("carnet")
         Ligvide = .Columns("A").Find("*", , , , , xlPrevious).Row + 1
         .Unprotect
         .Cells(Ligvide, "A").Resize(Lig, Col) = zone
         .Protect
         .Select
    End With
    End Sub
    
    

    0
  3. gilles52300 Messages postés 36 Statut Membre
     
    Merci Michel,

    Je viens d'essayer mais cela ne me colle pas mes lignes avec mes formules. par contre cela m'inscrit bien le mot "fin" à la suite du collé 15lignes plus bas.
    j'avais fait un truc hier soir après le post qui semble fonctionner mais je pense que je peux le simplifier surtout quand je vois ton code.

    J'ai remplacé "*" par "fin" dans ton code car ma colonne A ne sera pas forcement totalement rempli lors de l'ajout des lignes.
    With Sheets("carnet") 
         Ligvide = .Columns("A").Find("fin", , , , , xlPrevious).Row + 1 
          .Unprotect 
          .Cells(Ligvide, "A").Resize(Lig, Col) = zone 
         .Protect 
         .Select 
    End With 
    End Sub 
    


    Voici ce que j'ai actuellement après épurement.
    Par contre je dois enlever la protection de la feuille 'Carnet' avant de copier sur la feuille 'Informations' sinon cela ne me colle pas les formules, mais juste la mise en forme.
    Sub Macro1()
    'Rajout de lignes à la fin du tableau
    'deprotection de la feuille
            With Sheets("Carnet").Unprotect
            End With
    'copie de la plage de cellule sur la feuille désirée
            With Sheets("Informations").Range("J2:AK17").Copy
            End With
    'sélection de la feuille ou copier la plage de cellule
            With Sheets("Carnet")
    'début de la boucle
                Range("A7").Select
                Do While ActiveCell.Value <> "fin"
                ActiveCell.Offset(1, 0).Select
                Loop
    'quand on arrive au mot "fin" on colle les données copiées et on met en forme la hauteur de ligne
                .Paste
                Selection.RowHeight = 28
    'protection de la feuille
                .Protect
            End With
        End Sub
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Pourquoi aider à faire faire simple quand tu veux absolument faire compliqué avec en plus des erreurs

      Abandon du suivi
      0
    2. gilles52300 Messages postés 36 Statut Membre
       
      Merci de ton aide Michel, cela m'a permis de comprendre et de pouvoir simplifier.
      La macro est beaucoup plus fluide avec "with et end with".
      Je reviendrais car là n'est que le début d'un long travail de macro dans ce classeur.
      0