Problème de Macro, copie tableau, Excel 2010

Résolu
Anwi -  
pijaku Messages postés 12263 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.


A voir également:

3 réponses

pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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
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
Morgothal Messages postés 1236 Date d'inscription   Statut Membre Dernière intervention   183
 
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
Morgothal Messages postés 1236 Date d'inscription   Statut Membre Dernière intervention   183
 
La solution de pijaku est encore plus complète :-)
(salut pijaku !)
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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
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
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
de rien, le forum est là pour cela.
N'hésite pas.
A+
0