Macro pour dupliquer des tables selon une colonne

Résolu/Fermé
Niquo69 Messages postés 5 Date d'inscription mercredi 2 avril 2014 Statut Membre Dernière intervention 11 mai 2015 - 2 avril 2014 à 17:15
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 - 4 avril 2014 à 12:26
Bonjour les experts,

Etant novice en matière de macro, j'aimerai recevoir vos lumières pour une manipulation que vous trouverez sans doute simple, voir simpliste.
Voila mon problème :
J'ai deux fichiers excel :
- Le 1er contient simplement une colonne avec des noms de clients : DUPONT, BERTRAND, etc.
Le 2nd fichiers excel est un questionnaire.

Je souhaiterai générer automatiquement des questionnaires (2nd fichier) reprenant les noms des clients.

A titre d'illustration, mon 1er fichier contient deux clients : Monsieur DUPONT et Monsieur BERTRAND.
Je souhaiterai générer une macro qui me permettrait de générer automatiquement un questionnaire reprenant le nom du client par exemple : DUPONT_QUESTIONNAIRE.

Bien entendu, mon 1er fichier contient une centaine de nom et je ne souhaite pas taper les noms de mes questionnaires à la main.

Merci pour vos lumières.

Au plaisir de vous lire.

Niquo69
A voir également:

5 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
3 avril 2014 à 12:02
Bonjour,

Il faut que votre classeur Questionnaire soit dans le même dossier que le classeur ayant les noms. Je l'ai nommé "questionnaire" a vous de l'adapter.
Mettre dans le classeur et la feuille ayant les noms ce code.
Pour accéder au code faites AltF11:


Option Explicit
Dim nom As String
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Value = "" Then Exit Sub
nom = Target.Value
Workbooks.Open (ThisWorkbook.Path & "\questionnaire.xls") 'extension à adapter
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & nom & "_questionnaire.xls" 'extension à adapter
MsgBox "votre classeur est enregistré à cet emplacement: " & ThisWorkbook.Path & "\" & nom & "_questionnaire.xls" 'extension à adapter
End Sub
--
@+ Le Pivert
0
Niquo69 Messages postés 5 Date d'inscription mercredi 2 avril 2014 Statut Membre Dernière intervention 11 mai 2015
Modifié par Niquo69 le 4/04/2014 à 09:56
Un grand MERCI pour ta réponse Pivert :)
J'ai crée un bouton dans mon ficheir excel auquel j'ai associé la macro suivante :

Option Explicit
Dim nom As String
Private Sub Bouton4_Clic(ByVal sel As Range)

If Target.Value = "" Then Exit Sub
nom = Target.Value
Workbooks.Open (ThisWorkbook.Path & "\questionnaire.xls") 'extension à adapter
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & nom & "_questionnaire.xls" 'extension à adapter
MsgBox "votre classeur est enregistré à cet emplacement: " & ThisWorkbook.Path & "\" & nom & "_questionnaire.xls" 'extension à adapter
End Sub


Une fois lancée, j'ai un message d'erreur me disant "argument non facultatif".

Ai-je loupé une étape importante ? Si oui laquelle ?

Un grand MERCI pour ton retour.

Niquo69
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
4 avril 2014 à 10:36
Je n'ai pas dit de créer un button. J'ai dit de mettre ce code dans la feuille concernée (celle où tes noms sont saisis). La procédure ce déclenche quand tu cliques sur un nom avec:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
Modifié par eriiic le 4/04/2014 à 10:17
Bonjour,

Tu t'es créé une procédure en ajoutant un paramètre (inutile d'ailleurs). Donc excel te demande ce paramètre, normal.
Il n'y a que dans les évènements connus et géré par excel que ce passage de paramètre est automatique (ce qu'avait utilisé picvert).

Fais plutôt qcq chose comme ça :
Sub creerFichiers()
    Dim c As Range
    For Each c In Selection
        ' ton code utilisant c.value comme variable et non pas target qui n'existe pas
    Next c
End Sub

Ensuite ajoute ton bouton.
Si c'est un bouton Formulaire, fais le lien vers cette procédure.
Si c'est un bouton ActiveX, appelle cette procédure dans son code (double-cliquer sur le bouton pour se mettre dans l'évènement click).

Sélectionnes A6:A10 avant de cliquer pour créer ces 5 fichiers.

eric


En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.(devise Shadok)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
0
Niquo69 Messages postés 5 Date d'inscription mercredi 2 avril 2014 Statut Membre Dernière intervention 11 mai 2015
4 avril 2014 à 10:52
Merci Eric pour ta réponse.

J'ai crée un bouton active X et je lui ai attribué le code suivant :

Private Sub CommandButton1_Click()
Dim c As Range
For Each c In Selection
If Target.Value = "" Then Exit Sub
nom = Target.Value
Workbooks.Open (ThisWorkbook.Path & "\questionnaire.xls") 'extension à adapter
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & nom & "_questionnaire.xls" 'extension à adapter
MsgBox "votre classeur est enregistré à cet emplacement: " & ThisWorkbook.Path & "\" & nom & "_questionnaire.xls" 'extension à adapter
End Sub

J'ai un message d'erreur en retour me disant qu'il y a une erreur de compilation "For sans Next"".

Pourrais-tu m'éclairer ?

Merci d'avance
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
4 avril 2014 à 11:03
Si tu ne lis attentivement ce qu'on écrit ça peut durer longtemps, vba ne supporte pas l'approximation, et encore moins l'invention.
Lis aussi les messages d'erreur, il est explicite : "For sans Next"
Et relis le code que je t'ai proposé, y compris le commentaire (2nde erreur).

eric
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Niquo69 Messages postés 5 Date d'inscription mercredi 2 avril 2014 Statut Membre Dernière intervention 11 mai 2015
4 avril 2014 à 11:14
Je débute en VBA, c'est tjs un peu compliqué :D
En tous les cas, je viens de trouver la solution à mon problème grâce à vous.
Un très grande MERCI pour ce gain de temps.

Niquo69
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
Modifié par eriiic le 4/04/2014 à 12:26
Et c'est comme ça qu'on progresse aussi, en cherchant un peu et en étant attentif ;-)
N'oublie pas de mettre en résolu stp
eric
0