| ||||||||
Petit astucien | Bonjour à toutes et tous,
Je ne connais pas très bien excel, mais je me suis quand même lancé dans l'aventure de la création de macro.
Le but de ma macro est d'insérer un tableau qui contient plusieurs colonnes et plusieurs lignes. C'elle que j'ai créé pour l'instant fonctionne très bien mais le gros inconvénient est qu'elle copie tout simplement le tableau situé au-dessus. Mais ça ne me convient pas vraiment.
Ce que je voudrais, c'est insérer un tableau vierge, et pas faire une copie de ce qu'il y a au-dessus (le but étant, si j'y arrive, d'insérer des tableaux différents les uns des autres).
Ma question est de savoir s'il est possible, à l'aide d'une macro, d'insérer dans la feuille 1 un tableau provenant de la feuille 2 et si oui, comment?
J'espère que j'ai été clair... [crazy] [clindoeil]
D'avance merci pour votre aide!! [bierre]
| |||||||
Publicité | ||||||||
| ||||||||
![]() | bonjour,
C'est assez compliqué
Au lieu de faire un Copier/Coller il faut faire plusieurs PasteSpecial successifs :
[code]Selection.PasteSpecial Paste:=xlPasteFormats
Selection.PasteSpecial Paste:=xlPasteFormulas
Selection.PasteSpecial Paste:=xlPastexlPasteColumnWidths[/code]
A+ | |||||||
Petit astucien | Salut galopin
merci pour ta réponse!
Je confirme, le copier-coller ne fonctionne pas (j'ai déjà essayé plusieurs fois, ça marche pas)
Tu peux me dire comment faire ce "collage spécial" stp?
(euh... je comprends pas très bien en fait...)
merci!! Modifié par Oli359 le 24/02/2006 10:48 | |||||||
![]() |
re...
xlPastexlPasteColumnWidths étant assez complexe à utiliser,
Tu peux essayer ce genre de truc :[code]Sub Test()
Sheets("Feuil1").Range("B5:D10").Copy
With Sheets("Feuil2").Range("B5")
.PasteSpecial Paste:=xlPasteFormats
.PasteSpecial Paste:=xlPasteFormulas
End With
For i = 1 To 25
k = Sheets("Feuil1").Columns(i).ColumnWidth
Sheets("Feuil2").Columns(i).ColumnWidth = k
Next
End Sub[/code]
Il suffit de changer Range("B5:D10") pour ta plage perso
et si tu as plus de 25 colonnes tu mets :
For i = 1 To 50 'par exemple...
Nota : Celà ne peut fonctionner s'il y a des cellules fusionnées dans ton tableau.
Les cellules fusionnées sont (presque !) incompatibles avec VBA.
A+ | |||||||
Petit astucien | galopin01 a écrit :
Merci pour ton aide, mais je n'avais jamais entendu parler de VBA jusqu'à ce matin...
Je ne comprends donc absolument rien de ce que tu as écrit plus haut... Désolé... [rougir]
Il n'existe pas une façon plus "simple" de faire les manipulations que tu me recommandes?re... xlPastexlPasteColumnWidths étant assez complexe à utiliser, Tu peux essayer ce genre de truc :[code]Sub Test() Sheets("Feuil1").Range("B5:D10").Copy With Sheets("Feuil2").Range("B5") .PasteSpecial Paste:=xlPasteFormats .PasteSpecial Paste:=xlPasteFormulas End With For i = 1 To 25 k = Sheets("Feuil1").Columns(i).ColumnWidth Sheets("Feuil2").Columns(i).ColumnWidth = k Next End Sub[/code] Il suffit de changer Range("B5:D10") pour ta plage perso et si tu as plus de 25 colonnes tu mets : For i = 1 To 50 'par exemple... Nota : Celà ne peut fonctionner s'il y a des cellules fusionnées dans ton tableau. Les cellules fusionnées sont (presque !) incompatibles avec VBA. A+ | |||||||
![]() | Re :
La copie d'un tableau entier n'est pas vraiment un exercice de débutant !
Toutefois la macro que je t'ai donné copie un tableau entier de la "Feuil1" vers la "Feuil2"
Avec les précisions que je t'ai données.
Il suffit de Copier tout le code, le coller dans un module STANDART (Module1...) et appuyer sur F5
Tu peux déjà vérifier que la macro fonctionne bien dans un classeur d'essai, t'entraîner à la modifier pour copier une plage plus grande. Puis quand tu auras compris le fonctionnement...
Si nécessaire, remplacer la Feuille Origine ("Feuil1") par "TaFeuilleModèle"
et remplacer la Feuille Cible ("Feuil") par "TaFeuilleDestination")
Et tu gagneras déjà un temps précieux.
Après, tout est une question de réglages, de tâtonnements, d'erreurs, de patience et d'apprentissage petit à petit...
A+ Modifié par galopin01 le 24/02/2006 13:01 | |||||||
Petit astucien | galopin01 a écrit :
Ok, parfait!!
Un grand merci pour ton aide!
Je vais de se pas suivre tes indications et voir comment ça se passe!!
A plus tard! [chinois]Re : La copie d'un tableau entier n'est pas vraiment un exercice de débutant ! Toutefois la macro que je t'ai donné copie un tableau entier de la "Feuil1" vers la "Feuil2" Avec les précisions que je t'ai données. Il suffit de Copier tout le code, le coller dans un module STANDART (Module1...) et appuyer sur F5 Tu peux déjà vérifier que la macro fonctionne bien dans un classeur d'essai, t'entraîner à la modifier pour copier une plage plus grande. Puis quand tu auras compris le fonctionnement... Si nécessaire, remplacer la Feuille Origine ("Feuil1") par "TaFeuilleModèle" et remplacer la Feuille Cible ("Feuil") par "TaFeuilleDestination") Et tu gagneras déjà un temps précieux. Après, tout est une question de réglages, de tâtonnements, d'erreurs, de patience et d'apprentissage petit à petit... A+ | |||||||
Petit astucien | Voilà, j'ai réussi à copier la commande et la macro fonctionne! (et je l'ai aussi modifiée pour qu'elle copie de la feuil2 vers la feuil1) Super, ça marche!!
Maintenant, est-ce que tu pourrais me dire ce qu'il faut y changer pour que ce tableau s'insère dans une case que j'ai sélectionné à l'avance dans ma feuil1 et non pas au même endroit que celui de la feuil2? (c'est ça les incréments ou je me trompe?...)
Merci d'avance!! [smile] | |||||||
Petit astucien | Oli359 a écrit :
Voilà, j'ai réussi à copier la commande et la macro fonctionne! (et je l'ai aussi modifiée pour qu'elle copie de la feuil2 vers la feuil1) Super, ça marche!! Maintenant, est-ce que tu pourrais me dire ce qu'il faut y changer pour que ce tableau s'insère dans une case que j'ai sélectionné à l'avance dans ma feuil1 et non pas au même endroit que celui de la feuil2? (c'est ça les incréments ou je me trompe?...) De plus, comment faire pour que les dimensions (hauteur, largeur) des colonnes et des lignes n'entrent pas en compte? En d'autres mots, comment faire pour que le tableau de la feuil2 s'adapte aux dimensions du tableau de la feuil1? Merci d'avance!! [smile] | |||||||
![]() | Non ça n'a rien à voir avec l'incrémentation. On pourrait plutôt parler (éventuellement) d'Offset.
Dans ma macro ma cible est :
With Sheets("Feuil2").Range("B5")
il suffit de remplacer par ta cible.
Ok ? Modifié par galopin01 le 24/02/2006 14:21 | |||||||
Petit astucien | galopin01 a écrit :
Ok...
donc si je comprends bien, la commande dit qu'elle doit copier dans la feuille 2 à partir de la cellule B5.
Or, ce que je voudrais, c'est qu'au lieu que ce soit B5, ce soit la cellule courante de la feuille 2.Non ça n'a rien à voir avec l'incrémentation. On pourrait plutôt parler (éventuellement) d'Offset. Dans ma macro ma cible est : With Sheets("Feuil2").Range("B5") il suffit de remplacer par ta cible. Ok ? Modifié par Oli359 le 24/02/2006 14:34 | |||||||
![]() | C'est pas l'idéal, il vaut mieux éviter ce genre de formulation dans une macro.
Si tu insistes...
Celà suppose que ta feuille cible est la feuille active au moment du lancement de la macro.
La macro sera alors :[code]Sub Test()
Sheets("Feuil1").Range("B5:D10").Copy
ActiveCell.PasteSpecial Paste:=xlPasteFormats
ActiveCell.PasteSpecial Paste:=xlPasteFormulas
For i = 1 To 25
k = Sheets("Feuil1").Columns(i).ColumnWidth
Sheets("Feuil2").Columns(i).ColumnWidth = k
Next
End Sub[/code]
A+ Modifié par galopin01 le 24/02/2006 16:59 | |||||||
|
Les bons plans du moment PC Astuces | Tous les Bons Plans | |||||||||||||||
|