On s'est bien compris alors.
Je teste
Alors je ne sais pas du tout faire cela.
Là j'ai un petit souci avec ton code, Mes champs i de Word remplissent mes cellules ligne par ligne dans Excel (ligne,j).
Le problème est que dans mon précédent code, i était toujours égal à j et je n'ai pas différencié les 2, excel remplissait toutes les cellules (ligne,i) avec tous les champs de word i.
La il faudrait que je passe à remplir avec les champs Word de 1 à 130 sauf 4 à 6 chaque cellule de (ligne,j) de 1 à 127.
Si je suis clair dans mes propos
Dans les faits, je me retrouve avec un code comme suit:
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 For i = 1 To 127 Select Case i Case 1 To 3, 7 To 127 Cells(ligne, i) = FichierWord.ActiveDocument.FormFields(i).Result If i >= 8 Then If Not IsNumeric(Cells(ligne, i).Value) Or Cells(ligne, i).Value = "" Then Cells(ligne, i).Value = Cells(ligne, i).Value Else Cells(ligne, i).Value = CDbl(Cells(ligne, i).Value) End If Else End If Next i Case Else ' Suite du code End Select
et Excel me répond constamment Next sans For
Leme sert à corriger quelque chose qui n'a rien à voir et concernerait plutôt "j" dans le cas présent
Code : Sélectionner tout - Visualiser dans une fenêtre à part IfIsNumeric
Même avec seulement:
J'ai "Next sans For"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 For i = 1 To 127 Select Case i Case 1 To 3, 7 To 127 Cells(ligne, i) = FichierWord.ActiveDocument.FormFields(i).Result Next i
J'ai réglé ça.
$J'obtiens bien le décalage auquel je pensait, les colonnes correspondants à 4; 5; 6 sont vides et tout est décalé sur la droite.
Mais je sens qu'on est pas loin
J'essaie ça:
Et rien ne se rempli
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 For i = 1 To 127 Select Case i Case 1 To 3, 7 To 127 For j = 1 To j = 127 Cells(ligne, j) = FichierWord.ActiveDocument.FormFields(i).Result Next j Case Else ' Suite du code End Select Next i
En admettant que les deux premières colonnes correspondent aux coordonnées ligne, colonne de vos cellules à mettre à jour, vous pourriez vous baser sur la colonne E pour mettre à jour vos cellules.
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 Sub CreerUneTableDeCorrespondance(ByVal CheminComplet As String) Dim ShTable As Worksheet Dim I As Long Dim AppWord As Word.Application Dim DocWord As Word.Document Set ShTable = Sheets.Add Set AppWord = CreateObject("word.application") With AppWord .Visible = True Set DocWord = .Documents.Open(Filename:=CheminComplet, ReadOnly:=True) For I = 1 To DocWord.FormFields.Count With ShTable .Cells(I + 1, 3) = DocWord.FormFields(I).Name .Cells(I + 1, 4) = DocWord.FormFields(I).Range.Text .Cells(I + 1, 5) = I End With Next I DocWord.Close savechanges:=False .Quit End With Set AppWord = Nothing Set ShTable = Nothing End Sub Sub TestCreerUneTableDeCorrespondance() CreerUneTableDeCorrespondance "C:\.....\XXXXX.docm" à adapter. End Sub
Il est complètement impossible de tourner mes i et j?
Le fichier excel est déjà en place et il est très lourd....
Je vais travailler ton nouveau code pour l'année prochaine
Et bien d'autres encore, c'est une base et des calculs
Pour une mise à jour à partir d'un seul fichier
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 Sub MettreAJourUneLigne() Dim ShFiche As Worksheet Dim I As Long, NouvelleLigne As Long Dim CheminComplet As String Dim AppWord As Object 'Word.Application Dim DocWord As Object 'Word.Document Set ShFiche = Sheets("RECUP") With ShFiche NouvelleLigne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 End With Set AppWord = CreateObject("word.application") With AppWord .Visible = True CheminComplet = "C:\...\XXXXXXX.docm" ' A adapter Set DocWord = .Documents.Open(Filename:=CheminComplet, ReadOnly:=True) With ShFiche For I = 1 To 130 Select Case I Case 1 To 3 .Cells(NouvelleLigne, I) = DocWord.FormFields(I).Range.Text Case 7 To 130 .Cells(NouvelleLigne, I) = DocWord.FormFields(I - 3).Range.Text End Select Next I End With DocWord.Close savechanges:=False Set DocWord = Nothing .Quit End With Set AppWord = Nothing Set ShFiche = Nothing End Sub
Avec:
PARFAIT!!!!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 For I = 1 To 130 Select Case I Case 1 To 3 .Cells(NouvelleLigne, I) = DocWord.FormFields(I).Range.Text Case 7 To 130 .Cells(NouvelleLigne, I - 3) = DocWord.FormFields(I ).Range.Text End Select
J'ai juste encore un problème qui perdure.
Les valeurs dans les champs, bien que numérique dans word, ne remonte pas de façon numérique dans Excel, j'utilise donc un code pour les "numériser" pour pouvoir procéder à mes calculs or, cela ne fonctionne plus, la conversion ne se fait plus et mes cellules restent remplies avec de chiffres stockés au format texte.
D'où vient la chose?
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 For i = 1 To 127 Select Case i Case 1 To 3 Cells(ligne, i) = FichierWord.ActiveDocument.FormFields(i).Result Case 7 To 130 Cells(ligne, i - 3) = FichierWord.ActiveDocument.FormFields(i).Result Case 7 To 130 Cells(ligne, i - 3) = FichierWord.ActiveDocument.FormFields(i).Result If i >= 8 Then If IsNumeric(Cells(ligne, i).Value) Or Cells(ligne, i).Value = "" Then Cells(ligne, i).Value = Cells(ligne, i).Value Else Cells(ligne, i).Value = CDbl(Cells(ligne, i).Value) End If Else End If End Select Next i
Case 7 To 130 est répété, cela n'est pas possible.
Sinon, ce serait mieux avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Case 1 To 3 Cells(ligne, i) = FichierWord.ActiveDocument.FormFields(i).Result Case 7 Cells(ligne, i - 3) = FichierWord.ActiveDocument.FormFields(i).Result Case 8 To 130 Cells(ligne, i - 3) = cdbl(FichierWord.ActiveDocument.FormFields(i).Result)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager