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

  1. #1
    Nouveau Candidat au Club
    Macro qui marche, Bouton à cliquer qui y fait référence qui bugue
    Bonjour à tous,

    J'ai créé un contrat type sous Word, avec des signets en première page, pour les données que je dois adapter.
    J'ai ajouté des champs REF dans le corps du contrat faisant référence à ces signets.
    J'ai fait un enregistrement automatique de macro du QuickPart "Demander / Ask" pour renseigner mes signets.

    Si je lance la macro depuis l'onglet Développeur / Exécuter, ça marche.
    Si je crée un bouton à cliquer, vers cette macro, ça bugue.
    Je n'y comprends rien.
    J'ai joint le contrat.

    Pourriez-vous m'aider à relier un bouton à cliquer à mes macros Demander / Ask ?

    Je vous remercie grandement

  2. #2
    Expert éminent sénior
    Citation Envoyé par Cricriiii2A Voir le message

    Bonjour,

    Essayez le fichier joint.
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  3. #3
    Nouveau Candidat au Club
    Bonjour,

    Je lis dans le code des boutons :

    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
     
    Option Explicit
     
     
    Private Sub CommandButton1_Click()
            Maj_Champ
    End Sub
     
    Private Sub CommandButton2_Click()
            Enregistrer_PDF
    End Sub
     
    Private Sub CommandButton3_Click()
    ' Résidence
     
            MsgBox "Procédure Résidence absente !", vbCritical, "CommandButton3"
     
    End Sub


    Est-ce bien ce que vous aviez écrit pour le bouton 3 ? En ce cas, pourquoi une MsgBox ?

    Les deux premiers fonctionnent, le bouton exécute la bonne commande.

    Concernant le 3e, à titre indicatif car je ne sais plus si les macros sont enregistrées dans le .docm ou sur mon PC (j'ai oubert le Word d'un autre PC, il n'y avait pas toutes les macros), voici comment sont rédigées les macros Ask qui ne veulent pas marcher avec un bouton :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub Résidence()
        Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
            "ASK  Résidence_nom ""Résidence - Nom ?"" ", PreserveFormatting:=True
        Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
            "ASK  Résidence_adresse ""Résidence - Numéro et voie ?"" ", PreserveFormatting:= _
            True
        Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
            "ASK  Résidence_CP ""Résidence - Code postal ?"" ", PreserveFormatting:=True
        Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
            "ASK  Résidence_ville ""Résidence - Ville ?"" ", PreserveFormatting:= _
            True
    End Sub


    Cliquer sur le bouton (relié à la macro de la même façon que vous l'avez fait pour les deux autres macros) renvoie systématiquement une erreur 4605.

    Auriez-vous encore un peu de temps pour moi ?

    Merci

  4. #4
    Expert éminent sénior
    Citation Envoyé par Cricriiii2A Voir le message

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub CommandButton3_Click()
    ' Résidence
     
            MsgBox "Procédure Résidence absente !", vbCritical, "CommandButton3"
     
    End Sub

    Est-ce bien ce que vous aviez écrit pour le bouton 3 ? En ce cas, pourquoi une MsgBox ?
    Oui, car il n'existe aucune procédure Résidence. J'imagine qu'elle correspond à celle appelée Lot.
    Conseil : Ne pas utiliser des caractères signés dans le nom de vos procédures (ni de vos variables) : A la place de Résidence, écrivez plutôt Residence.

    Sinon, j'ai du mal à comprendre comment votre document fonctionne pour cette procédure justement. Pourquoi ne pas utiliser directement vos signets ?
    Avec des questions à répétition comme vous l'avez fait, je pense que vous allez vite irriter vos utilisateurs. Il vaudrait mieux utiliser un userform pour saisir toutes les informations en même temps puis utiliser un bouton pour lancer la mise à jour.
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  5. #5
    Nouveau Candidat au Club
    Re bonjour,

    "Oui, car il n'existe aucune procédure Résidence. J'imagine qu'elle correspond à celle appelée Lot. "
    ---> Oui, désolé, ce sont toutes les mêmes, cf. lot ou l'exemple posté dans mon message précédent. Savez-vous pourquoi le lien avec un bouton échoue ? Pouvez-vous essayer dans le premier exemple de lier un bouton à cliquer avec une macro qui fait référence à des champs ASK ? Il s'agit spécifiquement de ce lien qui me pose un problème. J'arrive à lier un bouton à cliquer aux autres macros (et votre exemple également).


    "Sinon, j'ai du mal à comprendre comment votre document fonctionne pour cette procédure justement. Pourquoi ne pas utiliser directement vos signets ?
    Avec des questions à répétition comme vous l'avez fait, je pense que vous allez vite irriter vos utilisateurs. Il vaudrait mieux utiliser un userform pour saisir toutes les informations en même temps puis utiliser un bouton pour lancer la mise à jour. "

    ---> Le contrat comporte des champs à remplacer à chaque fois, et des champs qui seront identiques très souvent. Les mêmes champs apparaissent à plusieurs endroits du document.
    Mon idée était de créer 4 ou 5 boutons différents (résidence / investisseur / conditions du bail / lot) de 3 ou quatre questions chacun, pour que l'utilisateur (dont moi) puisse choisir précisément le paragraphe qu'il désire modifier sans avoir à répondre aux questions qui ne doivent pas être modifiées puis, sans quitter la première page, cliquer sur un bouton pour enregistrer le PDF).


    Conseillez-vous malgré tout le même principe d'userform ?

    Je vous remercie

    Edit : j'ai regardé l'USERFORM, je ne me sens pas d'apprendre à faire du VBA maintenant, je manque de temps. Je sais travailler par comparaison, grâce à Google et grâce à l'enregistrement automatique, mais pas beaucoup plus.

  6. #6
    Expert éminent sénior
    Citation Envoyé par Cricriiii2A Voir le message

    Un exemple dans le fichier joint. Pour Olivier LEBEAU : Si tu me lis, j'utilise ta fonction RemplacerTexteSignet.
    Si la valeur d'un signet doit se répercuter à plusieurs endroits, utilisez des renvois.
    Pour compartimenter les différentes parties à modifier, le plus lisible est de créer un champ multipage dans le Userform.
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  7. #7
    Nouveau Candidat au Club
    Woaw, ça c'est super !

    Je devrais largement bien m'en sortir avec, pour créer de nouvelles catégories ! J'ai essayé, j'y arrive

    Pour compartimenter les différentes parties à modifier, le plus lisible est de créer un champ multipage dans le Userform. Kézako ?

    En tous cas, merci infiniment

    Je mettrai ce thread résolu bientôt

  8. #8
    Expert éminent sénior
    Citation Envoyé par Cricriiii2A Voir le message

    Pour compartimenter les différentes parties à modifier, le plus lisible est de créer un champ multipage dans le Userform. Kézako ?
    Ce serait d'avoir une présentation comme ça :


    Les parties 2 à 5 sont équivalentes à Résidence. Vous pourriez valider vos données partie par partie.
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  9. #9
    Nouveau Candidat au Club
    Bonjour,

    Merci pour votre aide jusqu'à maintenant,

    Mon Userform est en chantier, mais, je suis cependant face à un problème insoluble :

    J'ai repris votre exemple et l'ai extrapolé à tous mes signets, et chaque macro via Macro / Exécuter fonctionne, mais !

    Les boutons de mon UserForm qui redirigent vers des macros qui utilisent le code d'Olivier Lebeau ne fonctionnent pas (seuls Retour et Imprimer_PDF fonctionnent).

    J'ai joint une vidéo, si cela peut aider.... Je précise que j'ai bien évidemment laissé le code d'Olivier Lebeau, à la virgule près.

    Je vous remercie, s'il vous reste encore quelques minutes pour moi !


  10. #10
    Expert éminent sénior
    Citation Envoyé par Cricriiii2A Voir le message

    Bonjour,

    J'ai du mal à me rendre compte. Avez-vous la possibilité de mettre votre modèle en ligne ?
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  11. #11
    Nouveau Candidat au Club
    Merci pour votre réactivité,

    Voici le fichier

  12. #12
    Expert éminent sénior
    Citation Envoyé par Cricriiii2A Voir le message

    Ce sont les noms que vous donnez à vos frames qui coincent. Ils portent le même nom que les procédures. Je les ai rebaptisé en mettant Frame devant.

    J'ai également rebaptisé le Userform au cas où ce nom serait un mot réservé.

    Par ailleurs, paramétrez votre VBA pour rendre obligatoire la déclaration des variables et utilisez la commande Debogage.



    Dans la procédure maj_champs, vous avez deux fois End Sub. Indentez vos lignes de code pour le rendre plus lisible : Cf mon code maj_champs dans ma première réponse.


    Question qui tue : Pourquoi êtes-vous obligée de tout ressaisir ? J'imagine que toutes ces données sont déjà dans une base de données ou je me trompe.
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  13. #13
    Nouveau Candidat au Club
    Ah ! Je vous remercie ! J'ai essayé rapidement, et ça marche ! Je vais tâcher de tout réintégrer dans mon fichier !
    Et puis me pencher sur vos autres idées.

    Pour vous répondre quant à la base de données :

    Oui pour certaines données, mais 1/ je suis trop débutant en VBA, 2/ les données ne sont pas toujours bien renseignées d'un point de vue qualitatif (pas d'accents par exemple), 3/ la base ne contient pas toutes les informations (beaucoup de documents scannés à consulter), 4/ les données sont parfois obsolètes.

    Ce qui, malgré tout, serait améliorable avec une fonction :

    - Une ligne dans le code d'Olivier Lebeau qui ne mette à jour que les signets renseignés, sans toucher à ceux laissés vide, pour par exemple changer de n° de lot et de surface sans renseigner étage et loyer, identiques et déjà renseignés pour le lot précédent, etc.


    (Ce n'est pas une demande, vous m'avez déjà aidé énormément !)

    Je teste vos nouvelles propositions et vous dis si je coince !

  14. #14
    Expert éminent sénior
    Citation Envoyé par Cricriiii2A Voir le message

    Oui pour certaines données, mais 1/ je suis trop débutant en VBA, 2/ les données ne sont pas toujours bien renseignées d'un point de vue qualitatif (pas d'accents par exemple), 3/ la base ne contient pas toutes les informations (beaucoup de documents scannés à consulter), 4/ les données sont parfois obsolètes.
    Je pense que je serais parti de la base de données pour alimenter la boite de dialogue. Cela vous aurait permis de faire d'une pierre deux coups : 1 : fiabiliser la base de données, 2 : éditer vos documents.

    - Une ligne dans le code d'Olivier Lebeau qui ne mette à jour que les signets renseignés, sans toucher à ceux laissés vide, pour par exemple changer de n° de lot et de surface sans renseigner étage et loyer, identiques et déjà renseignés pour le lot précédent, etc.
    Il suffit de charger les TextBox avec le contenu des signets qui peuvent être réutilisés à l'ouverture du userform.
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  15. #15
    Nouveau Candidat au Club
    J'ai tout fait ! Tout fonctionne ! Merci !!!

    Enfin, quand je dis "tout" fait, j'entends adapter tout ce que vous avez fait pour moi !

    Une dernière chose m'échappe ! Que rajouter à ma macro enregistrer PDF pour que l'enregistrement soit automatique avec "Bail" + signet "nom investisseur" + signet "numéro de lot" + date du jour (jj-mm-aaaa) ? Idéalement, que l'enregistrement se fasse dans le répertoire de travail ?

    Après ça, promis, je ne vous embête plus

  16. #16
    Expert éminent sénior
    Citation Envoyé par Cricriiii2A Voir le message

    Bonjour,

    Pour le répertoire de travail
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    ActiveDocument.Path


    Pour le nom, il vous suffit de concaténer la valeur des différents signets en récupérant leur Range.Text.
    Pour la date, voir la commande Format dans l'aide en ligne.

    Pour vous assurer que votre nom de fichier est valide, regardez cette discussion : sauvegarde-pdf-partir-d-texte.
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter