Enregistrer paramètres USF Word dans feuille Excel

Résolu/Fermé
sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 - Modifié par sifusalade le 4/04/2014 à 18:54
sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 - 7 avril 2014 à 22:45
Bonjour,

Je suis en train de créer une application Word dans lequel j'ai créé un USF assez complexe (8 multipages). L'idée est de générer ensuite un document word avec les éléments saisies dans l'USF. Pour ce qui est de générer pas de problème. C'est fait.

En revanche, je voudrait que l'utilisateur, puisse, via un bouton, rappeler l'USF avec ce qu'il a saisie de présent, puis régénérer avec ces modifications.

J'ai donc pensé à insérer un objet (Feuille Excel), dans une page du document Word pour y insérer les paramètres.

Par exemple, sur :
Private Sub OptionButton1_Change()
If Me.OptionButton1.Value = True Then
FameuseFeuilleExcel.Range("A1").Value = "True"  'FameuseFeuilleExcel étant l'objet Feuille Excel
Else
FameuseFeuilleExcel.Range("A1").Value = "False"
End If


puis au clic d'un bouton "Charger" par exemple ou à l'Evénement Initialize de l'USF :
Dim parametre As String

parametre = FameuseFeuilleExcel.Range("A1").Value

USF.OptionButton1.Value = parametre

EDIT : Juste après avoir cliqué envoyé je me suis dis que "Dim parametre As String" c'est bien pour les TextBox, TextArea, ListBox, ComboBox, mais pour les OptionButton ou CheckBox, je devrais initialiser un "Dim parametreBool as Boolean" lol

Le problème est que je sais pas comment écrire dans cette "FameuseFeuilleExcel" en VBA...

J'imagine que certains vont me dire de créer une vrai feuille Excel, je ne suis pas contre mais je ne sais pas non plus comment écrire dedans en VBA lol... De plus, s'il est possible de le faire sur l'objet Feuille Excel, pour des raisons de portabilité, c'est mieux, sinon, l'utilisateur, devra, s'il change l'emplacement de son fichier Word, changer aussi celui d'Excel....

Je vous remercie d'avance d'éclairer ma lanterne.

NB : Je précise, qu'au travail, nous sommes sous Windows XP + Pack Office 2003 pour certains, et Windows 7 + Pack Office 2010 pour les autres. Là je vous écris depuis mon ordi perso qui est un mac, ne faites donc pas attention la configuration que vous voyez juste en dessous.

A voir également:

10 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
5 avril 2014 à 11:11
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
5 avril 2014 à 11:41
Bonjour,

J'ai fait un programme où les paramètre sont sauvegardés dans un fichier texte:

https://codes-sources.commentcamarche.net/source/53764-parametres-settings-vba

Fonctionne sous Word et sous Excel
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
5 avril 2014 à 11:53
Bonjour,

Intéressant, merci

bye
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
5 avril 2014 à 12:07
Si cela t'intéresse il y a un programme sous Word sans fichier texte. C'est un peu plus compliqué. J'ai voulu faire un programme accessible au débutant.

https://codes-sources.commentcamarche.net/source/53980-utiliser-les-proprietes-perso-d-un-document-comme-parametres-settings
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
5 avril 2014 à 12:44
Re,

merci
0
sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 7
5 avril 2014 à 12:21
Bonjour,

Merci à tout les deux.
Je pense que je vais m'assoir sur la tout-en-1-fichier.

la méthode de f8944009 me semble bien. voici un test fais en 5 minutes avec :
Sub ouvrirClasseurExcel()
Dim appXl As Excel.Application
Dim Wb As Excel.Workbook

Set appXl = CreateObject("Excel.Application")
appXl.Visible = False  'L'utilisateur ne doit pas voir ce qu'il se passe
Set Wb = appXl.Workbooks.Add

Wb.ActiveSheet.Range("A1").Value = UserForm1.TextBox1.Value
Wb.ActiveSheet.Range("A2").Value = UserForm1.TextBox2.Value
Wb.ActiveSheet.Range("A3").Value = UserForm1.TextBox3.Value
'Bien sûr à la place je mettrai le code correspondant à tout mes contrôles


Wb.Application.DisplayAlerts = False  'Comme tout doit être transparent pour l'utilisateur, on masque les alertes
Wb.SaveAs "C:\Users\sifusalade\Desktop\TEST.xls"
Wb.Application.DisplayAlerts = True 'Nul besoin de dire pourquoi je met ça lol
appXl.Quit  'Transparence oblige lol

End Sub


La méthode CS_Le Pivert est très intéressante, elle a le mérite de manger moins de ressources qu'un fichier Excel (et c'est ce qui me plait le plus), cependant, je la trouve plus compliquée à utiliser (oui je sais je suis un peu bizarre comme mec lol), d'autant plus qu'un mec qui bidouille un peu, peut aller modifier certains paramètres, comme par exemple, le contenu d'un textbox limité à 2000 caractères, et en saisir 3000... Le but de cet Userform, et d'empêcher l'utilisateur de faire ce qu'il veut et de générer e document en bonne et due forme (certains collègues ont tendance à faire un peu trop ce qu'ils veulent sans se soucier s'ils sont en règle ou non).

Je vais donc opter pour la méthode de f8944009 mais je tiens à souligner le travail remarquable de CS_Le Pivert. Bravo ;-)

Reste plus qu'à tester (pas encore fait), si je peux initialiser l'userform avec les paramètres de ce classeur TEST.xls
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
5 avril 2014 à 14:43
Si tu ne veux pas que l'on ait accès aux paramètres, tu peux te servir de la base de registre pour les sauvegarder. Car ton classeur comme un fichier texte est accessible. Pour la base de registre il faut être initié.

Donc voici un exemple pour Word:

Une Userform, un TextBox et 3 Button

1 pour ecrire dans la base de registre le contenu du TextBox
2 pour lire
3 pour supprimer la sous-clé

Option Explicit
'ajouter une valeur
Private Sub CommandButton1_Click()
SaveSetting appname:="Monappli", Section:="TextBox1", _
            Key:="Valeur", setting:=TextBox1.Value
SaveSetting "Monappli", "TextBox1", "Valeur", TextBox1.Value
End Sub
'supprimer valeur
Private Sub CommandButton2_Click()
DeleteSetting "Monappli", "TextBox1"
End Sub
'Lire valeur
Private Sub CommandButton3_Click()
TextBox1.Value = GetSetting(appname:="Monappli", Section:="TextBox1", _
                       Key:="Valeur")
End Sub
'chemin de la clé
'HKEY_CURRENT_USER\Software\VB and VBA Program Settings\Monappli\TextBox1


Si cela te convient, il te suffira de mettre les codes dans l'ouverture et la fermeture de ton userForm

Bonne programmation
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
5 avril 2014 à 16:18
Voici tout automatisé à l'ouverture et à la fermeture pour un TextBox et 2 Optionbutton:

Option Explicit
Dim etatoption As String
Private Sub UserForm_Initialize()
lecture
If etatoption = "Vrai" Then
OptionButton1.Value = True
Else
OptionButton2.Value = True
End If
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  ecriture
End Sub
Private Sub ecriture()
'textBox
SaveSetting appname:="Monappli", Section:="TextBox1", _
            Key:="Valeur", setting:=TextBox1.Value
SaveSetting "Monappli", "TextBox1", "Valeur", TextBox1.Value
 'optionButton
 If OptionButton1.Value = True Then
SaveSetting appname:="Monappli", Section:="OptionButton1", _
            Key:="etatoption", setting:="Vrai"
SaveSetting "Monappli", "OptionButton1", "etatoption", "Vrai"
Else
SaveSetting appname:="Monappli", Section:="OptionButton1", _
            Key:="etatoption", setting:="Faux"
SaveSetting "Monappli", "OptionButton1", "etatoption", "Faux"
End If
End Sub
Private Sub lecture()
'optionButton
etatoption = GetSetting(appname:="Monappli", Section:="OptionButton1", _
                       Key:="etatoption")
 'textBox
TextBox1.Value = GetSetting(appname:="Monappli", Section:="TextBox1", _
                       Key:="Valeur")
End Sub


Il ne te reste plus qu'à ajouter des contrôles!
0
sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 7
5 avril 2014 à 16:45
Merci pour ces réponses.

Je connaissais effectivement le coup du SaveSetting & GetSetting. Mais je voulais éviter pour les raisons suivantes :

- Manipuler le registre implique droits Admin, mais nous, on a des admins qui nous foutent des verrous partout de façon trop exagérée, si ça continu on aura même plus le droit de faire des copier coller au rythme où ça va lol

- Les fichiers se trouvent sur un disque réseau, si Pierre veut ouvrir son fichier depuis l'ordinateur de Paul, je ne suis pas sûr que ça marche.

- Vu le nombre de dossiers qui sera généré avec cet application, j'ai peur des conflits et d'une surcharge du registre. (Après j'avoue que j'ai tout à apprendre sur le sujet, donc je m'inquiète peut être pour rien).

Il y a autre choses d'important que je n'ai pas précisé. Moi je crée et met en place le biniou, mais dans quelques mois, ce n'est pas moi qui assurera la maintenance du fichier (en cas d'éventuels problème ou mise à jour à faire), car je vais quitter ce service. La personne qui s'en chargera (celle qui m'a demandé de faire ça), n'a aucune connaissance en VBA et c'est tout juste s'il sait faire un copier/coller (j'exagère un peu quand même lol), de la façon donc je construit le truc, avec des explications, un code bien commenté, et une macro-vision du truc il comprendra. Mais il ne faut pas qu'il ai une tonne de choses à assimiler d'un coup lol...

Merci encore.
(je suis gêné, ça m'ennui que tu te sois décarcassé pour une solution que je ne peut pas prendre...Sorry)

Je suis en train de bosser sur un mode avec enregistrement dans classeur excel (ça sera plus facile pour le collègue), je n'ai pas tout à fait fini et je dois partir, je continuerai demain et posterai ce que j'ai fait dans la foulé.
0
sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 7
Modifié par sifusalade le 6/04/2014 à 10:28
Bonjour,

Voici ce que j'ai fais et qui fonctionne (même si CS_Le Pivert a fait quelque chose de mieux).

dans ThisDocument :
Private Sub Document_Open()
UserForm1.Show   'Pour afficher l'UserForm1 à l'ouverture du fichier
End Sub


Dans un module (nommé ici : Module1) :
Sub ouvrirClasseurExcel()
Dim appXl As Excel.Application
Dim Wb As Excel.Workbook

Set appXl = CreateObject("Excel.Application")
appXl.Visible = False  'L'utilisateur ne doit pas voir ce qu'il se passe
Set Wb = appXl.Workbooks.Add

Wb.ActiveSheet.Range("A1").Value = UserForm1.TextBox1.Value
Wb.ActiveSheet.Range("A2").Value = UserForm1.TextBox2.Value
Wb.ActiveSheet.Range("A3").Value = UserForm1.TextBox3.Value
Wb.ActiveSheet.Range("A4").Value = UserForm1.CheckBox1.Value
'Bien sûr à la place je mettrai le code correspondant à tout mes contrôles,
'Ici je fais mais tests depuis un nouveau fichier et USF de test


Wb.Application.DisplayAlerts = False  'Comme tout doit être transparent pour l'utilisateur, on masque les alertes
Wb.SaveAs "C:\Users\sifusalade\Desktop\" & UserForm1.TextBox1.Value & ".xls"  'Enregistrer fichier Excel sous le bureau avec comme nom de fichier le contenu de la TextBox1
Wb.Application.DisplayAlerts = True 'Nul besoin de dire pourquoi je met ça lol
appXl.Quit  'Transparence oblige lol
ThisDocument.SaveAs "C:\Users\sifusalade\Desktop\" & UserForm1.TextBox1.Value & ".doc" 'Enregistrer fichier Word sous le bureau avec comme nom de fichier le contenu de la TextBox1
End Sub


Dans l'UserForm1 (nommé ici : UserForm1) (Que d'originalité dis donc !! lol)
Private Sub CommandButton1_Click()
Call Module1.ouvrirClasseurExcel
End Sub

Private Sub UserForm_Initialize()

Dim appXl As Excel.Application
Dim Wb As Excel.Workbook

On Error GoTo arret

Set appXl = CreateObject("Excel.Application")
appXl.Visible = False  'L'utilisateur ne doit pas voir ce qu'il se passe

Set Wb = appXl.Workbooks.Open(Mid(ThisDocument.Path & "\" & ThisDocument.Name, 1, Len(ThisDocument.Path & "\" & ThisDocument.Name) - 4) & ".xls")
'on prend le chemin complet à partir du 1er caractère,
'auquel on extrait l'extention en retirant 4 caractères (.doc) du chemin complet,
'puis on rajoute la nouvelle extention

Me.TextBox1.Value = Wb.ActiveSheet.Range("A1").Value
Me.TextBox2.Value = Wb.ActiveSheet.Range("A2").Value
Me.TextBox3.Value = Wb.ActiveSheet.Range("A3").Value
Me.CheckBox1.Value = Wb.ActiveSheet.Range("A4").Value

Wb.Application.DisplayAlerts = False  'Comme tout doit être transparent pour l'utilisateur, on masque les alertes
Wb.Application.DisplayAlerts = True 'Nul besoin de dire pourquoi je met ça lol
appXl.Quit  'Transparence oblige lol

Exit Sub
arret:
MsgBox "L'application n'arrive pas à charger le fichier Excel contenant tout les éléments précédement saisis pour cette publicité." & Chr(10) & Chr(10) & "Le problème vient certainement du fait que le fichier ne se trouve pas à côté de votre document Word" & Chr(10) & Chr(10) & "Pour modifier votre publicité avec les remarques du pouvoir adjudicateur, fermez le présent fichier et ré-ouvrez le une fois que les deux fichiers seront côte à côte dans le dossier : D:/Publicité/" & Year(Date) & Chr(10) & "Sinon, ressaisissez votre publicité depuis le début" & Chr(10) & Chr(10) & "(En cliquant sur OK, les paramètres par défaut seront donc initialisés.)"
End Sub


Voilà !
Cela implique que les fichiers Word & Excel soient côtes-à-côtes dans le même dossier. (là pour les tests, j'ai le bureau, mais dans la MsgBox d'erreur j'ai mis le disque D:/ car au final, le dossier prédéfini sera sur le D:/).

Là j'ai commenté avec des moufles lol... Je pense que tout le monde comprends. Mais si ce n'était pas le cas, n'ésitez pas à me le demander ;-)

Reste plus qu'à (je pense), mettre un mot de passe pour l'écriture du fichier Excel, au cas où on l'on voudrait modifier directement le fichier Excel pour placer nos 3000 caractères par exemple. Code qu'il faudra placer avant :
Wb.SaveAs "C:\Users\sifusalade\Desktop\" & UserForm1.TextBox1.Value & ".xls"  'Enregistrer fichier Excel sous le bureau avec comme nom de fichier le contenu de la TextBox1

de la procédure "ouvrirClasseurExcel".
0
sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 7
6 avril 2014 à 11:48
Pour protéger le fichier Excel en écriture il suffit donc de placer avant :
Wb.SaveAs "C:\Users\sifusalade\Desktop\" & UserForm1.TextBox1.Value & ".xls"  'Enregistrer fichier Excel sous le bureau avec comme nom de fichier le contenu de la TextBox1

de la procédure "ouvrirClasseurExcel", le code suivant :

Wb.ActiveSheet.Protect "toto"  'toto étant le mot de passe pour ôter la protection


Tout ceci fonctionne bien chez moi. J'imagine que je peux marquer le sujet comme étant résolu, mais avant, j'attends vos remarques. Il y a sûrement des choses à améliorer la dedans ;-)

En attendant je tient à vous remercier mille fois.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
6 avril 2014 à 11:56
Bonjour,

Joli code, pensez a ajouter la "deprotection" du fichier excel avant de mettre a jour les cellules dans ouvrirClasseurExcel() sinon excel pas d'accord
0
sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 7
6 avril 2014 à 18:55
Oups ! Juste un oubli... Bien vu !! Merci ;-)
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
6 avril 2014 à 15:59
Je ne vois pas à quoi te sert le classeur Excel sur le Bureau. Le seul utile c'est celui qui est avec ton document Word .
Donc voici un code plus compact qui fait la même chose:

Option Explicit
Private Sub UserForm_Initialize()
lire
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
ecrire
End Sub
Sub ecrire()
Dim appXl As Excel.Application
Dim Wb As Excel.Workbook
Set appXl = CreateObject("Excel.Application")
appXl.Visible = False 'L'utilisateur ne doit pas voir ce qu'il se passe
Set Wb = appXl.Workbooks.Open(ThisDocument.Path & "\essai.xls")
Wb.ActiveSheet.Unprotect "toto"
Wb.ActiveSheet.Range("A1").Value = UserForm1.TextBox1.Value
Wb.ActiveSheet.Range("A2").Value = UserForm1.TextBox2.Value
Wb.ActiveSheet.Range("A3").Value = UserForm1.TextBox3.Value
Wb.ActiveSheet.Range("A4").Value = UserForm1.CheckBox1.Value 'Bien sûr à la place je mettrai le code correspondant à tout mes contrôles, 'Ici je fais mais tests depuis un nouveau fichier et USF de test
Wb.ActiveSheet.Protect "toto"
Wb.Application.DisplayAlerts = False 'Comme tout doit être transparent pour l'utilisateur, on masque les alertes
Wb.SaveAs ThisDocument.Path & "\essai.xls"
appXl.Quit
End Sub
Sub lire()
Dim appXl As Excel.Application
Dim Wb As Excel.Workbook
Set appXl = CreateObject("Excel.Application")
appXl.Visible = False 'L'utilisateur ne doit pas voir ce qu'il se passe
Set Wb = appXl.Workbooks.Open(ThisDocument.Path & "\essai.xls")
UserForm1.TextBox1.Value = Wb.ActiveSheet.Range("A1").Value
UserForm1.TextBox2.Value = Wb.ActiveSheet.Range("A2").Value
UserForm1.TextBox3.Value = Wb.ActiveSheet.Range("A3").Value
UserForm1.CheckBox1.Value = Wb.ActiveSheet.Range("A4").Value
Wb.Application.DisplayAlerts = False 'Comme tout doit être transparent pour l'utilisateur, on masque les alertes
appXl.Quit
End Sub


Le fichier Excel se nomme essai
0
sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 7
6 avril 2014 à 19:09
Le fichier Excel du bureau, c'est pour les tests, pour faire les tests, je mets sur le bureau (étant donnée que sur mon ordi perso je n'ai pas de D:/). Je n'aurai plus qu'à remplacer au travail, l'adresse du bureau, par l'adresse du D:/ (en dur, car le modèle sera sur un disque S:/ donc pas Wb.SaveAs ThisDocument.Path & .... ).

Ton code est super, il n'y a plus qu'à remplacer ce chemin et à remettre un enregistrement du document Word sur D:/ (portant pour nom, comme pour le fichier excel, la valeur de la TextBox1)

Merci ;-)
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
7 avril 2014 à 08:16
Le code du chemin en dur n'est pas recommandé. Si tu l'installes sur plusieurs machines le chemin ne sera pas le même!

Bonne programmation

A la prochaine

@+ Le Pivert
0
sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 7
7 avril 2014 à 22:45
Justement, on a tous un disque D:/, en codant en dur pour aller dans le D:/ je suis sûr que ça marche pour tout le monde et que c'est pout tout le monde pareil.

En tout cas j'ai fais un test aujourd'hui au boulot avec quelques collègues. Et cela fonctionne. Merci beaucoup.
Je crois que je peux marquer le sujet comme résolu.

Merci encore.
0