Base de donnée client CSV extraire vers fiche client individuel

benjilebest Messages postés 15 Statut Membre -  
benjilebest Messages postés 15 Statut Membre -
Bonjour à toutes et à tous,

Petit Nouveau je m'en remets à vous car je cale sur l'utilisation de macro sur excel.
Voici mon problème :
Je reçois un fichier type CSV qui contient sur chaque ligne des infos relatives à un client.
Le but est de copier chaque donnée du client de cette base de donnée vers un fichier client unique.

Concrètement j'ai réussi a enregistré une macro qui fait
activer la page Base de donnée (BDD)
copier case A2 (correspondant au nom par exemple)
ouvrir le document vierge pour un client
coller les données

ainsi de suite pour toutes les données d'un client (c'est à dire toute les données d'une ligne)et enfin enregistré le fichier client unique le nom du fichier = numéro de client

Ma question est que je souhaiterais faire une boucle for ou while qui me permettrait de créer autant de fichier client unique qu'il y en a dans la BDD.

voila si vous avez besoin d'avantage d'informations n'hésitez pas à me le faire savoir

Bonne journée à toutes et à tous.

Ben

7 réponses

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    Pour comprendre ce que tu veux il faudrait un exemple de ton fichier CSV que tu pourais déposer sur Cjoint.Com (ou autre)
    0
  2. benjilebest Messages postés 15 Statut Membre
     
    https://www.cjoint.com/c/CAwoqZqPa85

    Voici le fichier CSV et a partir de ça je dois copier les cellules dans le documents ci-dessous
    https://www.cjoint.com/c/CAwor02Fvhg
    Voila j'ai commencé à écrire quelques chose en fouinant sur le forum :

    Sub Macro1()
    '
    ' Macro1 Macro
    ' Macro enregistrée le 22/01/2013 par ben
    '
    Dim FichierSource As Workbook
    Dim FichierDestination As Workbook

    Set FichierSource = ThisWorkbook
    Set FichierDestination = Workbooks.Open(Filename:="C:\Documents and Settings\Admin\Mes documents\Téléchargements\FICHECLIENTV2.xls")

    For i = 2 To 100
    If Not IsEmpty(Cells(i, 2)) Then
    Workbooks("FichierSource").Worksheets("simulations-1").Cells(i, 2).Copy _
    Workbooks("FichierDestination").Worksheets("Feuil1").Cells(2, 4)

    End If
    Next
    End Sub

    Je l'ai fait pour une case dans l'idée si ça marche la suite sera la même.
    A la fin je voudrais enregistré le fichier destination dans un nouveau fichier ayant pour nom le code client.
    0
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Le but est de copier chaque donnée du client de cette base de donnée vers un fichier client unique.
    Nouvelle feuille ou nouveau classeur
    0
  4. benjilebest Messages postés 15 Statut Membre
     
    bah en fait sur les deux fichiers que j'ai joint : le premier est ma base de donnée ou une ligne = 1 client.
    et je dois remplir dans un nouveau classeur (le 2eme fichier) les données d'un client et enregistre ainsi un classeur par client.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Pourquoi Bah ?? ça t'ennuie que je pose des questions ?
    Bref, bon pour cette fois..a voir
    0
  7. benjilebest Messages postés 15 Statut Membre
     
    je vais regarder ça c'est un tique que j'ai de mettre bah dans mes phrases n'y voit pas de la nonchalance ;) au contraire ça fait plaisir que tu prennes le temps de me filer un coup de main ;)
    merci
    0
  8. benjilebest Messages postés 15 Statut Membre
     
    Alors c'est presque ça sauf que je peux pas faire ça ligne par ligne.
    je suis obligé de prendre cellule par cellule car le fichier base de donnée (CSV) sert à alimenter le 2ème fichier (FicheclientV2.xls que tu n'as pas du voir dans mon post plus haut)

    c'est celui ci https://www.cjoint.com/c/CAwor02Fvhg

    Je vais essayer de me débrouiller avec ce que tu m'as donner normalement je devrais m'en sortir je te tiens au courant ;)
    Merci
    0
    1. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      OK : Si t'en sort pas tu dis.
      0
    2. benjilebest Messages postés 15 Statut Membre
       
      Bonjour,

      Bon j'ai commencé à faire ça je vais devoir avoir mon classeur FICHIECLIENTV2 dans le même répertoire que la base de donnée :

      Sub TransfertClient()
      Dim Lig As Integer
      Dim Wks As Worksheet
      Dim Chemin As String
      Dim Wkb As Workbooks

      Chemin = ThisWorkbook.Path & "\"
      Set Wks = Sheets(1)
      Set Wkb = Workbooks.Open Filename:="Chemin & FICHECLIENTV2.xls"
      'Le fichier CSV doit déjà être présent avec FICHECLIENTV2.

      For Lig = 2 To Cells(Rows.Count, "C").End(xlUp).Row
      With ActiveWorkbook
      Wks.Cells(2, 1).Copy Wkb.Sheets("Feuil1").Cells(2, 4)
      Wks.Cells(2, 2).Copy Wkb.Sheets("Feuil1").Cells(4, 4)
      'etc...
      .SaveAs Chemin & Replace([D2].Value, ".", " ")
      .Close
      End With
      Next Lig
      End Sub

      Et ainsi de suite pour chaque case.
      A priori ça coince au niveau de sheets("Feuil1") et l'ouverture de l'autre classeur
      0
    3. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      Bon j'ai commencé à faire ça je vais devoir avoir mon classeur FICHIECLIENTV2 dans le même répertoire que la base de donnée :
      Mais non, suffit de remplacer..
      Chemin = "C:\Répertoire\sousrépertoire\"

      A priori ça coince au niveau de sheets("Feuil1") et l'ouverture de l'autre classeur
      Si tu a un Excel Anglais faut remplacer par Sheet1
      J'ai modifié Feuil1 pour que ce soit compatible en Anglais..
      Voir avec ce code..
      Sub TransfertClient()
      Dim Lig As Integer
      Dim Wks As Worksheet
      Dim Chemin As String
          Chemin = ThisWorkbook.Path & "\"
          Set Wks = Sheets(1)
          'Le fichier CSV doit déjà être présent.
          For Lig = 2 To Cells(Rows.Count, "C").End(xlUp).Row
              Workbooks.Add
              With ActiveWorkbook
                  Wks.Cells(Lig, 1).Copy .Sheets(1).Cells(2, 4)
                  Wks.Cells(Lig, 2).Copy .Sheets(1).Cells(4, 4)
                  .SaveAs Chemin & Replace([D2].Value, ".", " ")
                  .Close
              End With
          Next Lig
      End Sub
      A+
      0
    4. benjilebest Messages postés 15 Statut Membre
       
      Nice pour la copie des cellules ça fonctionne mais je dois pas ouvrir n'importe quel workbook :
      je dois ouvrir le deuxième fichier que je t'ai mis et copier les données de la base de donnée dans ce fichier et le save suivant le nom du client
      0
    5. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      Bon, dernière intervention..
      .SaveAs Chemin & Replace(Cells(Lig,4).Value, ".", " ")
      0