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

VBScript Discussion :

Modifier combobox dans Word par vbscript


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Bragu Demon
    Homme Profil pro
    Intégrateur d'Explopitation
    Inscrit en
    Juin 2013
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Intégrateur d'Explopitation
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2013
    Messages : 125
    Par défaut Modifier combobox dans Word par vbscript
    Bonjour,

    Pour faire des corrections en masse (49000 fichiers word) je dois modifier la valeur de certaines combobox.
    Je vais devoir aussi aller modifier d'autres éléments contenus dans des tableau de chaque fichier, d'où mon array
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'alerte = wdoc.Tables(4).Cell(3, 2).Range.text
    tabcell = Array("alerte")
    La liste des fichiers à ouvrir et des éléments pour les corriger sont dans un csv auquel j'accède par mon Split(fCsv.ReadLine, ";")

    Voici le bout de code :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
     
    cbox = Array("PERIODICITE", "REPRISE_J", "REPRISE_S", "CRITICITE", "Urgence", "Topage")
     
    'alerte = wdoc.Tables(4).Cell(3, 2).Range.text
    tabcell = Array("alerte")
     
     
     
     
    ' Conversion des variables en long pour éviter les dépassements de capacité
    ' Plus d'info :
    ' http://www.lesite.net/contents/1189-vbscript-types-de-donnees
    Debut=Clng(Debut)
    Fin=Clng(Fin)
    Tps=Clng(Tps)
    Duree=Clng(Duree)
     
    ' Affichage du type de données, 3 = long
    'Wscript.echo VarType(Debut) & " " & VarType(Fin) & " " & VarType(Tps) & " " & VarType(Duree)
     
    ' Oui = 6 / Non = 7
    popup_btn = Sh.Popup ("Début du script " & WScript.ScriptName, , "", 4)
    '(strText,[nSecondsToWait],[strTitle],[nType])
    if popup_btn = 7 Then Call fin_script
     
     
    ' Récupération de l'heure courante et transformation en seconde
    debut = (Left(Time,2) * 3600) + (Mid(Time,4,2) * 60) + (Right(Time,2))
    cpt = 0
     
    Set fCsv = fso.OpenTextFile( dir_in & "\" & fic_in, 1)
     
    ligne_fic_in = fCsv.ReadLine ' Permet de sauter la première ligne qui est un entête
     
    fcr_prec = ""
     
    ' Lecture du fichier fic_in ligne à ligne
    While Not fCsv.AtEndOfStream
     
      if cpt = 1 then call fin_script
     
      tb = Split(fCsv.ReadLine, ";") ' Création d'un tableau par ligne
      fcr_lue = tb(0) ' Récupération de la FCR à traiter
      edition = tb(1) ' Récupération de l'édition qui contient la FCR
     
      Wscript.echo "fcr_lue    : " & fcr_lue & vbcrlf & _
                   "fcr_prec : " & fcr_prec
      wdo.visible = False
      Set wdocs = wdo.Documents
      Set wdoc = wdocs.Open(repertoire & "\" & edition & "\" & fcr_lue) 'Ouverture
     
      ' Récupération du champ correspondant à l'alerte '
      ' A sanitiser. '
      'Wscript.Echo wdoc.Tables(4).Cell(3, 2).Range.text
     
     
      '-------------------------------------------------'
              'Du code pour faire les correction'
      ' Détection du type de zone à modifier : combobox/cellule d'un tableau
      Wscript.echo tb(4) & "-> " & tb(5)
     
      ' Rennomage pour correspondre au contenu de la FCR '
      IF tb(4) = "PERIODICITE" OR tb(4) = "REPRISE_J" OR tb(4) = "REPRISE_S" Then rub = tb(4)
      If tb(4) = "impact" Then rub = "CRITICITE" 
      If tb(4) = "urgence" Then rub = "Urgence"
      If tb(4) = "Toppage CR" Then rub = "TOPAGE"
      IF tb(4) = "" Then rub = ""
     
      If IsInArray(rub, cbox)  Then
        Wscript.Echo wdoc. & rub & .text
        'wdoc.rub.text = tb(5)
     
     
     
     
      else
        WScript.Echo "No"
     
     
     
     
     
      End If
     
      '-------------------------------------------------'
     
     
     
        cpt = cpt + 1
        ' Test de rupture dernière
        If fcr_prec = fcr_lue Then
          ' Même FCR on poursuit les corrections sans fermer le fichier
        Wscript.echo "Les FCRs sont identiques, on ne ferme pas le fichier"
     
        Else 
          ' FCR différente on ferme le fichier en l'enregistrant dans un dossier 
          ' et on passe à la FCR suivante'
          Wscript.echo "Les FCRs sont différentes, on peu fermer le fichier"
     
          'wdo.Run "lecture_fcr_chargement_MAESCOT",fic_out_central,fic_out_open,fic_out_reseau,Edition
          wdoc.Close(0) 'fermeture  FCR ouverte précédemment sans sauvegarder
     
        End IF
     
      fcr_prec = fcr_lue  ' Stocke le nom de la FCR qui vient d'être traitée pour la gestion de la rupture dernière
     
      Wend
     
      Wscript.echo "Lignes lues : " & cpt
     
      Call fin_script
     
     
    ' ****************************************************************************** '
    ''
    ''                       Fin du script, début des sous routines
    ''
    ' ****************************************************************************** '
     
    ' Sous routine pour gérer la fin du script 
    ' (le vbs ne gère les Goto que pour les erreurs)
    Sub fin_script()
     
    WScript.Echo "Fin du script " & WScript.ScriptName & vbcrlf & _ 
                 cpt & " objets traités "'en " & duree & " (HH:MM:SS)"
     
    WScript.Quit
    end sub
     
    Function IsInArray(strIn, arrCheck)
        'IsInArray: Checks for a value inside an array
        'Author: Justin Doles - www.DigitalDeviation.com
        Dim bFlag : bFlag = False
     
        If IsArray(arrCheck) AND Not IsNull(strIn) Then
            Dim i
            For i = 0 to UBound(arrCheck)
                If LCase(arrcheck(i)) = LCase(strIn) Then
                    bFlag = True
                    Exit For
                End If
            Next
        End If
        IsInArray = bFlag
    End Function
    C'est cette portion qui me pose problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      If IsInArray(rub, cbox)  Then
        Wscript.Echo wdoc. & rub & .text
        'wdoc.rub.text = tb(5)
    rub une variable qui représente le nom de la rubrique à modifier, il s'agit de combobox (Contrôle ActiveX)
    Je n'arrive pas à afficher son contenu comme je l'ai écrit en variabilisant le nom.
    Si je remplace rub par sa valeur (Wscript.Echo wdoc.Urgence.text), là ça marche, mais je souhaiterai éviter de repasser par un test des nom de chaque combobox.

    C'est amplement imparfait car en cour de dev, mais bon, là je bloque.


    Merci pour vos suggestions

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Juin 2012
    Messages
    877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 877
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If IsInArray(rub, cbox)  Then
        Wscript.Echo wdoc. & rub & .text 'ICI
        'wdoc.rub.text = tb(5)
    Si votre Echo fonctionne, vous devez faire la même opération pour affecter la valeur.

    rub est une variable avec une value.
    Lorsque vous écrivez wdoc. & rub & .text, vous utilisez la valeur de la variable rub.

    Dans , rub est considéré comme du texte.

    Essayez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wdoc. & rub & .text = tb(5)

  3. #3
    Membre confirmé Avatar de Bragu Demon
    Homme Profil pro
    Intégrateur d'Explopitation
    Inscrit en
    Juin 2013
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Intégrateur d'Explopitation
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2013
    Messages : 125
    Par défaut
    Le echo ne fonctionne pas, j'ai une erreur à la compilation :
    Erreur :Identificateur attendu
    Code : 800A03F2

    Le & ne lui plait pas, la ligne ne semble du coup pas correcte ...

    Je continue de creuser ...


  4. #4
    Membre confirmé Avatar de Bragu Demon
    Homme Profil pro
    Intégrateur d'Explopitation
    Inscrit en
    Juin 2013
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Intégrateur d'Explopitation
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2013
    Messages : 125
    Par défaut
    Bon,

    Je m'étais un peu mélangé les pinceaux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Wscript.Echo wdo.ActiveDocument.Topage.Value
    Me renvoie "NON" et c'est ce qui est attendu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Wscript.Echo wdo.ActiveDocument.rub.Value
    Me renvoie lorsque qu'il est supposé m'afficher "NON" :
    Cet objet ne gère pas cette propriété ou cette méthode: 'ActiveDocument.rub' en m'indiquant le Wscript.Echo


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Wscript.Echo wdo.ActiveDocument. & rub & .Value
    Me renvoie dès la compil du script :
    Identificateur attendu en m'indiquant le premier &

    La question étant de faire passer le contenu de ma variable rub (Topage) dans l'instruction Wscript.Echo wdo.ActiveDocument/l'écriture magique/Value

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Juin 2012
    Messages
    877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 877
    Par défaut
    Bonjour,

    Essayez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Wscript.Echo wdo.ActiveDocument & "." & rub & "." & Value

  6. #6
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 130
    Par défaut
    Salut
    Je ne connais pas la manipulation de Word, mais
    rub une variable qui représente le nom de la rubrique à modifier
    .............
    Cet objet ne gère pas cette propriété ou cette méthode: 'ActiveDocument.rub'
    rub n'est il pas a considérer comme un objet ?
    Si oui, ne faudrait il pas utiliser Set.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      If tb(4) = "PERIODICITE" Or tb(4) = "REPRISE_J" Or tb(4) = "REPRISE_S" Then Set rub = wdo.ActiveDocument.[tb(4)]
      If tb(4) = "impact" Then Set rub = wdo.ActiveDocument.["CRITICITE"]
      If tb(4) = "urgence" Then Set rub = wdo.ActiveDocument.["Urgence"]
      If tb(4) = "Toppage CR" Then Set rub = wdo.ActiveDocument.["TOPAGE"]
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

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

Discussions similaires

  1. [XL-2010] Tableaux Excel colle dans Word par VBa
    Par houstono92 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/07/2014, 12h19
  2. Remplacer texte dans Word par Textbox avec scrollbar
    Par 31400 dans le forum VBA Word
    Réponses: 0
    Dernier message: 06/09/2011, 14h06
  3. Modifier images dans feuilXl par clic de souris (Excel2003)
    Par Jacdan dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/10/2008, 23h16
  4. impossible de modifier texte dans word
    Par Picotin dans le forum Word
    Réponses: 1
    Dernier message: 08/05/2008, 18h10

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