Création de fiches "client" dans nouveaux classeurs

Bonjour,

Je fais appel à la communauté car je ne sais vraiment pas comment m'y prendre pour solutionner ce problème : création d'une fiche client (nouveau fichier à partir d'un gabarit).

J'ai un fichier source contenant des données sur des clients (un client par ligne à partir de la ligne 2). En colonne D, je dois cocher OUI ou NON (validation données) si je souhaite exporter la fiche client.

Pour toutes les lignes cochées "OUI", je souhaite copier coller les données des clients dans un gabarit vierge que j'ai créé dans un 2ème onglet.

Chaque fiche client ainsi créée avec ce gabarit devra être exportée dans un nouveau classeur à créer, portant le nom du client (à sauvegarder sous le répertoire courant).

Chaque fiche pourra ensuite être consultée et complétée par les commerciaux qui auront accès au répertoire.

Si besoin, j'ai confectionné un template (fichier "modèle" sans macro), que je me permets de joindre ici.

22fichier-source.xlsx (13.96 Ko)

Merci de votre précieuse aide.

Bonjour,

Un exemple à adapter.

Cdlt.

45fichier-source.xlsm (26.79 Ko)

Top Jean-Eric, merci !

Je vais à présent l'adapter à mon cas (notamment copier-coller en conservant la largeur des colonnes, et créer un bouton dans la fiche pour la sauvegarder).

Malgré mes connaissances limitées, j'ai moi-même aidé ce jour pour la 1ère fois un internaute dans ce forum (lui-même nouveau sur le forum) : votre aide m'a en quelque sorte récompensée... c'est le but d'un forum à vrai dire : aider les autres et se faire aider.

Tout ça me motive à approfondir VBA...

Encore merci!

Bonjour,

Un exemple à adapter.

Cdlt.

Fichier_source.xlsm

Jean Eric bonjour,

J'ai finalement fait le choix d'un USERFORM pour remplir le questionnaire de la fiche client à créer (car j'ai en fait beaucoup plus de questions à remplir par les commerciaux, et un USERFORM sera plus pratique qu'une liste déroulante).

J'ai donc confectionné un USERFORM dans le fichier source.

Comment puis-je faire pour arriver au même objectif, à savoir :

  • toujours créer un nouveau classeur pour chaque client coché "OUI" dans le fichier source
  • exporter le USERFORM (pré-rempli dans le 1er cadre : nom, prénom, age, ville : je ne sais pas s'il faut remplir les RowSource ou coder dans ces 4 listbox) dans ce nouveau classeur afin de permettre la saisie du USERFORM à l'ouverture du fichier par le commercial?
Je sais comment afficher le USERFORM en pleine page, mais je souhaite faire en sorte que toutes les données saisies par les commerciaux soient aussi reportées dans une feuille de ce nouveau classeur pour exploitation statistique ultérieure.

Si ce n'est pas trop compliqué pour toi et tu as un peu de temps, pourrais tu me venir en aide STP?

D'avance merci.

21fichier-source.xlsm (23.60 Ko)

Bonjour,

Les Userforms, c'est pas trop mon truc.

Et le temps que je réponde, tu auras eu de nombreuses réponses. .

Je laisse donc le soin à d'autres intervenants de t'apporter une aide.

Cdlt.

Bonjour,

Quelqu'un peut-il m'aider SVP? J'ai fait beaucoup de recherches vaines sur mon sujet.

L'idée étant : à partir d'un classeur actif contenant un USERFORM, de créer de nouveaux classeurs (fiches client) et d'exporter le USERFORM pour qu'à l'ouverture de ces nouveaux classeurs les utilisateurs puissent compléter cette fiche client.

Je me demande d'ailleurs s'il ne faudrait pas non plus exporter un code événementiel "OPEN" dans le "ThisWorkbook" de chaque classeur pour qu'ils affichent le USERFORM à l'ouverture...

Merci de votre aide.

11fichier-source.xlsm (24.08 Ko)

Bonjour,

si tu veux mon avis tu es en train de vouloir faire une usine à gaz pour un problème très simple.

Ajoute tes 2 champs à compléter dans ton tableau.

Avec un simple filtre l'utilisateur aura ceux à compléter, ou bien pourra simplement rechercher ou filtrer son nom de client plutôt que de s'embêter à balayer tous les onglets.

Surtout pour au bout du compte avoir à ramener ces nouvelles infos dans l'onglet original...

eric

29fichier-source.xlsm (24.08 Ko)

Bonjour Eriiic,

Je comprends ton point de vue à la lecture de mon fichier, mais il faut savoir que mes fichiers de test postés sur les forums sont toujours de simples template (confidentialité oblige), afin de permettre aux contributeurs d'aller droit à l'essentiel. J'adapte ensuite le code à mes besoins.

Mon vrai fichier source comporte plus de 30 colonnes à reporter dans le nouveau classeur, et le questionnaire final (USERFFORM) va comporter pas moins de 40 questions à choix multiples...

J'ai donc vraiment besoin de passer par un USERFORM à exporter dans chacune des fiches clients...

Si quelqu'un peut m'aiguiller...

Tu peux passer par un userform (ou une grille sur feuille, même effet, gestion considérablement plus simple en vba) si tu as effectivement beaucoup plus de champs en cause.

Il n''en reste pas moins que créer une fiche par clien n,'est pas une bonne idée.

De toute façon tu ne peux en regarder qu'une à la fois, à rapatrier de ta base de donnée unique.

A moins d'un besoin très spécifique il est préférable d'éviter de dupliquer les données.

eric

Je comprends, mais j'assure devoir passer par des USERFORM, car j'ai 18 utilisateurs finaux qui doivent accéder à leurs fiches clients pour remplir le questionnaire.

Merci pour vos futures contributions pour m'y aider.

J'ai regardé vite fait ton fichier, aucun code dans le userform.

J'ai déduis que tu n'as pas le B.A.BA nécessaire pour démarrer.

Regarde le menu 'FORMATION PRATIQUE VBA' en haut de cette page pour te mettre le pied à l'étrier.

eric

Eriiic, de grâce un peu d'indulgence : j'avoue me former petit à petit, grâce aux forums bien-sûr mais aussi avec le temps important que j'y consacre. Je suis comme beaucoup d'internautes dans ce forum, un passionné d'Excel.

Je n’ai pas commencé à coder le USERFORM tant que je n’avais pas trouvé la solution pour l’exporter dans chaque nouveau classeur…

A défaut de savoir comment exporter un USERFORM dans chaque fiche depuis mon classeur actif, j’ai retenu un module qui va :

  • reporter les éléments du fichier source dans chaque fiche client,
  • écrire un code événementiel dans chaque fiche : à l'ouverture, l'événement OPEN du Workbook importera automatiquement un USERFORM sauvegardé sous d:tuto.frm.

J'ai bien avancé sur mon code, mais je me heurte à un dernière problème : je n'arrive pas à insérer le code événementiel dans chaque nouveau classeur (sauf dans le classeur de travail) avant de les fermer.

Si quelqu’un peut m’aider pour cet ultime effort…

Voici mon code :

Option Explicit

' création d'une fiche, envoi des données du client dans la feuille1 du nouveau classeur
' et écriture d'un code événementiel (à l'ouverture) dans la fiche pour importer le USERFORM sauvegardé.

Public Sub Crea_Fiches()
Dim wb As Workbook
Dim wsSource As Worksheet, wsDesti As Worksheet
Dim lo As ListObject
Dim strPath As String, strFilename As String
Dim Cell As Range
Dim X As Integer
Dim ufPath As String
Dim CT As Workbook
Dim C As Workbook

    Application.ScreenUpdating = False
    ufPath = "d:tuto.frm"
    Set wb = ActiveWorkbook
    strPath = wb.Path & Application.PathSeparator
    Set wsSource = wb.Worksheets("SOURCE")
    Set lo = wsSource.ListObjects(1)

    Set wsDesti = wb.Worksheets("DESTI")
    Set CT = Workbooks("Fichier_source.xlsm") 'définit le classeur de travail

    For Each Cell In lo.ListColumns(4).DataBodyRange
        If UCase(Cell) = "OUI" Then

            With wsDesti
                .Cells(2, 1).Value = Cell.Offset(, -3).Value
                .Cells(2, 2).Value = Cell.Offset(, -2).Value
                .Cells(2, 3).Value = Cell.Offset(, -1).Value
                .Cells(2, 4).Value = Cell.Offset(, 1).Value
                strFilename = .Cells(2, 1).Value & "_" & .Cells(2, 2).Value
            End With
            wsDesti.Copy

                      'Ecriture d'un code événementiel dans Thisworkbook de chaque nouveau classeur créé
                        For Each C In Application.Workbooks 'boucle sur tous les classeurs ouverts
                            If Not wb.Name = CT.Name Then 'condition : si le classeur n'est pas CT

                                With C.VBProject.VBComponents("ThisWorkbook").CodeModule
                                    X = .CountOfLines
                                    .InsertLines X + 1, "Private Sub Workbook_Open"
                                    .InsertLines X + 2, "ActiveWorkbook.VBProject.VBComponents.Import ufPath"
                                    .InsertLines X + 3, "End Sub"
                                End With
                            End If
                        Next C

            With ActiveWorkbook
                .Worksheets(1).Name = strFilename
                .SaveAs strPath & strFilename, 52

            End With
        End If

    Next Cell

    For Each C In Application.Workbooks 'boucle sur tous les classeurs ouverts
        If Not C.Name = CT.Name Then 'condition : si le classeur n'est pas CT
        C.Close
        End If
     Next C

    With wsDesti
        .Cells(2, 1).Value = ""
        .Cells(2, 2).Value = ""
        .Cells(2, 3).Value = ""
        .Cells(2, 4).Value = ""
    End With

End Sub

Désolé mais je ne vois toujours de raison de créer des classeurs avec une fiche par client, tu n'y as pas répondu.

Pour moi c'est un travail aussi efficace que de boucher un trou en en creusant un autre...

Je ne t'aiderai donc pas beaucoup si tu continues dans cette direction.

Ceci dit la façon la plus simple de mettre un code dans un classeur est de ne pas à avoir à le faire.

Crée toi un classeur modèle avec les macros, mises en page, etc que tu pourras dupliquer.

eric

PS : évite de travailler sur tous les classeurs ouverts. Rien ne te dit qu'un utilisateur n'en aura pas qui n'ont rien à voir.

Il faut contrôler qu'il a un signe distinctif pour l'identifier à coup sûr.

PS2 : en plus tu postes sur plusieurs forum. Rédhibitoire pour moi, pas envie de passer du temps alors que tu as peut-être déjà la réponse ailleurs. Autant le consacrer à d'autres demandes.

Bonjour Eriiic,

J'ai suivi tes conseils et j'ai adopté un modèle.xltm.

C'est beaucoup plus abordable.

J'ai un peu galéré avec mon code, mais "c'est en forgeant qu'on devient forgeron" et ça fonctionne comme je souhaitais.

Cdt.

PS : pour éviter de fermer d'autres classeurs que ceux que j'ai appelés REC_xxxxx, j'ai fait une recherche sur le nom avec "like" sur la chaîne de caractère "REC".

Rechercher des sujets similaires à "creation fiches client nouveaux classeurs"