IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Textbox et champs (pourquoi les choses simples ne sont elles jamais simples ?) [WD-2000]


Sujet :

VBA Word

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 64
    Points : 36
    Points
    36
    Par défaut Textbox et champs (pourquoi les choses simples ne sont elles jamais simples ?)
    bonjour à tous:
    je suis obligé d'utiliser word 2000, j'essaye de faire une chose apparemment évidente: copier des valeurs de textbox dans un document word contenant des champs.
    facile...
    he non.
    c'est facile de remplacer un signet par une valeur, mais ce remplacement détruit le signet (problème connu de tous sauf de moi).
    il y adonc plusieurs routines qui se ressemblent du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    ' *******************************
    ' *** Utilisation des signets ***
    ' *******************************
    Public Sub RemplirSignet0(S As String, T As String)
    ' Remplit le signet S avec le texte T sans détruire S
    'exemples:     RemplirSignet "Titre", T
    '               RemplirSignet "Question", Q
     
     Call GetBmks   'map ok
    If ActiveDocument.Bookmarks.Exists(Name:=S) Then
    MsgBox "RemplirSignet0  signet (reconnu):" & S & " texte:" & T, 0
    Else
    MsgBox "RemplirSignet0  signet (NON RECONNU):" & S & " texte:" & T, 0 'ok+++
    End If
     
    On Error GoTo rien
    Dim Place As Long
     
    Place = ActiveDocument.Bookmarks(S).Range.Start
    ActiveDocument.Bookmarks(S).Range.Text = T
    ActiveDocument.Bookmarks.Add Name:=S, Range:=ActiveDocument.Range(Place, Place + Len(T))
     
    rien:
    End Sub
    j'ai rajouté:qui liste les signets présents sur le document lors de la tentative de remplissage => c'est bon TOUS les signets sont bien reconnus à cet endroit.

    MAIS après il ne se passe rien;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If ActiveDocument.Bookmarks.Exists(Name:=S) Then
    MsgBox "RemplirSignet0  signet (reconnu):" & S & " texte:" & T, 0
    Else
    MsgBox "RemplirSignet0  signet (NON RECONNU):" & S & " texte:" & T, 0 'ok+++
    End If
    montre systematiquement que le signet que l'on doit remplir est inconnu (c'est normal qu'il ne se passe rien, mais je n'ai pas de message d'erreur).

    J'ai essayé sans succés cette fonction du forum (merci):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Function RemplacerTexteSignet(MyBM As Bookmark, stTexte As String) As Boolean
    'Déclaration des variables
    'intI pour le début de notre Bookmark
    Dim intI As Long
    'stBM pour le nom de notre Bookmark
    Dim stBM As String
    'un objet range pour le range de notre Bookmark
    Dim MyRng As Range
     
    'Récupération du nom du signet
    stBM = MyBM.Name
    'Récupération de la position de départ de notre signet
    intI = MyBM.Start
    'Affectation du texte à notre Bookmark
    MyBM.Range.Text = stTexte
    'Affectation de l'objet Range, où la position de départ est
    ' la même que pour le Bookmark et la fin sera le début augmenté
    ' de la longueur du texte
    Set MyRng = ActiveDocument.Range(Start:=intI, End:=intI + Len(stTexte))
    ' Crée le Bookmark sur l'objet Range
    ActiveDocument.Bookmarks.Add stBM, MyRng
    Set MyRng = Nothing
    'Affectation de la valeur True à la fonction
    RemplacerTexteSignet = True
    End Function
    quelqu'un peut il m'expliquer pourquoi ca ne marche pas ?
    pour ma part j'ai essayé toutes les combinaisons trouvées sur le net...
    d'avance merci (attention c'est word 2000 !)
    ap

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par payadz2 Voir le message

    Bonjour,

    La fonction RemplacerTexteSignet est issue du tutoriel VBA Word d'Olivier LEBEAU. Si votre signet contient du texte, cette fonction remplace bien le texte. Pour essayer, vous pouvez utiliser la procédure jointe dans le tuto :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sub AppelRemplacement()
    If RemplacerTexteSignet(ActiveDocument.Bookmarks("SignetA"), "AAAA") Then  ' A adapter.
    MsgBox "Le remplacement s'est " & vbCrLf _
    & "correctement déroulé !"
    End If
    End Sub
    Sur Word 2010, cela fonctionne correctement.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 64
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Bonjour,

    La fonction RemplacerTexteSignet est issue du tutoriel VBA Word d'Olivier LEBEAU. Si votre signet contient du texte, cette fonction remplace bien le texte. Pour essayer, vous pouvez utiliser la procédure jointe dans le tuto :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sub AppelRemplacement()
    If RemplacerTexteSignet(ActiveDocument.Bookmarks("SignetA"), "AAAA") Then  ' A adapter.
    MsgBox "Le remplacement s'est " & vbCrLf _
    & "correctement déroulé !"
    End If
    End Sub
    Sur Word 2010, cela fonctionne correctement.

    Merci de me répondre (je crois que j'ai déjà essayé cette fonction (j'en ai essayé tellement que je ne me souviens pas de l'origine ).
    Mais je reteste...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If RemplacerTexteSignet(ActiveDocument.Bookmarks("ndp"), "AAAA") Then  ' un de mes signets texte
    MsgBox "Le remplacement s'est " & vbCrLf _
    & "correctement déroulé !"
    End If
    ... effectivement j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> erreur d execution 6028
    impossible de supprimer la plage
    à la ligne indiquée ci dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Function RemplacerTexteSignet(MyBM As Bookmark, stTexte As String) As Boolean
    'Déclaration des variables
    'intI pour le début de notre Bookmark
    Dim intI As Long
    'stBM pour le nom de notre Bookmark
    Dim stBM As String
    'un objet range pour le range de notre Bookmark
    Dim MyRng As Range
    
    'Récupération du nom du signet
    stBM = MyBM.Name
    'Récupération de la position de départ de notre signet
    intI = MyBM.Start
    'Affectation du texte à notre Bookmark
    MyBM.Range.Text = stTexte  '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    'Affectation de l'objet Range, où la position de départ est
    ' la même que pour le Bookmark et la fin sera le début augmenté
    ' de la longueur du texte
    Set MyRng = ActiveDocument.Range(Start:=intI, End:=intI + Len(stTexte))
    ' Crée le Bookmark sur l'objet Range
    ActiveDocument.Bookmarks.Add stBM, MyRng
    Set MyRng = Nothing
    'Affectation de la valeur True à la fonction
    RemplacerTexteSignet = True
    End Function
    c'est a rien n'y comprendre...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par payadz2 Voir le message
    c'est a rien n'y comprendre...
    Non.

    Vous aurez compris qu'il existe deux types de signets :

    • Des signets de position.
    • Des signets contenant du texte.


    Votre signet est sans doute un signet de position.... Pour le vérifier, sélectionnez le signet et faites Atteindre. S'il s'agit d'un signet de position, le texte situé derrière n'est pas sélectionné.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 64
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Bonjour,

    La fonction RemplacerTexteSignet est issue du tutoriel VBA Word d'Olivier LEBEAU. Si votre signet contient du texte, cette fonction remplace bien le texte. Pour essayer, vous pouvez utiliser la procédure jointe dans le tuto :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sub AppelRemplacement()
    If RemplacerTexteSignet(ActiveDocument.Bookmarks("SignetA"), "AAAA") Then  ' A adapter.
    MsgBox "Le remplacement s'est " & vbCrLf _
    & "correctement déroulé !"
    End If
    End Sub
    Sur Word 2010, cela fonctionne correctement.
    Citation Envoyé par Eric KERGRESSE Voir le message
    Non.

    Vous aurez compris qu'il existe deux types de signets :

    • Des signets de position.
    • Des signets contenant du texte.


    Votre signet est sans doute un signet de position.... Pour le vérifier, sélectionnez le signet et faites Atteindre. S'il s'agit d'un signet de position, le texte situé derrière n'est pas sélectionné.
    Ce sont bien des signets contenant du texte, il s'agit initialement d'un document contenant des champs qui fonctionne en tant que tel, mais qui doit maintenant être intégré à d'autres documents.
    en réalité il y a aussi des champs numériques, mais essayons déjà de coller une simple valeur.

    En revanche
    sélectionnez le signet et faites Atteindre
    me laisse perplexe, comment sélectionner, comment atteindre ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par payadz2 Voir le message
    En revanche me laisse perplexe, comment sélectionner, comment atteindre ?
    Pièce jointe 307914

    Nb : Pouvez-vous ne pas reprendre l'intégralité des messages envoyés dans vos réponses ?

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 64
    Points : 36
    Points
    36
    Par défaut
    oui, c'est bien ça (adapté à w2000)
    outils>affichage>codes champs:
    j'ai bien en grisé: { FORMTEXT } a la place d'un champ texte, et dans options de champ:
    TEXTE ORDINAIRE - defaut:NOM
    longueur max:illimité - mise en forme : premiere lettre en majuscule
    executer macro
    au démarrage: VIDE
    A la sortie: VIDE (j'ai vidé ces items car je pensais qu'ils interferraient avec ce que je tente de faire)
    Paramètres de champ
    Signet:ndp
    calculer a la sortie=vide
    remplissage activé=vide (j'ai essayé coché et non coché, cela ne change rien).

    Après plusieurs tests, ce qui marche le mieux (pas de message d'erreur en tout cas):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    ' *******************************
    ' *** Utilisation des signets ***
    ' *******************************
    Public Sub RemplirSignet0(S As String, T As String)
    ' Remplit le signet S avec le texte T sans détruire S
    'exemples:     RemplirSignet "Titre", T
    '               RemplirSignet "Question", Q
     
    Call GetBmks   'map ok affiche les signets visibles à ce moment la du déroulé, on retrouve bien TOUS les signets à chaque appel
    If ActiveDocument.Bookmarks.Exists(Name:=S) Then
    MsgBox "RemplirSignet0  signet (reconnu):" & S & " texte:" & T, 0          'affiche bien les parametres passés ET reconnait le signet
    Else
    MsgBox "RemplirSignet0  signet (NON RECONNU):" & S & " texte:" & T, 0 'ok+++
    End If
     
    On Error GoTo rien
    Dim Place As Long
     
    Place = ActiveDocument.Bookmarks(S).Range.Start
    ActiveDocument.Bookmarks(S).Range.Text = T
    ActiveDocument.Bookmarks.Add Name:=S, Range:=ActiveDocument.Range(Place, Place + Len(T))
     
    rien:
    End Sub
    pour info le code de vérification de la présence des signets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub GetBmks()
        Dim bmk As Bookmark
        Dim msg As String
        For Each bmk In ActiveDocument.Range.Bookmarks
            msg = msg & bmk.Name & vbCr
        Next bmk
        MsgBox msg
    End Sub
    Le problème, c'est que tout se passe sans notification d'erreur MAIS le texte du document reste inchangé.
    En fait si on supprime la gestion d'erreur (on error goto rien)
    on a la même erreur qu'avec l'autre routine
    erreur d execution 6028
    impossible de supprimer la plage

    sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveDocument.Bookmarks(S).Range.Text = T
    J'ai essayé avec et sans protection du formulaire, rien n'y fait...

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par payadz2 Voir le message
    Pourriez vous mettre un exemple en ligne ?

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 64
    Points : 36
    Points
    36
    Par défaut
    J'ai trouvé (presque...):
    voila ce qui marche (récupère bien le texte de la textbox et le place DANS le champ du document, sans l'effacer, ce qui permet de refaire la manœuvre autant de fois que l'on souhaite):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    ' ***********************************
    ' w2000 Utilisation des signets w2000
    ' ***********************************
    Public Sub RemplirSignet0(S As String, T As String)
    'Remplit le signet S avec le texte T sans détruire S
    'exemples:    RemplirSignet "Titre", T
    '             RemplirSignet "Question", Q
     
    If ActiveDocument.Bookmarks.Exists(Name:=S) Then
    'MsgBox "RemplirSignet0  signet (reconnu):" & S & " texte:" & T & "ActiveDocument.Bookmarks(S).Range.Start:" & ActiveDocument.Bookmarks(S).Range.Start, 0
    Else
    MsgBox "RemplirSignet0  signet (NON RECONNU):" & S & " texte:" & T, 0 'ok+++
    End If
     
    On Error GoTo rien
     
    'Bookmark, Go to a Bookmark, replace the text that's contained
    'in the Bookmark, and still have the text bookmarked:
    'http://www.thezcorp.com/vbacodesamples.aspx
    Selection.GoTo What:=wdGoToBookmark, Name:=S
    Selection.Delete Unit:=wdCharacter, Count:=1
    Selection.InsertAfter T
    ActiveDocument.Bookmarks.Add Range:=Selection.Range, Name:=S
     
    rien:
    End Sub
    Il y a bien un problème, une fois l'action faite, les champs remplis n'apparaissent plus en tant que tel sur le document ( plus de {texte}), pourtant, je sauve le doc tel que, je sors de WORD, je reouvre le doc et ça marche !!! (sans visibilité des champs en tant que tels ).
    Je perd aussi le formatage...
    Avez vous des idées sur ces subtilités?

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 64
    Points : 36
    Points
    36
    Par défaut
    Je met résolu, même si ce n'est que partiel.
    @ Eric KERGRESSE merci de votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/04/2015, 16h24
  2. Réponses: 0
    Dernier message: 19/05/2010, 13h12
  3. Pourquoi les droits NTFS ne sont rien sous Linux
    Par randriano dans le forum Linux
    Réponses: 12
    Dernier message: 23/09/2009, 13h23
  4. Réponses: 6
    Dernier message: 26/06/2006, 15h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo