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