Autres Transfert de données Excel dans formulaire Word

jeanmi

XLDnaute Occasionnel
Bonjour à tous,

Je suis sous 2003 pour word et excel,

Ce que j’aimerai faire, mais je n’arrive pas à trouver des exemples de mise en œuvre pour essayer d’adapter à mon cas.
Je souligne que je ne sait pas programmer avec le code VBA, mais il semble que cela soit, d'après les lectures que j'ai faite la seule solution pour mettre en œuvre mon projet.
donc, je fait des essais mais c'est pas concluant.

a) J’ai des données dans un document Excel (X cellules, Nom, Prénom, adresse, CP, Tél, et autres…)
b) Je veux récupérer les données des cellules est les attribuées aux champs du formulaire d'un doc Word, uniquement si la première cellule de la ligne est non vide.
c) sauvegarder ce doc avec le nom d'une cellule + au autre
d) créer un PDF de ce doc mais ça on verra plus tard.

Donc par exemple :

La cellule Excel A3 passe dans le champs formulaire Word Texte1, et ainsi de suite… si la cellule A1 est non vide ou comporte un x (au choix, le plus simple à mettre en œuvre)
La cellule Excel B8, si il y a une donnée, passe dans CaseACocher1, donc, case à cocher et ainsi de suite…
A la fin le document est sauvegardé avec le nom + la date de deux cellule.
et la procédure continue pour toutes les lignes A1, normalement il y aura moins de 100 lignes à analyser.

Avez-vous une piste, un début de solution ?
j'ai tenté de faire quelque macro, mais rien ne marche correctement jusqu'au bout.
j'ai mis mes fichier à jour. depuis excel Ctrl+T pour lancer ma procédure qui ne marche pas encore il n'y à que l'ouverture du doc après ça bloc.

En vous remerciant par avance

Bien cordialement
 

Pièces jointes

  • 2021-08-planning-vesrion 2.xls
    117 KB · Affichages: 18
  • BL vierge version 2.doc
    82 KB · Affichages: 11
Dernière édition:

herve62

XLDnaute Barbatruc
Bon jour
Donc tu as bien réussi avec 2010 ?
Donc comme j'avais dit pour le test de dernière ligne non vide ...Attention par exemple A13 = ÉQUIPE 1 APRÈS MIDI !!! ; faut pas tout fusionner avec A !
Dans Word RIEN à faire
Il n'y a rien de compliqué dans le code juste bien faire attention entre signets / variables pour avoir les bonnes informations au bon endroit
Bon amusement
 

jeanmi

XLDnaute Occasionnel
Bon jour
Donc tu as bien réussi avec 2010 ?
Donc comme j'avais dit pour le test de dernière ligne non vide ...Attention par exemple A13 = ÉQUIPE 1 APRÈS MIDI !!! ; faut pas tout fusionner avec A !
Dans Word RIEN à faire
Il n'y a rien de compliqué dans le code juste bien faire attention entre signets / variables pour avoir les bonnes informations au bon endroit
Bon amusement
merci. je vais changer la fusion au niveau A.
sur word 2010 je cherche le menu ou nommer les signer
 

jeanmi

XLDnaute Occasionnel
merci c'est fait. bonne plage
Bonjour,

J’ai essayé de continuer la programmation mais j’ai des petits problèmes et je ne trouve pas pourquoi :
  • Si je mais x dans la colonne B, lors du traitement tous marche bien pour l’édition, en fait s’il y a une seul case de coché tous marche bien
  • Si je coche deux cases ou plus (avec un x ou autre chose) = il y a une création du fichier le plus bas, uniquement, et message d’erreur
Normalement lorsque le traitement est réalisé je fais mettre EDITER à la place du x, ca marche

J’ai aussi trois autres cases à remplir en fin de code mais je n'arrive pas à comprendre comment faire pour finaliser (les explications sont dans le code) ?

Une autre interrogation :

Normalement mon fichier de base est protégé en écriture :
Je peux utiliser les macros qui sont dans mon fichier Word pour les mettre dans Excel ? oui/non, à quel endroit dans le code ?

Ou faut-il utiliser un autre code ou une autre solution :

par exemple celle trouvée sur le net, mais c’est du chinois pour moi :

Autre solution à mon avis meilleure :

Worksheets("PM_Tasks").Protect userinterfaceonly:=True, Password:="mot de passe"

Permet de laisser la protection mais d'autoriser la macro à faire ce qu'elle doit faire

Je conseille de le mettre dans une boucle l'appliquant sur toutes les feuilles protégées dans le Workbook_open

Ainsi même en interrompant la macro, la protection reste active.

Du moment que la mention Protect userinterfaceonly est dans la macro avec le mot de passe, rien n'est demandé à l'utilisateur.

Seul celui qui veut modifier l'onglet manuellement a besoin du mot de passe.


Ça fait beaucoup de questionnement tous ça ,

Merci d’avance

Cordialement
 

Pièces jointes

  • BL vierge version 12.docm
    35.3 KB · Affichages: 7
  • planning-vesrion 6.xls
    98 KB · Affichages: 8

herve62

XLDnaute Barbatruc
Bonjour
Bon déjà on va reprendre les erreurs
La plus grosse 'boulette" que t'as faite : une boucle FOR x= 4 to dg et dedans tu mets par exemple : cellule_D = Cells(dg , 9).Value ???? et cela dans toute la boucle !!
Dg est une constante !! , ta variable c'est X !!!!!! > corrigé
Cela fonctionnait bien sûr avec en A un oui ou X mais à A5, A6 ...etc tu prenais toujours la dernière ligne

Ensuite au début ma Sub était faite pour UN seul passage avec WORD
Donc normal qu'au 2eme passage ça plante il faut recréer l'objet Word !! ( WOrdapp) > corrigé

Sinon je pense que tu es parti dans l'usine à gaz pour les protections via word !!!!

Pour les signets actuels tout fonctionne .... poursuit le reste ; après on verra !!
Mais déjà ta boucle est mal faite > 15 SIGNETS TexteX donc normalement boucle de x= 1 à 15 mais en plus tes Signets sont mal définis en regard des col. de données comme le 15 affecté à B donc 2 ???
CONSEIL : REDEFINI tes signets dans l'ordre des colonnes et tout va se simplifier !!
 

Pièces jointes

  • planning-vesrion HD.xlsm
    88.6 KB · Affichages: 5

jeanmi

XLDnaute Occasionnel
Bonjour
Bon déjà on va reprendre les erreurs
La plus grosse 'boulette" que t'as faite : une boucle FOR x= 4 to dg et dedans tu mets par exemple : cellule_D = Cells(dg , 9).Value ???? et cela dans toute la boucle !!
Dg est une constante !! , ta variable c'est X !!!!!! > corrigé
Cela fonctionnait bien sûr avec en A un oui ou X mais à A5, A6 ...etc tu prenais toujours la dernière ligne

Ensuite au début ma Sub était faite pour UN seul passage avec WORD
Donc normal qu'au 2eme passage ça plante il faut recréer l'objet Word !! ( WOrdapp) > corrigé

Sinon je pense que tu es parti dans l'usine à gaz pour les protections via word !!!!

Pour les signets actuels tout fonctionne .... poursuit le reste ; après on verra !!
Mais déjà ta boucle est mal faite > 15 SIGNETS TexteX donc normalement boucle de x= 1 à 15 mais en plus tes Signets sont mal définis en regard des col. de données comme le 15 affecté à B donc 2 ???
CONSEIL : REDEFINI tes signets dans l'ordre des colonnes et tout va se simplifier !!
Bonjour,

Merci pour ce travail.
Pour les signés, sauf erreur , j'avais déjà renuméroté Word pour être en cohérence Texte1 = Cellule Ax et ainsi de suite jusqu'à texte8 car les autres signets sont rempli manuellement, sauf
pour le texte9, il doit provenir de la cellule Fx donc là il me semble qu'il faut le traité à part, mais comment c'était mon questionnement dans le code.
il y a aussi le cas de la CasACocher 2 ou j'ai rien trouvé sur le net pour essayé de comprendre comment faire.

Donc suivant toi le pb protection il faut ne plus y penser. pourtant si je fait un formulaire c'est pour ne pas pouvoir modifier les autres champs mais uniquement ceux du formulaire, donc doit être protegé il me semble.

Cordialement
 

jeanmi

XLDnaute Occasionnel
Re bonjour,
  • J’ai vérifié tous les signets sont bien en accord avec les cellules. Il n'y avait que le texte9 qui lui est identique au texte4, donc j'ai créé un colonne supplémentaire, caché dans le tableau, pour remédier à problème. Ouf ça marche.
  • Je n’arrive pas à mettre des tests pour ne traiter que les cases avec une x UNIQUEMENT
Actuellement s’il y a des blancs ou autres choses entre deux x , toutes les lignes sont traité, même les lignes avec les titres.
  • Il faut que j’ajoute une contrainte ou plutôt une condition en fonction de la quantité dans la colonne B. Créer autant de document que de quantité dans la colonne B et sauvegarder le doc avec un incrément 1,2,3,4,5 etc. en fonction du nombre qui est dans la colonne B.
  • A quel endroit il faut mettre quelque chose dans le code. ?
  • Et toujours ce problème avec le remplissage de la case « CasACocher 2» ou j'ai rien trouvé sur le net pour essayer de comprendre comment faire. Si colonne N non vide alors cocher la CaseACocher2 » je vais faire un tuto spécifique pour cette question.
Merci d’avance pour les réponses.

Cordialement
 

herve62

XLDnaute Barbatruc
Bonsoir
Une soluce pour traiter que les X
Faire un select case
extrait ici
VB:
For x = 4 To dg
indic = Cells(x, 1)
Select Case indic
Case "Editer"
GoTo suite1
Case "x"
If Cells(x, 1) = "Editer" Then GoTo suite1
cellule_D = Cells(x, 9).Value 'cellule date code I/dg
cellule_N = Cells(x, 3).Value 'cellule nom C/dg
cellule_P = Cells(x, 4).Value 'cellule prénom D/dg

fic = cellule_D & cellule_N & "-" & cellule_P 'Nom du nouveau fichier créé
 Set WordApp = CreateObject("word.application")
-----
-
.......


Cells(dg, 1).Value = "Editer" 'remplace le x de la colonne 1 par Editer
Case Else
GoTo suite1
suite1:
End Select

J'ai coupé le milieu donc DEBUT et FIN
 

laurent950

XLDnaute Accro
Bonjour @herve62, @jeanmi

J'ai suivie le fil du sujet :
Il y a 3 types d'Objet dans Word :
Signet
Puis FormFields sous Formes
CheckBox (Case à Cocher)
FORMTEXT (Option de champ Text)

A partir d'un document "BL vierge version 12.docm" qui sert de modèle
Au choix de l'utilisateur : placer ce document modèle et avec le bon chemin :
Set WordDoc = WordApp.Documents("C:\Dossier\BL vierge version 12.docm")

Les fichiers créés à partir du modèle seront enregistrés dans un dossier du choix de l'utilisateur :
Nom du dossier (Existants) les fichiers seront enregistrés dans celui-ci.
Ou
Le dossier sera créé à la racine C: avec le nom entré dans InputBox :
* les fichiers seront enregistrés dans celui-ci.

Avec la commande (ci-dessous)
DossierNom = Application.InputBox("Word", "Word", "Nom du dossier WORD ?", Type:=2)
[°°°]
' Suite du Programe
' Ensuite gestion
' Ouverture de Word Si Ouvert Ou Pas...
' Ouverture du Modèle Doc... Si Ouvert ou Pas...
[°°°]

Le code se place dans le classeur Excel
* Ne pas oublier de cocher la case option pour la gestion de Word depuis Excel.
* La condition de création du fichier Word (S'il y a écrit dans la colonne A:A "Editer")
* Les fichiers sont créés dans le dossier (Cf au début l'explication)
* Le modèle reste inchangé est non modifié

Sous Détail des Noms des Signets dans Word :
Listing (Ci-Dessous)
* Signets
* CheckBox (Case à Cocher)
* FORMTEXT (Option de champ Text)

Code:
'Texte1 NOM.... Exemple pour celui-ci c'est un (Signet)
'Texte2 PRÉNOM
'Texte3 ADRESSE
'Texte4 Communes
'Texte5 CP
'Texte6 TÉLÉPHONE
' Type Citerne
'Texte15 (Qte) .... Exemple pour celui-ci c'est l'(Option de champ Text)
' Modéle
'CaseACocher1 (Case à cocher) 650L .... Exemple pour celui-ci c'est une (Case à Cocher)
'CaseACocher2 (Case à cocher) 750L
'CaseACocher3 (Case à cocher) 750L
' N° Serie de la siterne
'Texte7 (N°)
' Couleur
'ListeDéroulante1 LaCouleur
' Intstalation General de la citerne
'CaseACocher4 (Case à cocher) OUI
'CaseACocher8 (Case à cocher) Conforme
'CaseACocher12 (Case à cocher) Non Conforme
' Citerne raccordée(s) à la goutière
'CaseACocher5 (Case à cocher) OUI
'CaseACocher9 (Case à cocher) Conforme
'CaseACocher13 (Case à cocher) Non Conforme
'Photo contractuelle prise
'CaseACocher6 (Case à cocher) OUI
'CaseACocher10 (Case à cocher) Conforme
'CaseACocher14 (Case à cocher) Non Conforme
'Installation d'un système de filtration
'CaseACocher7 (Case à cocher) OUI
'CaseACocher11 (Case à cocher) Conforme
'CaseACocher15 (Case à cocher) Non Conforme
' Cachet et signature du plombier : Remarque
'Texte10 (Rem1)
'Texte11 (Rem2)
'Texte12 (Rem3)
'Texte13 (Rem4)
'Texte14 (Rem5)
'Réfection de la descente de gouttière
'CaseACocher16 (Case à cocher)
'Réfection de la gouttière
'CaseACocher17 (Case à cocher)
'Installation d'une gouttière neuve
'CaseACocher18 (Case à cocher)
'Installation d'une descente de gouttière
'CaseACocher19 (Case à cocher)
'Autres travaux
'CaseACocher20 (Case à cocher)
' A
'Texte9 (Lieu)
'LE
'Texte8 (Date)

Le Code VBA à Copier dans votre Classeur Excel :
* Puis a compléter en fonction de vos besoin.

VB:
Sub CompleterWordDepuisExcel()
' Choix nom du dossier d'enregistrement '
    DossierNom = Application.InputBox("Word", "Word", "Nom du dossier WORD ?", Type:=2)
    DossierSauvegard = "C:\" & DossierNom & "\"
' Test si le DossierSauvegard est bien existant
'   * Dans le cas ou il n'existe pas le créer.
    Dim fs As Object
        Set fs = CreateObject("Scripting.FileSystemObject")
        If fs.FolderExists(DossierSauvegard) Then
            MsgBox "le repertoire existe donc rien a faire"
        Else
            MsgBox "le repertoire n'existe pas donc on le créer"
            fs.CreateFolder DossierSauvegard
        End If
    Set fs = Nothing
' Test Ouverture Application Word, si pas déjà Ouvert.
On Error Resume Next
    Dim WordApp As Word.Application
        Set WordApp = GetObject(, "Word.Application")
            If Err <> 0 Then
                Err.Clear
                Set WordApp = CreateObject("Word.Application")
            End If
        WordApp.Visible = True 'affiche le document Word
' Documents Word Modéle
    Dim WordDoc As Word.Document
        Set WordDoc = WordApp.Documents("C:\Dossier\BL vierge version 12.docm")
On Error GoTo 0
' Si le Documents Word Modéle est fermé l'Ouvrir.
    If WordDoc Is Nothing Then
        MsgBox "Le document est fermé / Ouvrir le document"
        Set WordDoc = WordApp.Documents.Open("C:\Dossier\BL vierge version 12.docm")
    End If
' Remplir le Document Modéle.
' Comment insérer du texte dans un signet.
' Remplit le signet SignetOrigine avec le texte "LeMot" sans détruire SignetOrigine
' Exemple ci-dessous (Choisir les bonnes Référence excel pour LeMot
    Dim signet(1 To 10) As Word.Bookmark, LeMot(1 To 8) As String, i As Integer
    Dim F As Worksheet
        Set F = Worksheets("ven.-1-oct")
    For i = 4 To F.Cells(65536, 2).End(xlUp).Row - 1
        If F.Cells(i, 1) = "Editer" Then
        ' Word
            Set signet(1) = WordDoc.Bookmarks("Texte1") '[Nom] : nom du signet
            Set signet(2) = WordDoc.Bookmarks("Texte2") '[Prénom] : nom du signet
            Set signet(3) = WordDoc.Bookmarks("Texte3") '[Adresse] : nom du signet
            Set signet(4) = WordDoc.Bookmarks("Texte4") '[Ville] : nom du signet
            Set signet(5) = WordDoc.Bookmarks("Texte5") '[CP] : nom du signet
            Set signet(6) = WordDoc.Bookmarks("Texte6") '[Tel] : nom du signet
            Set signet(7) = WordDoc.Bookmarks("Texte15") '[Qte Citerne] : nom du signet
            Set signet(8) = WordDoc.Bookmarks("CaseACocher1") '[Modèle Citerne 600L] : nom du signet
            Set signet(9) = WordDoc.Bookmarks("CaseACocher2") '[Modèle Citerne 650L] : nom du signet
            Set signet(10) = WordDoc.Bookmarks("CaseACocher3") '[Modèle Citerne 750L] : nom du signet
        ' Excel
            LeMot(1) = F.Range(Cells(i, 3), Cells(i, 3)).Value
            LeMot(2) = F.Range(Cells(i, 4), Cells(i, 4)).Value
            LeMot(3) = F.Range(Cells(i, 5), Cells(i, 5)).Value
            LeMot(4) = F.Range(Cells(i, 6), Cells(i, 6)).Value
            LeMot(5) = F.Range(Cells(i, 7), Cells(i, 7)).Value
            LeMot(6) = F.Range(Cells(i, 8), Cells(i, 8)).Value
            LeMot(7) = F.Range(Cells(i, 2), Cells(i, 2)).Value
            LeMot(8) = F.Range(Cells(i, 14), Cells(i, 14)).Value
        ' Remplir le document Word modele.
            Dim Place As Long, SignetOrigine As String
            For j = LBound(LeMot) To UBound(LeMot)
                ' Quantité Citerne
                If j = 7 Then
                    WordDoc.FormFields("Texte15").Result = LeMot(j)
                ' Modele citerne case a cocher
                ElseIf j = 8 Then
                    Select Case LeMot(j)
                        Case "600"
                            WordDoc.FormFields("CaseACocher1").CheckBox.Value = True
                        Case "650"
                            WordDoc.FormFields("CaseACocher2").CheckBox.Value = True
                        Case "750"
                            WordDoc.FormFields("CaseACocher3").CheckBox.Value = True
                    End Select
                Else
                    ' Depart du signet
                        Place = signet(j).Range.Start
                    ' Nom du signet d'Origine
                        SignetOrigine = signet(j).Name
                    ' Substitue par le Mot (qui remplace le signet)
                        signet(j).Range.Text = LeMot(j)
                    ' Options \ Options Avancées \ Affichér les signets [...]
                    ' Ne pas perdre le Signet d'origine [...] et sa mise en forme entre crochet
                        WordDoc.Bookmarks.Add Name:=SignetOrigine, Range:=WordDoc.Range(Place, Place + Len(LeMot(j)))
                End If
            Next j
        ' Enregistrer le document sous (Exemple : LeMot(1) & "-" & LeMot(2))
            Dim fichier As String
                fichier = "DocumentWordFichier " & LeMot(1) & "-" & LeMot(2) & ".doc"
                WordDoc.SaveAs2 DossierSauvegard & fichier
        ' Suppression des CheckBox et Formtext
                WordDoc.FormFields("Texte15").Result = ""
                WordDoc.FormFields("CaseACocher1").CheckBox.Value = False
                WordDoc.FormFields("CaseACocher2").CheckBox.Value = False
                WordDoc.FormFields("CaseACocher3").CheckBox.Value = False
        ' Les Signets sont recaculer pas besoin de suppression
            [Nota]
        End If
    Next i
    ' Fermer les derniers documents Word
        WordDoc.Close
End Sub

Laurent
 
Dernière édition:

herve62

XLDnaute Barbatruc
Bon soir, Slt Laurent
Au lieu de donner des inserts de code ce serait mieux de joindre tes fichiers comme ça on pourrait tester direct non ?
Déjà pour simplifier les choses pas besoin d'inputbox , Jeanmi a figé son squelette et le fichier de sortie est auto en fonction de données de cellules
ET puis il faut faire la selection d'execution de chaque ligne >Editer : rien ; X on traite ; le reste : Rien
Donc joint nous tes fichiers cela m'évitera de passer du temps pour rien !! il ne restait que le Pb des cases à cocher puis de la protection des doc. créés !!
 

laurent950

XLDnaute Accro
Re,
Pour les case (cocher des CheckBox)
Avec ce code placé dans Word :
Pour trouvé le checkBox (case a cocher) Nom : CaseACocher1
Avec l'explorateur VB la valeur a activé est celle-ci :
.CheckBox.Value = True (Pour qu'elle soit coché)
Ensuite pour accéder : J'ai utilisé cela ci-dessous
WordDoc.FormFields("CaseACocher1").CheckBox.Value = True
On peux aussi y acceder comme cela
signet(j).Parent.FormFields.Item("CaseACocher1").CheckBox.Value = True
Msgbox signet(j).Parent.FormFields.Item("CaseACocher1").CheckBox.Value
signet(j).Parent.FormFields.Item("CaseACocher1").CheckBox.Value = False
Msgbox signet(j).Parent.FormFields.Item("CaseACocher1").CheckBox.Value

VB:
' En récupérant le nom du Formfield, Ont peux l'utiliser pour les signets.
Sub TestOlivier()
Dim myFld As FormField
For Each myFld In ActiveDocument.FormFields
    Debug.Print myFld.Name & " -:::- " & myFld.Result
    myFld.Select
    'myFld.CheckBox.Value = False
Next myFld
End Sub
 
Dernière édition:

herve62

XLDnaute Barbatruc
Re
Vous Pouvez tester avec les deux fichier en poste #20
Non désolé en #20 ce sont les commentaires et fichiers de JeanMi !!!!
j'attends tes fichiers complet Joint ici .. c'est pas compliqué non ??
le baratin je connais pas
A chaque fois ( 100% vérifié) quand je fourni une solution sytématiquement je joins un fichier et donc tout le monde peut tester direct sans bricoler
 

jeanmi

XLDnaute Occasionnel
Bonjour à tous,

Merci à tous pour toutes ces explications.
Je regarde si je peux comprendre et intégrer à mon fichier excel.

ci- joins mes fichiers actuels sur les quels je travail.

Cordialement
 

Pièces jointes

  • BL vierge version 12.docm
    36.7 KB · Affichages: 5
  • planning-vesrion HD-4.xlsm
    87.1 KB · Affichages: 5

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
291 667
Messages
1 916 971
Membres
179 500
dernier inscrit
oximo
Haut Bas