Création de fiches "client" dans nouveaux classeurs Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'254
Appréciations reçues : 363
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 15 avril 2018, 16:52

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
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
j
janigrel
Jeune membre
Jeune membre
Messages : 15
Appréciations reçues : 2
Inscrit le : 8 avril 2018
Version d'Excel : 2010

Message par janigrel » 15 avril 2018, 22:14

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
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'254
Appréciations reçues : 363
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 16 avril 2018, 00:25

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.
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
j
janigrel
Jeune membre
Jeune membre
Messages : 15
Appréciations reçues : 2
Inscrit le : 8 avril 2018
Version d'Excel : 2010

Message par janigrel » 18 avril 2018, 22:38

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".
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message