Bouton pour copier plusieurs colonne d'un tableau (Macro)

Bonjour à tous.

Alors mon problème est je pense assez simple mais je n'ai pas trouvé mon bonheur sur le web.

Je souhaiterais par le biais d'une macro, copier plusieurs colonne de ma feuille vers une deuxième feuille du même classeur.

Tout cela par le biais d'un bouton qui, quand on clique dessus, va créé la feuille pour tout mettre dans celle ci avec les informations.

Un petit exemple simple :

Colonne 1 - Colonne 2 - Colonne 3 - Colonne 4 ===> Je clique sur le bouton

Création d'une nouvelle feuille avec (Par exemple)

Colonne 1 - Colonne 3 - Colonne 4

Je ne souhaite pas forcément récupérer tout mon tableau. Mais il me faut les informations contenu dans mon tableau de la feuille 1 je ne veux pas de case vide, à moins qu'elle le soit déjà par avance.

Il me faudrait juste la méthode, je modifierais ma macro en fonction de mon tableau.

J'espère que j'ai été assez clair, hésité pas à me demander si vous ne comprenez pas.

Merci

Bonjour et bienvenue sur le forum

Un essai.

Cela te convient-il ?

906essai-v1.xlsm (23.60 Ko)

Bonjour, merci pour la réponse.

C'est presque ça, j'ai regarder votre macro mais j'ai du mal à voir ou je pourrais définir les colonnes à copier.

Je connais déjà le nom de mes colonnes à copier, j'aurais aimé savoir comment je pourrais modifier la macro de telle sorte à ce que, quand je clique sur le bouton recopie, cela me recopie juste les colonnes que j'aurais défini dans le code.

C'est plus pour un aspect pratique, car cette macro m'oblige à sélectionner chaque colonne à fois.

J'ai aussi remarqué que la macro nous fais une nouvelle feuille à chaque fois que je sélectionne une autre colonnes. Je souhaiterais plutôt que :

Quand on clique sur le bouton et juste pour la toute première fois que je cliquerais dessus, que cela créé une nouvelle feuille (Feuil2) avec les colonne voulus à l'intérieur. Et par la suite quand je "recliquerais" dessus quand j'aurais modifier des valeurs, que cela mettent à jour la (Feuil2)

Merci

Nouvelle version, modifiable à l'envie.

Cela te convient-il mieux ?

1'131essai-v2.xlsm (24.10 Ko)

C'est ce que je voulais, merci beaucoup

Sa m'aurais pris plusieurs jours sans ton aide!

Tu avais oublié de déclarer le "i" par contre

Merci encore!

Je fais face à un nouveau problème :

C'est au niveau de la création de feuille que ça cloche, après une exécution pas à pas ton code plante au niveau de :

(Je vais détaillé chaque ligne pour voir si j'ai bien compris le chose et si j'ai bien trouvé l'erreur)

If F.Name = NomFdest Then (Si F est = au nom "Destination" alors on va dans cette feuille)

Sheets(F.Name).Select

Range("A1").CurrentRegion.ClearContents '---> initiatlisation du tableau de destination

Exit For

Else (Sinon on créé la feuille nommé "Destination")

Sheets.Add

ActiveSheet.Name = NomFdest '---> Création de la feuille "Destination"

End If

Next F (Il continu la boucle je suppose)

i = 0 <=== problème!

Au lieu de continuer et d’exécuter la suite il remonte au "If F.Name = NomFdest Then" et réexecute la même chose jusqu’à arriver sur "End if" le lieu ou la macro plante.

J'ai ce message :

Erreur d’exécution '1004' :

"Impossible de renommer une feuille comme une autre feuille , une bibliothèque d'objet référencée, ou un classeur d'objet référencé par Visual Basic."

La seul qui diffère entre votre macro et la mienne c'est que moi, j'ai deux feuilles de départ. Je pense qu'il faudrait faire une vérification qui nous dit :

Avant que l'on créé la feuille destination, vérifier que l'on ce trouve dans le dernière onglet, ce qui donne que la boucle s’arrêtera et ne recherchera pas a créé plein page et donc, la macro ne plantera surement plus.

Peu être que je me suis aussi complétement gouré dans l'analyse

C'est à toi de me le dire

Désolé de prendre de votre temps pour ça, mais je n'y arriverai pas seul.

Merci

Ok

La première boucle était incorrecte.

Essaie cette nouvelle version, cela devrait mieux marcher

Merci de me dire le résultat.

Bye !

610essai-v4.zip (21.23 Ko)

Bonjour!

On avance, on avance !

Le copie ce fais bien, sauf qu'il faudrait écrire quelque chose qui nous permettent d'indiquer à la phrase :

Range("A1").Offset(0, i).PasteSpecial xlPasteAll

Ou est ce qu'il doit coller le tableau.

J'ai fais le test en mettant la ligne suivante en commentaire :

'Fdép.Range(Col & 1 & ":" & Col & Fdép.Range(Col & Rows.Count).End(xlUp).Row).Copy

Et en faisant une copie simple grâce à la commande ci-dessous, et quand il colle mon tableau il me mets les valeurs dans ma feuille ou j'effectue la copie et non dans la feuille "Destination".

Fdép.Range("A602:B603").Copy

Je pense qu'une simple instruction sur le collé ressouderais le problème.

Merci !

Bonjour

J’avoue ne pas très bien comprendre où est le problème.

Les colonnes ne se collent pas sur la bonne feuille ? Pas au bon endroit ?

Les 2 instructions :

For Each Col In ColDest                         '---> Recopie des colonnes
        Fdép.Range(Col & 1 & ":" & Col & Fdép.Range(Col & Rows.Count).End(xlUp).Row).Copy

permettent de recopier l’une après l’autre les colonnes de ton tableau de départ et qui sont définies plus haut dans la variable « Array » ( colonnes A, B, et D) en faisant prendre sucessivement ces valeurs à variable « Col »

Au premier tour de boucle, on aura :

Range(‘’A1 :A11’’). Copy

Si la dernière ligne utile de la colonne est 11

Quant à l’instruction :

Range("A1").Offset(0, i).PasteSpecial xlPasteAll

c’est celle qui indique où la macro doit coller ce qu’elle a copié.

Quand elle arrive à cette instruction, la feuille active est la feuille où elle doit faire le collage, que cette feuille soit la feuille « Destination » déjà existante ou une nouvelle feuille qu’elle vient de créer et de baptiser « Destination » (NomFdest)

Le « i » de cette instruction sert à coller les colonnes les unes aux autres, même si sur la feuille d’origine elles ne le sont pas :

Range("A1") ---> adresse de la cellule A1

Range("A1").offset(0,i) ---> adresse de la cellule décalée de zéro ligne et de i colonnes par rapport à A1

Je ne vois pas que te dire de plus.

Mais je reste à ta disposition.

A te lire

En gros je veux que ça colle les colonnes voulu dans la feuille destination, alors que la elle ce colle sur la feuille d'origine, donc il me met un plantage.

"Erreur d'exécution 1004"

"Erreur définie par l'application ou par l'objet"

Il me créé bien une feuille supplémentaire appelé destination mais il colle pas dedans, c'est ça qui merdouille

J'espère que j'ai été plus clair, sinon je t'enverrais mon fichier par message privée pour que tu y vois mieux

Merci

Bonjour

Johan49 a écrit :

sinon je t'enverrais mon fichier par message privée pour que tu y vois mieux

Je veux bien car sur mon fichier, je n'ai pas ces problèmes et si je ne peux pas les reproduire, je ne pourrai pas les résoudre.

A te relire.

Bonjour

Tu as voulu transposer la macro que je t’ai faite sur un autre document.

Or, c’est une macro qui fonctionne sur deux feuilles, puisqu’elle doit copier les colonnes d’un tableau pour les coller sur une autre feuille.

Il ne faut donc pas la mettre dans les procédures d’une feuille mais dans un module.

D’une manière générale, je pense qu’il vaut mieux utiliser des modules pour les macros et ne se servir des procédures de feuilles que pour les macros événementielles où là, elles ont tout leur intérêt. Exemple : macro qui se déclenche à l’ouverture du fichier, à l’activation d’une feuille, quand on sélectionne ou valide une cellule etc…

Je te retourne donc ton fichier que j’ai un peu alléger pour le faire mieux passer.

Et si je peux me permettre une autre remarque, le logo de ton entreprise faisait plus de 800 k. Je l’ai alléger avec photoshop car il est inutile qu’il soit si lourd.

A te relire, à ton retour, et si tu as besoin…

Bye !

Salut Gmb !

Déjà merci pour cette macro !

J'ai juste un dernier petit détail, c'est qu'au lieu que la macro copie les formules des colonnes (Si il y en a) il me faudrais juste la valeur contenu dans celle ci.

Exemple :

j'ai la case V12 avec la formule : =RECHERCHEV(E12;Feuil1!$A$2:$B$65;2;VRAI)

Je voudrais que quand ma macro créé la nouvelle feuille ou l’édite si il est déjà créé, quel copie juste la valeur que donne la formule et non pas la formule en elle même, car j'ai des #REF! à la place.

Je pense que ce sera moins embêtant avec ça.

Pour résumer :

Ma feuille de base "Activité mensuelle" comporte des formules sur certaine colonne.

Je clique sur le bouton de la macro qui créé une nouvelle feuille "Destination" qui elle ne comporte juste le résultat des formules de la feuille "Activité mensuelle"

Je pense que la modification doit s'effectuer par ici (Je me trompe peu être) :

For Each Col In ColDest '---> Recopie des colonnes

Fdép.Range(Col & 1 & ":" & Col & Fdép.Range(Col & Rows.Count).End(xlUp).Row).Copy

Range("A1").Offset(0, i).PasteSpecial xlPasteAll

i = i + 1

Merci !

J'ai trouvé par moi même !

J'ai remplacé :

Range("A1").Offset(0, i).PasteSpecial xlPasteAll

Par : Range("A1").Offset(0, i).PasteSpecial xlPasteValues

Ce me donne donc le résultat que j'attends

Merci encore Gmb et une prochaine fois.

EDIT :

Décidément ce tableau ne me laissera jamais en paix

Il me copie bien les valeurs, mais il ne copie que les valeurs maintenant, je n'est donc plus mon logo, n'y les couleurs du tableau.

Bonjour Johan

Et bravo pour avoir trouvé seul.

Et si tu veux conserver les couleurs il te faut aussi faire

Range("A1").Offset(0, i).PasteSpecial xlPasteFormats

Bon courage !

Bye !

C'est bon tout fonctionne! Mon collègue est content maintenant

Merci encore pour le temps passer à m'aider

Si j'ai d'autre soucis sur Excel, je connais un expert maintenant.

à bientôt!

Rechercher des sujets similaires à "bouton copier colonne tableau macro"