Aide macro Excel

Bonjour,

Pour mon travail je suis amener à créer une macro d'un niveau qui me dépasse un peu. bref, je lutte.
Seriez-vous à même de m'aider quant à la confection de boucle ?

je joint un fichier "type" de ma demande.

Ci-dessous les indications (je me plante sur la phase de sélection des éléments) :
Il s'agit d'un historique. En soit : 1 onglet garde en mémoire toutes les saisies d'un 2° onglet.
Ce que j'aimerais que fasse la macro :
Copie les éléments saisies dans l'onglet 2, les copie colle dans l'onglet 1, puis efface la saisie de l'onglet 2 afin de recommencer.

Difficultés :
- le nombre de lignes saisies dans l'onglet 2 est variable (3 - 5 -30 ect...)
- les lignes copiés doivent être coller A LA FIN de l'onglet 1 (a la suite de l'hsitorique donc)
- l'onglet 1 doit ensuite être trié par la colonne 1
- l'effacement des lignes de l'onglet 2 doivent se faire en "clearcontent" afin de conserver des formules liées.

Voilà, j'espère être assez clair... Je répondrais à toutes vos interrogations et je vous remercie par avance énormément !!

Dinendal

https://www.cjoint.com/c/FGvkFSDBFgd

1 réponse

  1. Bonjour,

    fichier modifie: https://www.cjoint.com/c/FGvmiA2gT6f

    A+
    1. C'est excellent ! Merci infiniment !
    2. Arf ! je constate un souci.

      Lors de la mise en mémoire des données à copier, la macro ne conserve que la première ligne de la feuil2.
      Tout le reste fonctionne bien (effacement complet, tri ect...) mais je n'ai qu'une ligne de copier.

      Une idée ?
    3. @Gui.PrRe,

      Ah Bon, chez moi tout va tres bien, les lignes supplementaires ont ete ecrites avec le code !!!!!!

      Donnez un exemple
    4. j'ai été contraint de modifier certains éléments pour coller avec mon fichier principal; malheureusement, je ne peux le faire sortir.

      ici les lignes modifiées. j'ai sans doute fais une erreur dans ce cas.

      Sub Historique()
      Dim Plage2, Plage1 As Range

      If Worksheets("En-cours").Range("A" & Rows.Count).End(xlUp).Row > 1 Then 'au moins une ligne
      With Worksheets("En-cours")
      Plage2 = .Range("A2", "G" & .Range("A" & Rows.Count).End(xlUp).Row) 'mise en memoire plage saisie
      .Range("A2", "G" & Range("A" & Rows.Count).End(xlUp).Row).ClearContents 'effacement plage saisie
      End With
      With Worksheets("Historique (Dern. Val.)")
      PCV = .Range("A" & Rows.Count).End(xlUp).Row + 1 'Premiere Cellule Vide colonne A
      .Range("A" & PCV, "G" & PCV) = Plage2 'ecriture infos a la suite
      'tri colonne A
      .Sort.SortFields.Clear
      .Sort.SortFields.Add Key:=.Range("B2:B" & PCV), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
      With .Sort
      .SetRange Range("A1:G" & PCV)
      .Header = xlYes
      .MatchCase = False
      .Orientation = xlTopToBottom
      .SortMethod = xlPinYin
      .Apply
      End With
      End With
      Else
      MsgBox "Pas de nouvelles données."
      End If
      ThisWorkbook.Save

      End Sub
    5. @Gui.PrRe,

      code modifie:

      Sub Historique()
          Dim Plage2, Plage1 As Range
          
          If Worksheets("En-cours").Range("A" & Rows.Count).End(xlUp).Row > 1 Then      'au moins une ligne
              With Worksheets("En-cours")
                  Plage2 = .Range("A2", "E" & .Range("A" & Rows.Count).End(xlUp).Row)     'mise en memoire plage saisie
                  .Range("A2", "E" & Range("A" & Rows.Count).End(xlUp).Row).ClearContents     'effacement plage saisie
              End With
              With Worksheets("Historique (Dern. Val.)")
                  PCV = .Range("A" & Rows.Count).End(xlUp).Row + 1        'Premiere Cellule Vide colonne A
                  nb = UBound(Plage2) - 1
                  .Range("A" & PCV, "E" & PCV + nb) = Plage2   'ecriture infos a la suite
                  'tri colonne B
                  .Sort.SortFields.Clear
                  .Sort.SortFields.Add Key:=.Range("B2:B" & PCV + nb), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                  With .Sort
                      .SetRange Range("A1:E" & PCV + nb)
                      .Header = xlYes
                      .MatchCase = False
                      .Orientation = xlTopToBottom
                      .SortMethod = xlPinYin
                      .Apply
                  End With
              End With
          Else
              MsgBox "Pas d'historique a enregistrer !!!!!!"
          End If
          ThisWorkbook.Save
          
      End Sub