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 -
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.
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:
- Problème de Macro, copie tableau, Excel 2010
- Tableau word - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Trier un tableau excel - Guide
- Imprimer tableau excel sur une page - Guide
- Liste déroulante excel - Guide
3 réponses
Salut,
Il te faut passer par une variable dans laquelle tu stockes le numéro de la dernière ligne non vide.
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
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 :
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+
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+
Bonjour Anwi
Morgothal mes respects matinaux,
Bon reprenons ton code :
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 :
What else?
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?
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