Création automatisée de fiches clients à partir d'une liste de données

lcredaction

XLDnaute Nouveau
Bonjour à tous !

Il faut le dire, c'est un peu par dépit (désespoir ?) que je viens vous voir, car quelques posts m'ont été plus qu'utiles par le passé.

Voilà, j'ai un problème (ça vous étonne, non ?). Il me faut créer des fiches clients à deux feuilles à partir d'une liste de données. Actuellement, j'ai un classeur comprenant trois feuilles :
  • Informations (première feuille du modèle)
  • Projet (deuxième feuille du modèle
  • Liste (source des données à intégrer dans les deux feuilles de la fiche)

L'idée serait de pouvoir générer en un clic un classeur par ligne de données de la feuille "Liste", en sachant que le nombre de lignes remplies est variable (tout dépend du nombre de demandes).

Chaque classeur reprendrait les données comme le fait mon modèle mais ne se constituerait plus que des deux premières feuilles et le nom de chaque fichier créé serait "Fiche_NOM_PRENOM".

Du coup, on passerait d'une structure du classeur :

'Fiche Standardisée XLSX'
> Informations
> Projet
> Liste
>> données dont NOM, PRENOM, etc.


À :

'Fiche_NOM_PRENOM'
> Informations
>> données reprises
> Projet
>> données reprises


Je vous demande pardon si ceci n'est pas clair (allez, j'avoue, en bon littéraire je pourrai le clarifier sur demande) ou si ce que j'aimerais faire n'est tout simplement pas possible.

Nota : j'ai cherché des sujets similaires sur le forum, mais en ne comprenant rien aux macros, c'est pas facile.


Merci pour vos réponses :p
 

Pièces jointes

  • Fiche standardisée XLSX.xlsx
    25.1 KB · Affichages: 65

Yaloo

XLDnaute Barbatruc
Re : Création automatisée de fiches clients à partir d'une liste de données

Bonsoir lcredaction et bienvenu sur le forum, bonsoir à tous,

Les données indiquées dans les nouveaux classeurs, dans les feuilles "Informations" et "Projet", devront-elles être mises à jour depuis ton premier fichier ou doit-on rentrer des données fixes ?

Je m'explique, si tu changes le numéro de téléphone, tu vas le changer dans ton fichier actuel et se sera mis à jour dans la fiche ou tu iras changer le numéro directement dans la fiche ?

A te relire

Martial
 

lcredaction

XLDnaute Nouveau
Re : Création automatisée de fiches clients à partir d'une liste de données

Bonsoir Yaloo, et merci pour cet accueil !

Les données qui figureront sur le nouveau classeur ne seront pas mises à jour depuis une autre source ; si elles doivent être modifiées, elles le seront manuellement.

J'ai essayé d'adapter un code de macro que j'ai trouvé, je l'essaie plus tard dans la soirée... Sans grand espoir mais bon, sait-on jamais !
 

Yaloo

XLDnaute Barbatruc
Re : Création automatisée de fiches clients à partir d'une liste de données

Re,

Vois le fichier ci-dessous, tu le copie dans un répertoire. Tu cliques sur le bouton, normalement cela va créer les fiches dans le même répertoire.

A+

Martial
 

Pièces jointes

  • Fiche standardisée XLSM.xlsm
    37.8 KB · Affichages: 112
  • Fiche standardisée XLSM.xlsm
    37.8 KB · Affichages: 97
  • Fiche standardisée XLSM.xlsm
    37.8 KB · Affichages: 87

Yaloo

XLDnaute Barbatruc
Re : Création automatisée de fiches clients à partir d'une liste de données

Avec grand plaisir,

VB:
Private Sub CommandButton1_Click()
Dim DerLigne As Long, l As Long, Nom As String
'Permet de cacher à l'écran les actions suivantes
Application.ScreenUpdating = False
'Définit la dernière ligne de la feuille "Liste"
DerLigne = Feuil3.Cells(Rows.Count, 2).End(xlUp).Row
'Pour toutes les lignes l de 2 à la dernière ligne
For l = 2 To DerLigne
    'Le Nom est la valeur de la cellule en ligne l et en colonne 2 et la valeur de la cellule en ligne l et en colonne 3
    Nom = Feuil3.Cells(l, 2) & " " & Cells(l, 3)
    'On copie le cellule en ligne l et colonne 2 de la feuil3
    'dans la celulle D6 de la feuil1
    Feuil1.Cells(6, 4) = Feuil3.Cells(l, 2)
    'On copie les feuilles "Informations" et "Projet" dans un nouveau classeur
    Sheets(Array("Informations", "Projet")).Copy
    'Enregistrement sous le répertoire de ce classeur avec le Nom (indiqué plus haut) et l'extension
    ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\Fiche " & Nom & ".xlsx", _
        FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    'On enlève le lien avec ce classeur, cela permet de transformer en "dur" les formules =recherchev(D6 etc...
    ActiveWorkbook.BreakLink Name:=ThisWorkbook.Name, Type:=xlExcelLinks
    'On enregistre à nouveau, puisque nous avons modifié le fichier en enlevant les liens.
    ActiveWorkbook.Save
    'On ferme le fichier actif, en l'occurence cela que lo'n vient d'enregistrer
    ActiveWindow.Close
'Ligne suivante
Next
Application.ScreenUpdating = True
End Sub

Tu peux utiliser la touche F8 pour avancer en pas à pas, et surtout utiliser la touche F1 sur un mot ou un terme que tu ne comprendrais pas.

A+

Martial
 

lcredaction

XLDnaute Nouveau
Re : Création automatisée de fiches clients à partir d'une liste de données

C'est incroyable ce que c'est tout bête... du moment qu'on comprend la syntaxe.

Je biens de noter un petit "dysfonctionnement" (plutôt une incohérence)... Au lieu de copier le nom en D6 de la Feuille 1, celui-ci est copié en D6 de la Feuille 2. Ceci dit, c'est pas quelque chose de vraiment gênant dans la mesure où, plutôt que de lier dans un sens, je peux parfaitement lier dans l'autre.

Pour ce qui est du code que j'avais trouvé et que j'ai passé la journée à essayer de comprendre avec mes deux neurones qui se battent en duel et quelques cours théoriques trouvés ici et sur d'autres sites, le voici, pas au point (il faut dire que ta solution a été plus rapidement "livrée", j'ai les méninges qui crient au soulagement, mais rien que par curiosité, j'aimerais savoir si j'étais parti sur quelque chose de bon...) :

VB:
Sub Création_fiche_client()

Dim DLig As Long, Lig As Long
Dim ShtInfo As Worksheet, ShtProjet As Worksheet, ShtListe As Worksheet
Dim CivClt As String, NomClt As String, PrenomClt As String, EmailClt As String, AdClt As String, AdCClt As String, VilClt As String, CPClt As String, PaysClt As String, TelClt As String, GSMClt As String, DispClt As String, HClt As String, ContAClt As String, IDSkClt As String, NProClt As String, SectClt As String, DProClt As String, ObjMeLClt As String, BudClt As String, StatClt As String, WebsClt As String, WebsTyClt As String, Origlt As String, OrigClt As String, PromoClt As String, VPath As String, VFic As String

Set ShtInfo = Sheets("Informations")
Set ShtProjet = Sheets("Projet")
Set ShtListe = Sheets("Liste")

DLig = ShtListe.Range("B" & Rows.Count).End(x1Up).Row

For Lig = 1 To DLig

CivClt = ShtListe.Range("D" & Lig).Value
NomClt = ShtListe.Range("B" & Lig).Value
PrenomClt = ShtListe.Range("C" & Lig).Value
EmailClt = ShtListe.Range("E" & Lig).Value
AdClt = ShtListe.Range("F" & Lig).Value
AdCClt = ShtListe.Range("G" & Lig).Value
VilClt = ShtListe.Range("H" & Lig).Value
CPClt = ShtListe.Range("J" & Lig).Value
PaysClt = ShtListe.Range("K" & Lig).Value
TelClt = ShtListe.Range("L" & Lig).Value
GSMClt = ShtListe.Range("M" & Lig).Value
DispClt = ShtListe.Range("N" & Lig).Value
HClt = ShtListe.Range("O" & Lig).Value
ContAClt = ShtListe.Range("P" & Lig).Value
IDSkClt = ShtListe.Range("Q" & Lig).Value
NProClt = ShtListe.Range("R" & Lig).Value
SectClt = ShtListe.Range("S" & Lig).Value
DProClt = ShtListe.Range("T" & Lig).Value
ObjMeLClt = ShtListe.Range("U" & Lig).Value
BudClt = ShtListe.Range("V" & Lig).Value
StatClt = ShtListe.Range("W" & Lig).Value
WebsClt = ShtListe.Range("Z" & Lig).Value
WebsTyClt = ShtListe.Range("Y" & Lig).Value
OrigClt = ShtListe.Range("AB" & Lig).Value
OrigCClt = ShtListe.Range("AC" & Lig).Value
PromoClt = ShtListe.Range("AE" & Lig).Value

ShtInfo.Range("C6").Value = CivClt
ShtInfo.Range("D6").Value = NomClt
ShtInfo.Range("E6").Value = PrenomClt
ShtInfo.Range("M10").Value = EmailClt
ShtInfo.Range("M21").Value = AdClt
ShtInfo.Range("M22").Value = AdCClt
ShtInfo.Range("N23").Value = VilClt
ShtInfo.Range("M23").Value = CPClt
ShtInfo.Range("M24").Value = PayslClt
ShtInfo.Range("M12").Value = TelClt
ShtInfo.Range("M13").Value = GSMClt
ShtInfo.Range("M15").Value = DispClt
ShtInfo.Range("Q15").Value = HClt
ShtInfo.Range("Q10").Value = ContAClt
ShtInfo.Range("Q11").Value = IDSkClt
ShtInfo.Range("D10").Value = StatClt
ShtInfo.Range("D12").Value = WebsClt
ShtInfo.Range("D13").Value = WebsTyClt
ShtInfo.Range("H10").Value = OrigClt
ShtInfo.Range("H11").Value = OrigCClt
ShtInfo.Range("H17").Value = PromoClt

ShtInfo.Copy
With ActiveSheet
.Range("C6").Copy
.Range("C6").PasteSpecial Paste:=xlpastevalue
.Range("D6").Copy
.Range("D6").PasteSpecial Paste:=xlpastevalue
.Range("E6").Copy
.Range("E6").PasteSpecial Paste:=xlpastevalue
.Range("M10").Copy
.Range("M10").PasteSpecial Paste:=xlpastevalue
.Range("M21").Copy
.Range("M21").PasteSpecial Paste:=xlpastevalue
.Range("M22").Copy
.Range("M22").PasteSpecial Paste:=xlpastevalue
.Range("N23").Copy
.Range("N23").PasteSpecial Paste:=xlpastevalue
.Range("M23").Copy
.Range("M23").PasteSpecial Paste:=xlpastevalue
.Range("M24").Copy
.Range("M24").PasteSpecial Paste:=xlpastevalue
.Range("M12").Copy
.Range("M12").PasteSpecial Paste:=xlpastevalue
.Range("M13").Copy
.Range("M13").PasteSpecial Paste:=xlpastevalue
.Range("M15").Copy
.Range("M15").PasteSpecial Paste:=xlpastevalue
.Range("Q15").Copy
.Range("Q15").PasteSpecial Paste:=xlpastevalue
.Range("Q10").Copy
.Range("Q10").PasteSpecial Paste:=xlpastevalue
.Range("Q11").Copy
.Range("Q11").PasteSpecial Paste:=xlpastevalue
.Range("D10").Copy
.Range("D10").PasteSpecial Paste:=xlpastevalue
.Range("D12").Copy
.Range("D12").PasteSpecial Paste:=xlpastevalue
.Range("D13").Copy
.Range("D13").PasteSpecial Paste:=xlpastevalue
.Range("H10").Copy
.Range("H10").PasteSpecial Paste:=xlpastevalue
.Range("H11").Copy
.Range("H11").PasteSpecial Paste:=xlpastevalue
.Range("H17").Copy
.Range("H17").PasteSpecial Paste:=xlpastevalue
End With

ShtProjet.Range("C6").Value = CivClt
ShtProjet.Range("D6").Value = NomClt
ShtProjet.Range("E6").Value = PrenomClt
ShtProjet.Range("D10").Value = NProClt
ShtProjet.Range("H10").Value = SectClt
ShtProjet.Range("D12").Value = DProClt
ShtProjet.Range("H19").Value = ObjMeLClt
ShtProjet.Range("D19").Value = BudClt

ShtProjet.Copy
With ActiveSheet
.Range("C6").Copy
.Range("C6").PasteSpecial Paste:=xlPasteValues
.Range("D6").Copy
.Range("D6").PasteSpecial Paste:=xlPasteValues
.Range("E6").Copy
.Range("E6").PasteSpecial Paste:=xlPasteValues
.Range("D10").Copy
.Range("D10").PasteSpecial Paste:=xlPasteValues
.Range("H10").Copy
.Range("H10").PasteSpecial Paste:=xlPasteValues
.Range("D12").Copy
.Range("D12").PasteSpecial Paste:=xlPasteValues
.Range("H19").Copy
.Range("H19").PasteSpecial Paste:=xlPasteValues
.Range("D19").Copy
.Range("D19").PasteSpecial Paste:=xlPasteValues
End With

ShtListe.delete

VFic = "Fiche_" & ShtInfo.Range("D6").Value & " " & ShtInfo.Range("E6").Value
ActiveWorkbook.SaveAs VPath & VFic
ActiveWorkbook.Close

Next Lig

End Sub

En réfléchissant un peu, je pense qu'il me manquait la formule RECHERCHEV() dans mon raisonnement (et hop ! une feuille de papier en moins pour tout noter !)...
Les deux grands problèmes de cette macro (à son stade actuel, hein), c'est que le premier classeur prend les en-têtes du tableau de données de la feuille 3, puis qu'après avoir supprimé cette feuille, Excel se trouve bien penaud en se demandant où les données sont passées pour remplir la fiche suivante. Mais je crois que ton code m'a donné quelques réponses pour le second point.
 

Yaloo

XLDnaute Barbatruc
Re : Création automatisée de fiches clients à partir d'une liste de données

Oui, ça pouvait le faire. Mais à mon avis, c'est un peu long.

En recherchant les données dans ta base par une formule RechercheV ou Index, cela me semble plus rapide.

Quant à la Feuil1 et Feuil2 pour la cellule D6, les Feuil1, Feuil2 et Feuil3 sont les noms des feuilles dans VBA, à gauche des macros tu as VBAProject et dessous le nom des feuilles. Car le nom des feuilles du classeurs ne sont pas forcément les mêmes que VBA.

Ce nom de feuille peut même être changé de façon à écrire plus vite et de façon plus parlante, souvent les "macroteurs" écrivent Ws pour WorkSheet et les 2 ou 3 premières lettres de la feuille Excel. Dans ton cas, cela pourrait être WsLi, WsPr et WsIn pour respectivement Liste, Projet et Information.

Voir le fichier ci-dessous

A+

Martial
 

Pièces jointes

  • Fiche standardisée XLSM.xlsm
    36.5 KB · Affichages: 80
  • Fiche standardisée XLSM.xlsm
    36.5 KB · Affichages: 89
  • Fiche standardisée XLSM.xlsm
    36.5 KB · Affichages: 96

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 196
Messages
2 086 098
Membres
103 116
dernier inscrit
kutobi87