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 :

Croix si double-clic


Sujet :

VBA Word

  1. #1
    Candidat au Club
    Croix si double-clic
    Bonjour,

    J'ai fait un tableau sous word. Je souhaite, sans passer par les cases formulaire, qu'une croix ("x" majuscule) s'écrive au double-clic, et s'efface en cas de nouveau double-clic. Est-ce possible ?

    En cherchant, j'ai trouvé une macro qui fonctionne sous Excel, mais pas sous word :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
          If Not Intersect(Range("C7:F111"), Target) Is Nothing Then
            If UCase(Target) = "X" Then Target = "" Else Target = "X"
            Cancel = True
          End If
        End Sub


    D'avance merci pour vos lumières,
    Bien cordialement,
    GD

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

    Bonjour,

    Il vous faut passer par un module de classe pour disposer de l'événement DoubleClic.

    Soit un module de classe baptisé MajTableau :
    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
     
    Option Explicit
     
    Public WithEvents oApp As Application
    Public WithEvents MyDoc As Document
     
     
     
    Private Sub oApp_WindowBeforeDoubleClick(ByVal Sel As Selection, Cancel As Boolean)
     
        If DocEnCours = MyDoc Then
     
                With oApp
                     Call MettreUneCroix
                End With
                Cancel = False
        End If
     
    End Sub


    Dans un module standard :
    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
     
    Public DocEnCours As Document
     
     
    Sub MettreUneCroix()
     
        With Selection
             .Expand unit:=wdLine
             If InStr(1, Selection.Range, "X", vbTextCompare) > 0 Then
                .Range.Text = ""
             Else
                .Range.Text = "X"
             End If
        End With
     
    End Sub


    Dans le module ThisDocument :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Option Explicit
     
    Dim oAppClass As New MajTableau
     
     
    Private Sub Document_Open()
     
        Set oAppClass.oApp = Application
        Set oAppClass.MyDoc = ThisDocument
     
        Set DocEnCours = ThisDocument
     
    End Sub
    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
    Candidat au Club
    Merci pour cette réponse rapide
    Bonjour,

    Merci pour ces trois options. Néanmoins, j'ai essayé d'intégrer le code dans visual basics, mais je ne dois pas m'y prendre correctement. Pourriez-vous m'aiguiller ? Je ne suis pas expérimenté en la matière.

    Merci.

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

    Ce ne sont pas des options. Voir 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

  5. #5
    Candidat au Club
    Formidable !
    Merci beaucoup ! Cela fonctionne parfaitement. Comment puis-je l'exporter dans un document spécifique, ou dans l'ensemble de mes documents ?

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

    Il faut reproduire le module de classe et le module standard dans vos tous vos documents et mettre à jour vos modules ThisDocument.
    Si le VBA est inconnu pour vous, il vous faut étudier les tutos VBA Word : https://word.developpez.com/cours/
    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
    Expert éminent sénior
    Précision sur l'emplacement du module de classe.
    Citation Envoyé par delboe Voir le message

    Si ce double-clic ne doit fonctionner que sur votre poste de travail, il suffirait de placer tout ce code dans le fichier Normal.dotm présent dans votre répertoire des modèles, normalement à cet emplacement : C:\Users\Votre_User\AppData\Roaming\Microsoft\Templates.

    Cependant :
    • Il est peut être inapproprié de généraliser un évènement qui relève seulement du contexte de votre document.
    • Si vos fichiers sont exportés sur d'autres postes, cet événement n'existera pas.
    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

  8. #8
    Candidat au Club
    Merci à vous
    Merci, je comprends bien. Néanmoins, si je souhaite intégrer à ce fichier, et le proposer à des collègues, il faut que je comprenne quelles sont les démarches à faire dans le VBA pour y arriver. Je vais essayé et reviendrai ici pour expliquer ce que j'ai fait, si d'aventure cela peut servir à d'autres que moi.

  9. #9
    Expert éminent sénior
    Citation Envoyé par delboe Voir le message

    Le plus simple est d'exporter vos codes (hormis ThisDocument). Il vous suffira ensuite de les réimporter dans les autres fichiers.

    Si ce nombre de fichiers est important, il faudrait étudier l'ajout de ces modules par macro. Voir pour cela, le tuto de silkyroad : https://silkyroad.developpez.com/VBA/VisualBasicEditor/
    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

###raw>template_hook.ano_emploi###