Comment compléter un texte sous Word grâce à un formulaire ?

Résolu
gregml Messages postés 89 Date d'inscription samedi 17 mai 2014 Statut Membre Dernière intervention 16 juin 2017 - 19 mai 2014 à 00:45
gregml Messages postés 89 Date d'inscription samedi 17 mai 2014 Statut Membre Dernière intervention 16 juin 2017 - 5 juin 2014 à 12:01
Bonjour à tous,

Malgré mes nombreuses tentatives et mes nombreuses demandes, je reste toujours incapable de faire un truc assez simple: compléter (ou remplir ou alimenter je ne sais pas comment on dit en informatique) un texte écrit dans un document Word, à partir d'un formulaire.
Je commence à vraiment désespérer car je pense n'être pas très loin, mais je pense que j'ai un problème de fichier. J'ai tenté d'expliquer mon problème dans le fichier Pdf joint à l'adresse ci-dessous:

http://cjoint.com/?DEswod1K8o0

Un petit peu d'aide serait vraiment bienvenue.

Merci, greg
A voir également:

16 réponses

Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
19 mai 2014 à 07:34
Bonjour,

Essaye d'être concis autour de ton problème, là on a quasiment ton projet entier.
J'ai lu ton pdf, sans vraiment comprendre ou est ton soucis.
Ton code n'est pas coloré ça n'aide pas sa lecture.

Poste le bout de code concerné ici, en te servant des balises de coloration syntaxique, voir ici.
Explique ce que tu espérais faire et le résultat réel.
0
gregml Messages postés 89 Date d'inscription samedi 17 mai 2014 Statut Membre Dernière intervention 16 juin 2017
Modifié par jordane45 le 19/05/2014 à 11:04
Bonjour et merci de répondre à mon problème,

En fait, ce que je ne comprends pas bien, ce sont 2 choses:
1) Comment faire pour que le texte entré par l'utilisateur dans la zone de texte du UserForm s'affiche effectivement dans le document Word, voire à une place désignée ?

Pour ce faire, je me permets de ne conserver que la partie qui m'intéresse ici. Ne connaissant vraiment pas grand chose à VBA et aux formulaires, je décris tout dans le détail:
a) j'enregistre un Document prenant en charge les macros, je l'appelle essaiOuvertureUserForm.docm. J'y écris juste une phrase : J'aimerais que le mot entré par l'utilisateur soit ici :

b) Dans le Project 'essaiOuvertureUserForm.docm', j'ai créé un formulaire appelé UserForm1 qui contient:
*un label
* une zone de texte
* deux boutons de Commande

c) Là, ça commence à partir en quenouille:
Je dois écrire le code qui va :
* ouvrir UserForm1
* initialiser UserForm1
* Affecter la fermeture de UserForm en cas d'appui sur CommandButton1
* Récupérer les données remplies par l'utilisateur
* placer les données dans le document
* Fermer la UserForm,

ce qui me donne (j'ai piqué ce code sur Internet !)

Sub OuvertureUserForm()
Load UserForm1
UserForm1.Show
End Sub

Public Sub formulaire()
UserForm1.Show
End Sub

Option Explicit

Private Sub userform_initialize()
Me.TextBox1.SetFocus
End Sub

Private Sub commandbutton1_click()
Me.hide
End Sub

Private Sub commandbutton2_click()
Dim q As String
q = Me.TextBox1.Text
ActiveDocument.Bookmarks("Titre").Range.Text = q
ActiveDocument.Fields.Update
Me.hide
End Sub

Résultat :
la UserForm s'affiche, on peut écrire du texte dans la zone de texte, mais elle ne se ferme pas lorsqu'on clique sur les 2 commandes et elle ne remplace pas dans le document essaiOuvertureForm.docm "Titre" par ce qu'on a écrit dans la zone de texte de UserForm1.

=> j'ai écrit ce code dans le ThisDocument de essaiOuvertureForm.docm. Aurais-je dû l'écrire dans le code de UserForm1 ?
=> Ou alors ce sont les commandes du code qui ne veulent rien dire ?

Bref, j'ai besoin d'aide.

2) Mon deuxième problème est de savoir comment faire ouvrir le UserForm1 par exemple, dès l'ouverture d'un document associé à un modèle. Mais je préfère pour l'instant résoudre mon problème 1)

J'espère avoir été plus clair et ne pas trop te décourager par mon ignorance,
Merci beaucoup, Grég
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
19 mai 2014 à 11:04
Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du
code sur le forum.
Explications disponibles ici :
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

J'édite ton message pour les mettre.
Merci de le faire la prochaine fois.
0
gregml Messages postés 89 Date d'inscription samedi 17 mai 2014 Statut Membre Dernière intervention 16 juin 2017
19 mai 2014 à 10:53
J'oubliais :
*aurais-je dû mettre des signets dans le texte après:
J'aimerais que le mot entré par l'utilisateur soit ici : ?
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
19 mai 2014 à 11:05
Oui.
Il faut bien indiquer quelque part à ton code où tu souhaites écrire...
L'utilisation des signets est une bonne méthode.
0
gregml Messages postés 89 Date d'inscription samedi 17 mai 2014 Statut Membre Dernière intervention 16 juin 2017
19 mai 2014 à 11:28
OK merci et j'utiliserais bien la coloration syntaxique la prochaine fois, il faut reconnaître que c'est bien plus lisible...
Pour ce qui est du signet, j'ai sélectionné "Titre" avec la souris, suis allé dans Insertion/Signet puis est nommé le signet 'Signet1'. J'ai exécuté mais cela ne donne rien de plus. Brr!
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
19 mai 2014 à 11:40
Bonjour,
j'ai sélectionné "Titre" avec la souris, suis allé dans Insertion/Signet puis est nommé le signet 'Signet1'.
... Normal... vu que tu as donné comme nom de signet :" Signet 1" ... alors que ton code veux un signet dont le nom est : "Titre"
.Bookmarks("Titre")
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
19 mai 2014 à 11:50
Ha j'aurais du réactualiser la page avant de répondre....
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
19 mai 2014 à 11:46
Dans l'éditeur, quand tu doubles clique sur tes boutons arrive tu ici
Private Sub commandbutton1_click()
Me.hide
End Sub

et là
Private Sub commandbutton2_click()
Dim q As String
q = Me.TextBox1.Text
ActiveDocument.Bookmarks("Titre").Range.Text = q
ActiveDocument.Fields.Update
Me.hide
End Sub


Sinon (ce que je soupçonne), copie le code à exécuter dans les deux procédures liées à tes boutons.
0
gregml Messages postés 89 Date d'inscription samedi 17 mai 2014 Statut Membre Dernière intervention 16 juin 2017
19 mai 2014 à 12:15
Excusez-moi tous les 2 mais je vais te paraître débile et je commence à craquer...

J'ai changé le nom du Signet, je l'ai nommé Titre (sans guillements). Rien de plus.

J'ai fait Exécuter (dans la fenêtre principale de Word). Je double-clique sur les boutons (de commande1 et command2, c'est bien de cela dont tu parles ?) et ça ne fait absolument RIEN...
Désolé, Grég
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
19 mai 2014 à 12:29
Ma question ne concerne pas le mode exécution, mais l'écriture du code, le mode édition.
Tu affiches ton formulaire, et du double cliques sur l'une ou l'autre de tes commandes (c'est bien ça que j'appelle un bouton), à ce moment l'éditeur t'en là ou se trouve le code à exécuter quand un utilisateur futur appuiera sur le bouton. Si comme je le pense ça ne tombe pas là ou est écrit ton code, déplace le à cet endroit.
Comme tu as copier coller ce code depuis le web, je pense que tu ne l'as pas mis au bon endroit.

Jordane a bien vu l'erreur sur le nom du signet, mais si le code avait été exécuté tu aurais sûrement eu un message d'erreur.
0
gregml Messages postés 89 Date d'inscription samedi 17 mai 2014 Statut Membre Dernière intervention 16 juin 2017
19 mai 2014 à 12:39
Alors, j'affiche (à partir de l'Editeur) mon formulaire. Je double-clique sur Commande1, je tombe sur:

Private Sub CommandButton1_Click()

End Sub

Je double-clique sur CommandButton2 puis:

Private Sub CommandButton2_Click()

End Sub

Ai-je au moins (je commence à avoir vraiment honte de mon ignorance) bien compris ta question ?

Merci, Greg
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
19 mai 2014 à 12:45
Pas de honte à avoir. Il faut un début à tout.

Donc on constate que chaque bouton appelle une sub (méthode ou procédure selon à qui tu parles, et le langage utilisé). Chacune est vide, c'est donc normal, que tes boutons ne font rien.

Dans la méthode qui correspond au bouton fermer, tu mets
Me.Hide


Et dans l'autre méthode, l'autre code
0
gregml Messages postés 89 Date d'inscription samedi 17 mai 2014 Statut Membre Dernière intervention 16 juin 2017
19 mai 2014 à 12:49
YEEEESSSS, ça marche!!!

Un big merci....
Cela signifie que lorsque je veux taper le code d'un bouton, je dois toujours faire comme ça? Double-cliquer sur le bouton en question et y insérer les commandes en question ?
0

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

Posez votre question
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
19 mai 2014 à 21:10
Bonsoir, comme promis, si tu veux choisir quel code répond à quel événement d'un contrôle voici comment faire.
1 tu double cliques sur le contrôle, en mode édition, tu arrives dans l'événement par défaut du contrôle.
2 tu déroules la liste (voir image) et tu choisi l'événement.

3 tu codes
0
gregml Messages postés 89 Date d'inscription samedi 17 mai 2014 Statut Membre Dernière intervention 16 juin 2017
19 mai 2014 à 23:13
Ca ne marche plus... J'ai beau essayer, l'exécution du programme, auquel je n'ai pas touché, me renvoie 'Erreur d'excution "5941" : Le membre de la collection requis n'existe pas.'

Bigre... moi qui pensait avoir résolu un des nombreux problèmes à appréhender...

Je pourrais peut-être solliciter encore tes services. Il faudrait en fait que toutes les actions soient claires dans mon esprit. Or ça ne l'est pas, je fais les choses sans les comprendre, raison pour laquelle je plante ce petit programme.

Merci, Grég
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
20 mai 2014 à 06:25
Bonjour, est ce que l'éditeur montre la ligne de code ou ce message apparaît?
Si oui, poste cette ligne.
Si non à brûle pour point, ça pourrait être un signet mal nommé, comme titre et signet1.
0
gregml Messages postés 89 Date d'inscription samedi 17 mai 2014 Statut Membre Dernière intervention 16 juin 2017
20 mai 2014 à 08:13
Salut Whismeril,

T'es vraiment trop fort. C'est le signet qui n'était effectivement pas bien nommé.

MERCI!!!!!!!!!

Il me restera maintenant deux choses :
1) savoir pourquoi, à l'exécution de ce formulaire, apparaissent (parfois, mais pas tout le temps!!) les fenêtres de code 'ThisDocument, de la UserForm et de Project, et de ne pas les faire ouvrir
2) de faire exécuter ce formulaire à l'ouverture du document essaiOuvertureUserForm.docm
3) de faire exécuter ce formulaire à l'ouverture d'un Modèle plus général de document. En fait, ouvrir un Document général avec unee première fenêtre, qui me dirigerait selon le choix validé, à un certain document puis à l'ouverture de ce document, provoquerait l'ouverture d'un UserForm qui compléterait un document constellé de signets.

Merci encore et ne t'inquiète pas, j'ai bien compris que les différents posts doivent envisager des problèmes en tranches et non pas ce que je viens d'écrire, mais je donne juste le 'prjet général'.

Merci encore (et bravo), Grég
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
20 mai 2014 à 12:33
Bonjour,


Bien que ta question soit résolue...
Pour éviter de nouveaux soucis avec des signets mal nommés... tu peux vérifier avant s'ils existent...

http://msdn.microsoft.com/en-us/library/office/ff821366%28v=office.15%29.aspx

Par exemple :

Function majSignet(signetName As String, SignetValue As String) As Boolean
If ActiveDocument.Bookmarks.Exists(signetName) = True Then
    ActiveDocument.Bookmarks(signetName).Range.Text = SignetValue
    ActiveDocument.Fields.Update
    majSignet = True
Else
    majSignet = False
End If
End Function



Sub Test()

 If majSignet("test3", "nouvelle valeur") Then
  MsgBox "Update réussi !"
 Else
   MsgBox "Update ko !"
 End If


End Sub

0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
20 mai 2014 à 14:10
Houla pas trop fort non, juste ce qu'il faut pour t'aider un peu.
Une collection est une variable qui regroupe un ensemble de trucs (nombres, chaines de caractères, signets etc...), avec cette notion, le message d'erreur est assez parlant pour émettre une hypothèse dans ton contexte.

La précaution proposée par Jordanne est fort judicieuse.

A la vue de ton projet global, je n'aurais pas fait une macro, mais un logicile externe qui ouvrirait le bon modèle word et ecrirait les infos au bon signet. Ce parce que je maitrise mieux un autre langage que VBA. Mais je pense que ça doit être possible.

Pour avoir un socle pour travailler, word te permet d'enregistrer une macro (dans Word 2010, c'est l'onglet Affichage puis Macro et enregistrer macro). Cette fonctionnalité enregistre en VBA tout ce que tu fais à la main. Tu pourras ainsi voir comment se traduit le fait d'ouvrir un autre document, etc....

Quand tu te retrouves face à une difficulté, et après quelques recherches ici ou aileurs, ouvre une nouvelle question, poste le code, et on t'aidera.
0
gregml Messages postés 89 Date d'inscription samedi 17 mai 2014 Statut Membre Dernière intervention 16 juin 2017
20 mai 2014 à 23:54
Merci à vous deux, une fois de plus.
Bon, j'ai décidé de prendre mon courage à 2 mains, et de me lancer dans la littérature (j'ai un peu de mal avec les bouquins d'informatiqe mais bon...). J'ai trouvé 'Formation à VBA Office 2013' par Dominique Maniez.
Il faut vraiment que je comprenne 2 ou 3 choses, notamment comment sont structurées les différentes fenêtres (projet, code..) car je me rends compte que je ne sais toujours pas où rajouter les codes, je m'en rends compte avec celui que tu m'as proposé Jordane45.

A bientôt... je reviens avec d'autres questions.
Grég
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
24 mai 2014 à 22:09
Bonsoir,

si tu passes à VB.Net
voici la source dont je parlais plus haut, passée dans un traducteur.

je ne l'ai pas entièrement essayée, mais ouvrir un fichier et écrire du texte à un signet fonctionnent.
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Windows.Forms
Imports Microsoft.Office.Interop.Word


Public Class GestionWord
#Region "Déclarations "

    Private _ApplicationWord As Microsoft.Office.Interop.Word.Application
    Private _MonDocument As Microsoft.Office.Interop.Word._Document
    'Microsoft.Office.Interop.Word.Selection _MaSelection; 
    Private _MonRange As Microsoft.Office.Interop.Word.Range
    Private _MonSignet As Bookmark
    Private _MesSignets As Bookmarks
    Private _MonImage As InlineShape

    Private M As Object = System.Reflection.Missing.Value

#End Region

#Region "Initialisation Sauvegarde "

    ''' <summary> 
    ''' Cette classe sert d'interface entre word et une apllication C#. 
    ''' Le constructeur démarre word. 
    ''' </summary> 
    Public Sub New()
        _ApplicationWord = New Microsoft.Office.Interop.Word.Application
        _ApplicationWord.Visible = True
    End Sub

    ''' <summary> 
    ''' Ouvre un fichier existant. 
    ''' </summary> 
    ''' <param name="FileName">Chemin du document</param> 
    Public Sub OuvrirFichier(ByVal FileName As String)
        Dim oFileName As Object = CObj(FileName)
        Dim Faux As Object = CObj(False)
        Dim Vrai As Object = CObj(True)

        _MonDocument = _ApplicationWord.Documents.Add(oFileName, Faux, M, Vrai)
    End Sub

    ''' <summary> 
    ''' Enregistrer le document sous. 
    ''' </summary> 
    ''' <param name="FileName">Chemin du docmuent</param> 
    Public Sub Sauver(ByVal FileName As String)
        Dim oFileName As Object = CObj(FileName)
        Dim Faux As Object = CObj(False)
        Dim Vrai As Object = CObj(True)

        Try
            _MonDocument.SaveAs(oFileName, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M)
        Catch
            MessageBox.Show("Le fichier Word n'a pas pu être enregistré.", "Erreur d'enregistrement", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub

    ''' <summary> 
    ''' Fermer le document et l'application word. 
    ''' </summary> 
    Public Sub Fermer()
        _MonDocument.Close(M, M, M)
        _ApplicationWord.Application.Quit(M, M, M)
    End Sub

#End Region

#Region "Manipulation document "

    ''' <summary> 
    ''' Fusionne plusieurs documents en un seul. 
    ''' </summary> 
    ''' <param name="FichierPrincipal">Document à la suite duquel les autres seront insérer.</param> 
    ''' <param name="FichiersAInserer">Tableau contenant les chemins des documents à insérer</param> 
    Public Sub FusionnerPlusieurFichiers(ByVal FichierPrincipal As String, ByVal FichiersAInserer() As String)
        Me.OuvrirFichier(FichierPrincipal)

        'on insere une page vierge sinon ça merde, nécessit une signet à la fin de la page 
        Me.AtteindreSignet("FinPage")
        Dim Type As Object = CObj(WdBreakType.wdPageBreak)
        _MonRange.InsertBreak(Type)

        'on insere les fichiers words exétieurs 
        'decompte à l'envers car, il insere le fichier apres le saut de page, 
        'puis le fichier suivant au même endroit etc.. 
        For i As Integer = FichiersAInserer.Length - 1 To 0 Step -1
            Dim FileName As String = FichiersAInserer(i)
            _MonRange.InsertFile(FileName, M, M, M, M)
        Next i

        'on supprime la page vierge 
        Me.SupprimePage(FichiersAInserer.Length + 2)
    End Sub

    ''' <summary> 
    ''' Supprime une page. 
    ''' </summary> 
    ''' <param name="NumeroPage">Numéro de la page à supprimer</param> 
    Public Sub SupprimePage(ByVal NumeroPage As Integer)
        AtteindrePage(NumeroPage)

        'Supprime la selection 
        Dim MaSelection As Selection = _ApplicationWord.Selection
        MaSelection.TypeBackspace()
    End Sub

    ''' <summary> 
    ''' Insere un saut de page aprés le range  
    ''' </summary> 
    Public Sub InsererPage()
        Dim Typ As Object = CObj(WdBreakType.wdPageBreak)
        _MonRange.InsertBreak(Typ)
    End Sub

#End Region

#Region "Traitement de Texte "

    ''' <summary> 
    ''' Atteindre un signet dans le document. 
    ''' </summary> 
    ''' <param name="NomSignet"></param> 
    ''' <returns></returns> 
    Public Function AtteindreSignet(ByVal NomSignet As String) As Boolean
        Dim Nom As Object = CObj(NomSignet)

        'récupére la liste de signets 
        _MesSignets = _MonDocument.Bookmarks

        'si le signet cherché existe 
        If _MesSignets.Exists(NomSignet) Then
            'on positionne le range sur le signet et la fonction retourne true 
            _MonSignet = _MesSignets.Item(Nom)
            _MonSignet.Select()
            _MonRange = _MonSignet.Range
            Return True
        Else
            'Un message d'erreur est affiché, et la fonction retourne false 
            MessageBox.Show(String.Format("Le signet {0} n'existe pas dans le fichier.", NomSignet), "Insertion impossible", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Return False
        End If
    End Function

    ''' <summary> 
    ''' Atteindre un signet dans le document et insérer du texte aprés. 
    ''' </summary> 
    ''' <param name="NomSignet"></param> 
    ''' <param name="Texte">Texte à insérer</param> 
    ''' <returns></returns> 
    Public Function AtteindreSignet(ByVal NomSignet As String, ByVal Texte As String) As Boolean
        'si on a atteint le signet 
        If AtteindreSignet(NomSignet) Then
            'on insère le texte aprés le signet, la fonction retourne true 
            _MonRange.InsertAfter(Texte)
            Return True
        End If
        Return False
    End Function

    ''' <summary> 
    ''' Ecrire du texte à la suite de l'emplacement séléctionné. 
    ''' </summary> 
    ''' <param name="Texte"></param> 
    ''' <returns></returns> 
    Public Function EcrireTexteApresLaSelection(ByVal Texte As String) As Boolean
        Try
            'on insère le texte aprés le signet, la fonction retourne true 
            _MonRange.InsertAfter(Texte)
            Return True
        Catch
            Return False
        End Try
    End Function

    ''' <summary> 
    ''' Applique la valeur WdParagraphAlignment à un range 
    ''' </summary> 
    ''' <param name="Alignement"></param> 
    Public Sub AlignementRange(ByVal Alignement As WdParagraphAlignment)
        _MonRange.ParagraphFormat.Alignment = Alignement

    End Sub

    ''' <summary> 
    ''' Atteint et selectionne une page 
    ''' </summary> 
    ''' <param name="NumeroPage"></param> 
    Public Sub AtteindrePage(ByVal NumeroPage As Integer)
        Dim what As Object = CObj(WdGoToItem.wdGoToPage)
        Dim whitch As Object = CObj(WdGoToDirection.wdGoToFirst)
        Dim Numero As Object = CObj(NumeroPage)

        'Atteindre la page voulue 
        _MonRange = _MonDocument.GoTo(what, whitch, Numero, M)

        'La selectionner 
        _MonRange.Select()

    End Sub

#End Region

#Region "Image "

    ''' <summary> 
    ''' Insere une photo à l'endroit sélectionné. 
    ''' </summary> 
    ''' <param name="FichierImage"></param> 
    Public Sub InsereImage(ByVal FichierImage As String)
        'Selection.InlineShapes.AddPicture FileName:= _ 
        Dim monFalse As Object = CObj(False)
        Dim monTrue As Object = CObj(True)
        _MonImage = _MonRange.InlineShapes.AddPicture(FichierImage, monFalse, monTrue, M)
    End Sub

    ''' <summary> 
    ''' Modifie la taille de l'image. 
    ''' </summary> 
    ''' <param name="Pourcent"></param> 
    Public Sub TailleImage(ByVal Pourcent As Integer)
        Dim Height As Single = _MonImage.Height ' = 360.3
        Dim Width As Single = _MonImage.Width ' = 256.8

        _MonImage.Height = Height * Pourcent \ 100
        _MonImage.Width = Width * Pourcent \ 100

    End Sub

#End Region
End Class


0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
24 mai 2014 à 22:14
Il faut ajouter au projet la référence COM: Microsoft Word...
0
gregml Messages postés 89 Date d'inscription samedi 17 mai 2014 Statut Membre Dernière intervention 16 juin 2017
3 juin 2014 à 21:36
Salut Whismeril,
comment vas-tu ?
Pour ma part, je me documente sur Vb.net... certaines choses sont aisées mais il y a parfois des choses toute bête que je ne comprends pas.

A ma grande honte, je ne comprend toujours pas tout à fait la structure d'un projet. Ainsi, j'ai fait un 'copier' de ton code ci-dessus. J'ai été dans Projet > Ajouter une référence > COM > Microsoft Word 14.0 Object Library.
Puis j'ai collé (un peu comme je pouvais) le code en question.
Mais, et c'est là où j'ai honte, je ne sais pas si je dois effacer les instructions :

Module Module1
Sub Main()
End Sub
End Module

... ou copier le code dedans ...
De manière générale, je ne sais jamais trop quoi faire des codes qui sont fournis sur Internet.

Merci, Greg
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
3 juin 2014 à 22:08
Bonjour,
en regardant le code... je te dirai qu'il ne faut pas le coller dans un MODULE mais dans une CLASS auquel tu donneras comme nom GestionWord
0
gregml Messages postés 89 Date d'inscription samedi 17 mai 2014 Statut Membre Dernière intervention 16 juin 2017
3 juin 2014 à 23:04
Salut Jordane45,

J'ai suivi ton conseil. J'ai ouvert un Nouveau projet en spécifiant 'Bibliothèque de classes'. J'ai collé tout le code en supprimant
Public Class Class1
End Class
... et en ajoutant le référence COM> Microsoft Word.

Mais j'ai toujours 1 avertissement : L'espace de noms ou le type spécifié dans les Imports 'System.Windows.Forms' ne contient aucun membre public. Vérifiez que l'espace de noms ou le type est défini et qu'il contient au moins un membre public.V2rifiez que le nom de l'élément importé n'utilise ps d'autres alias.

et 6 fois:
'MessageBox' n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection.'

Si tu as une idée pour tout cela, cela m'avancerait et serait très généreux de ta part.

Merci, Greg
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
3 juin 2014 à 23:14
Tu créés ub projet windows Form
Dans ce projet, tu ajoutes un nouvel élément CLASS
Tu y colles le code.
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
4 juin 2014 à 01:04
Bonsoir, vu l'heure jordane a très bien résumé le principe.
Il ne te reste qu à "dimer" une variable de la class gestionword.
Un truc du genre
 Dim word as new GestionWord
mais la mon ordi est éteint je ne suis pas sur à 100%
0
gregml Messages postés 89 Date d'inscription samedi 17 mai 2014 Statut Membre Dernière intervention 16 juin 2017
4 juin 2014 à 05:57
Merci beaucoup à vous deux.
Tout ceci est un peu vague jusqu'ici. Je prends mon temps de comprendre le tuto, je l'applique à notre code et je vous en reparle.

Merci infiniment,
Greg
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
4 juin 2014 à 07:42
Bonjour,

voila un bout de code pour démarrer
        Dim monWord As New GestionWord()
        monWord.OuvrirFichier("G:\Test.docx")
        monWord.AtteindreSignet("signet1", "Nouveau Texte")
        monWord.Sauver("G:\Test2.docx")


Attention la classe GestionWord postée plus haut est une traduction automatique réalisée par un logiciel.
Ça n'est peut être pas le mieux codé pour VB.

Concernant les messages d'erreur
: L'espace de noms ou le type spécifié dans les Imports 'System.Windows.Forms' ne contient aucun membre public. Vérifiez que l'espace de noms ou le type est défini et qu'il contient au moins un membre public.V2rifiez que le nom de l'élément importé n'utilise ps d'autres alias.
et
'MessageBox' n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection.'

Si c'est comme en C#, ça vient du fait que par défaut une bibliothèque de classes n'a pas d'interface graphique.
La référence à Windows.Form n'est donc pas active et le "impost" ne marche pas, et donc les messageBox non plus
0
gregml Messages postés 89 Date d'inscription samedi 17 mai 2014 Statut Membre Dernière intervention 16 juin 2017
5 juin 2014 à 12:01
Bonjour à tous,

Je tente petit à petit de me mettre à la POO....pas simple tout de même.
Pour ce faire, j'ai tenté de faire fonctionner un petit programme que j'ai recopié à l'adresse suivante (histoire de la faire tourner et de comprendre comment il fonctionne) :http://fr.openclassrooms.com/informatique/cours/apprenez-a-programmer-en-vb-net/notre-premiere-classe-2



pour la classe Mario1, dans la fenêtre Mario1.vb

et

pour la classe PlateauDeJeu dans Form1.vb


Mais j'ai 2 problèmes:
1) déjà, je ne comprends pas pourquoi mon 'panel' ne s'affiche pas dans ma Form1. C'est une question accessoire mais assez énervante.
2) Le programmateur a introduit deux variables : PAN_MARIO.Location et PAN_MARIO.Size, qu'il n'a pas défini au préalable. VB me renvoie dès lors un message d'erreur :PAN_MARIO n'est pas un membre de 'mario.PlateauDeJeu'

Pourriez-vous m'aider svp ?

Merci, Greg
0
Rejoignez-nous