Aide macro Excel

Gui.Pr Messages postés 7 Statut Membre -  
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   -
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. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

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

    A+
    0
    1. Gui.Pr Messages postés 7 Statut Membre
       
      C'est excellent ! Merci infiniment !
      0
    2. Gui.Pr Messages postés 7 Statut Membre
       
      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 ?
      0
    3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > Gui.Pr Messages postés 7 Statut Membre
       
      Re,

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

      Donnez un exemple
      0
    4. Gui.Pr Messages postés 7 Statut Membre
       
      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
      0
    5. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > Gui.Pr Messages postés 7 Statut Membre
       
      Re,

      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
      0