Problème de Macro, copie tableau, Excel 2010

Résolu
Anwi -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

J'ai fait une toute petite macro toute simple, pour copier et coller un tableau d'une feuille à une autre. Ca fonctionne très bien, sauf que le problème étant que le tableau se colle toujours à la même cellule, ce qui fait qu'il y a "écrasement" des cellules avec le fameux "Voulez-vous remplacer le contenu des cellules de destination ?".

Donc tout simplement, je voudrais pouvoir prendre mon tableau dans la feuille "Masque 2", de A7 à AO35 et le coller dans la feuille "Calcul 2" sur la troisième ligne vide, sachant qu'il y a déjà une tonne de tableaux sur cette feuille, avec un espace de deux lignes entre chaque tableau. (j'espère être claire, je m'embrouille un peu aussi ...)

Car je dois copier/coller un tableau différent chaque semaine, et certes, un copier/coller n'est pas difficile à faire, mais je préfererai utiliser une macro pour faciliter le boulot.

Donc si vous avez des solutions, je suis preneuse .. Et sinon et bien je continuerai mes copiers/collers "manuels" ^^

Merci.

3 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Salut,

    Il te faut passer par une variable dans laquelle tu stockes le numéro de la dernière ligne non vide.

    Sub machin()
    Dim DernLigne As Long 
    With Sheets("Calcul 2")
        'si la dernière ligne est située colonne C remplacer Columns(1) par Columns(3)
        DernLigne = .Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row + 2
        Range("A7:AO35").Copy .range("A" & DernLigne)
    End With
    End Sub
    1
    1. Anwi
       
      Alors tout d'abord, merci beaucoup à vous deux pijaku et Morgothal pour les réponses aussi rapides. (J'avais déja lu pas mal de vos réponses sur tous les topics, vous êtes vraiment calés !)

      Mon seul soucis dans cette formule est que ... je ne la comprends pas :D

      Je suis vraiment pire que débutante donc là, je ne vois pas ce que je dois changer dans cette formule pour l'appliquer à mon cas ...

      Je vous montre ce que j'avais fait :

      Sub Calcul 2()
      '
      ' Calcul 2 Macro
      '

      '
      Rows("7:35").Select
      Selection.Copy
      Sheets("Calcul 2").Select
      Range("A632").Select
      Application.CutCopyMode = False
      ActiveSheet.Unprotect
      Sheets("Masque 2").Select
      Selection.Copy
      Sheets("Calcul 2").Select
      ActiveSheet.Paste
      End Sub

      Je suis quand même consciente que c'est mon Range("A632").Select qui ne va pas ici, mais je ne vois pas comment le remplacer malgré votre solution (oui oui, pire que débutante :D)

      Merci
      0
  2. Morgothal Messages postés 1350 Statut Membre 184
     
    Bonjour,
    Il suffit de détecter le numéro de la dernière ligne vide, lui ajouter 2, et coller le tableau.
    Pour détecter la ligne :
    derniere_ligne = Sheets("Calcul 2").Range("A65536").End(xlUp).Row

    Le "A65536" spécifie la cellule où on commence à détecter la dernière ligne, puis on monte jusqu'à trouver une valeur (si version >2003, on peut choisir A1000000 si l'on veut).

    A+
    0
    1. Morgothal Messages postés 1350 Statut Membre 184
       
      La solution de pijaku est encore plus complète :-)
      (salut pijaku !)
      0
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour Anwi
    Morgothal mes respects matinaux,

    Bon reprenons ton code :
    Sub Calcul 2() 
    ' 
    ' Calcul 2 Macro 
    Rows("7:35").Select  '==> ici tu sélectionnes la plage à copier
    Selection.Copy '==> ici tu copies cette plage
    Sheets("Calcul 2").Select '==> tu sélectionnes la feuille ou coller
    Range("A632").Select '==> tu sélectionnes la cellule à partir de laquelle coller
    Application.CutCopyMode = False '==> ligne inutile
    ActiveSheet.Unprotect '==> tu déprotèges ta feuille
    Sheets("Masque 2").Select '==> tu retournes sur ta feuille contenant les éléments à copier
    Selection.Copy '==> tu les copies une deuxième fois
    Sheets("Calcul 2").Select '==> tu retournes sur ta feuille ou coller
    ActiveSheet.Paste '==> et tu colles le tout.
    End Sub


    La syntaxe la plus simple pour copier coller des données est :
    Range(CeQueJeVeuxCopier).Copy Range(OuJeVeuxColler)
    à noter l'espace enter les deux Range.
    Ce qui donnerais comme code pour ta situation :
    Sheets("Masque 2").Range("A7:AO35").Copy Sheets("Calcul 2").Range("A632")
    A632 est censé représenter ta dernière ligne.
    Or cela ne fonctionne pas. Il faut donc que ce nombre (632) change à chaque fois. Pour cela, il convient d'utiliser une variable (puisque ce nombre est variable...)
    Pour la dernière ligne non vide de la colonne A, le code est :
    Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
    On stocke donc ce nombre dans une variable :
    Dim DrLig As Long
    DrLig = Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
    et on lui ajoute 3 car on souhaite passer deux lignes :
    Dim DrLig As Long
    DrLig = Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row + 3

    DrLig, sera égal à 632, puis 670 puis 708 etc...
    Ne reste plus qu'à l'insérer dans notre code :
    Dim DrLig As Long
    DrLig = Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row + 3
    Sheets("Masque 2").Range("A7:AO35").Copy Sheets("Calcul 2").Range("A632")

    Comme tu dois en plus déprotéger (puis reprotéger) ta feuille, on va placer celle-ci dans un bloc Wtih End With :
    Sub CopieColle()
    Dim DernLigne As Long 
    With Sheets("Calcul 2") 'avec la feuille calcul 2
        'on cherche le numéro de la dernière ligne :
        DernLigne = .Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row + 2
        'on la déprotège
        .Unprotect
        'on copie colle
        Range("A7:AO35").Copy .range("A" & DernLigne)
        'on reprotège
        .Protect
    End With
    End Sub

    What else?
    0
    1. Anwi
       
      Vraiment un grand merci !

      Je n'en reviens pas du temps que vous prenez pour répondre, et avec des explications parfaites pour un(e) débutant(e) en plus.

      La formule a l'air de bien marcher, je vais pouvoir l'appliquer à mes autres feuilles !

      Encore un grand merci !

      Problème résolu !
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      de rien, le forum est là pour cela.
      N'hésite pas.
      A+
      0