Problème de Macro, copie tableau, Excel 2010
Résolu/Fermé
Anwi
-
12 nov. 2012 à 09:44
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 12 nov. 2012 à 10:35
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 12 nov. 2012 à 10:35
A voir également:
- Problème de Macro, copie tableau, Excel 2010
- Tableau croisé dynamique - Guide
- Liste déroulante excel - Guide
- Copie cachée - Guide
- Tableau ascii - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
3 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 741
12 nov. 2012 à 09:51
12 nov. 2012 à 09:51
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
Morgothal
Messages postés
1236
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
19 mai 2015
183
12 nov. 2012 à 09:51
12 nov. 2012 à 09:51
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+
Morgothal
Messages postés
1236
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
19 mai 2015
183
12 nov. 2012 à 09:54
12 nov. 2012 à 09:54
La solution de pijaku est encore plus complète :-)
(salut pijaku !)
(salut pijaku !)
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 741
12 nov. 2012 à 10:17
12 nov. 2012 à 10:17
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?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 741
12 nov. 2012 à 10:35
12 nov. 2012 à 10:35
de rien, le forum est là pour cela.
N'hésite pas.
A+
N'hésite pas.
A+
12 nov. 2012 à 10:03
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