Tu as fais une erreur de frappe ...
Rajoute la ligne "Obligatoire"
en haut de toutes tes pages de code ... ainsi tu verras ton erreur ;)Code:
1
2 Option Explicit
Version imprimable
Tu as fais une erreur de frappe ...
Rajoute la ligne "Obligatoire"
en haut de toutes tes pages de code ... ainsi tu verras ton erreur ;)Code:
1
2 Option Explicit
Merci beaucoup. Je n'y serais jamais arrivé tout seul.
Il ne me reste plus qu'un petit détail à régler, mais je pense pouvoir y arriver.
Encore mille mercis à vous deux. :ccool:
Je reviens vers vous car je n'arrive pas à résoudre mon problème.
Le première partie du code fonctionne bien. Mais la 2ème partie me cause des soucis.
Une fois les données rapatriées dans chacun des fichiers, celui qui n'était pas ouvert doit être refermé et seul le fichier qui était actif doit rester ouvert, ça je n'arrive pas à le faire et sur lequel je dois appliquer le code suivant.
Les données sont insérées dans la feuille "Vire" du fichier actif et la feuille est imprimée.
Comment savoir si c'est wbk qui est ouvert ou wbka ?
Code:
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 'on rapatrie les données dans la feuille "Vire" du fichier d'origine de la demande Load UFVir With ?????? Sheets("Vire").Visible = True With ThisWorkbook.Sheets("Vire") .Range("B13").Value = Me.CmbNum1.Value .Range("B23").Value = Me.CmbNum2.Value .Range("F30").Value = Me.TxtMontant.Value .Range("B44").Value = Me.TxtDate .Range("B44").Value = Format(Me.TxtDate, "mm-dd-yyyy") End With Set Wbk = Nothing Set Wbka = Nothing Unload UFVir End With Set montab = Sheets("Vire") Sheets("Vire").PageSetup.PrintArea = "$A$1:$G$45" Sheets("Vire").Visible = True Sheets("Vire").PrintOut Copies:=1 Sheets("Vire").Activate Application.ScreenUpdating = True End Sub
Tu peu rajouter un "flag" à la fonction d'ouverture fichier en passant en paramètre la variable bDejaOuvert ..
et pour l'appelCode:
1
2
3
4
5
6 Function wkOuvreEngage(stFic As String, ByRef bDeJaOuvert as boolean ) As Workbook Const REP = "K:\Suivi_Engage_2013\" Dim wk As Workbook ' Contrôle si fichier ouvert (...)
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 (...) Dim Wbk As Workbook Dim bDejaOuvert1 as boolean Dim Wbka As Workbook Dim bDejaOuvert2 as boolean (...) set wbk = wkOuvreEngage (NumLig,bDejaOuvert1 ) set wbka = wkOuvreEngage (NumLig2b,DejaOuvert2 ) (....) if bDejaOuvert1 Then 'Cas ou fichier 1 déja ouvert (...) else 'Cas ou le fichier 1 n'était pas ouvert on le ferme wbk.close false (..) endif (...)
Juste une simple question : Le fichier déjà ouvert peut être wbk ou wbka donc soit bDeJaOuvert1 ou bDeJaOuvert2, est-ce que cela à une importance ?
Bonjour,
J'ai donc fais cela mais je rencontre un problème. Le fichier qui est fermé ne se rempli pas, seul le fichier ouvert est modifié.
Où ai-je fais une erreur ?
Code:
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 Sub TestB() Dim LastLigF As Long Dim NumLig As String, NumLig2 As String Dim Wbk As Workbook Dim bDejaOuvert1 As Boolean Dim Wbka As Workbook Dim bDejaOuvert2 As Boolean Application.ScreenUpdating = False NumLig = Me.CmbNum1.Value NumLig2 = Me.CmbNum2.Value Set Wbk = wkOuvreEngage(NumLig, bDejaOuvert1) Set Wbka = wkOuvreEngage(NumLig2, bDejaOuvert2) 'on ouvre les 2 fichiers simultanément afin que la saisie se fasse en même temps If bDejaOuvert1 Then With Wbk.Sheets("Recap") LastLigF = .Range("P10").End(xlDown).Row + 1 .Range("P" & LastLigF).Value = LastLigF - 7 .Range("P" & LastLigF).Value = Me.CmbNum1.Value .Range("Q" & LastLigF).Value = Me.CmbNum2.Value .Range("R" & LastLigF).Value = Me.TxtMontant.Value .Range("T" & LastLigF).Value = Me.TxtDate.Value .Range("T" & LastLigF).Value = Format(Me.TxtDate, "mm-dd-yyyy") End With With Wbka.Sheets("Recap") LastLigF = .Range("P10").End(xlDown).Row + 1 .Range("P" & LastLigF).Value = LastLigF - 7 .Range("Q" & LastLigF).Value = Me.CmbNum2.Value .Range("P" & LastLigF).Value = Me.CmbNum1.Value .Range("S" & LastLigF).Value = Me.TxtMontant.Value .Range("T" & LastLigF).Value = Me.TxtDate.Value .Range("T" & LastLigF).Value = Format(Me.TxtDate, "mm-dd-yyyy") End With Else Wbk.Close False End If
bonjour ,
si tu dois modifier les 2 fichiers, ne conditionne pas tes modifications avec bDejaOuvert1 ..
il faut aussi sauver ton résultat pour les deux fichiers :
en conditionnant cette sauvegarde grâce aux variablesCode:Wbka.close true
bDejaOuvert1 et bDeJaOuvert2 ...
Je suis désolé, je n'y arrive absolument pas, je suis complètement perdu.
J'ai essayé plusieurs façons mais sans succès.
Voici mon code complet, j'ai enlevé ce qui ne fonctionne pas.
Pouvez-vous m'aider à le termimer s'il vous plait ?
Donc le fichier actif doit rester ouvert, celui qui est appelé doit rester fermé après les modifications et la feuille "Vire" du fichier actif doit être imprimée.
Code:
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 Sub TestB() Dim LastLigF As Long Dim NumLig As String, NumLig2 As String Dim Wbk As Workbook Dim bDejaOuvert1 As Boolean Dim Wbka As Workbook Dim bDejaOuvert2 As Boolean Application.ScreenUpdating = False NumLig = Me.CmbNum1.Value NumLig2 = Me.CmbNum2.Value Set Wbk = wkOuvreEngage(NumLig, bDejaOuvert1) Set Wbka = wkOuvreEngage(NumLig2, bDejaOuvert2) 'on ouvre les 2 fichiers simultanément afin que la saisie se fasse en même temps - Le fichier actif peut être Wbk ou Wbka - donc soit NumLig ou NumLig2 With Wbk.Sheets("Recap") 'Soit le fichier actif, soit le fichier appelé LastLigF = .Range("P10").End(xlDown).Row + 1 .Range("P" & LastLigF).Value = LastLigF - 7 .Range("P" & LastLigF).Value = Me.CmbNum1.Value .Range("Q" & LastLigF).Value = Me.CmbNum2.Value .Range("R" & LastLigF).Value = Me.TxtMontant.Value .Range("T" & LastLigF).Value = Me.TxtDate.Value .Range("T" & LastLigF).Value = Format(Me.TxtDate, "mm-dd-yyyy") End With With Wbka.Sheets("Recap") 'soit le fichier actif, soit le fichier appelé LastLigF = .Range("P10").End(xlDown).Row + 1 .Range("P" & LastLigF).Value = LastLigF - 7 .Range("Q" & LastLigF).Value = Me.CmbNum2.Value .Range("P" & LastLigF).Value = Me.CmbNum1.Value .Range("S" & LastLigF).Value = Me.TxtMontant.Value .Range("T" & LastLigF).Value = Me.TxtDate.Value .Range("T" & LastLigF).Value = Format(Me.TxtDate, "mm-dd-yyyy") End With Load UFVir Sheets("Vire").Visible = True 'on active la feuille "Vire" du fichier qui reste ouvert With ThisWorkbook.Sheets("Vire") .Range("B13").Value = Me.CmbNum1.Value .Range("B23").Value = Me.CmbNum2.Value .Range("F30").Value = Me.TxtMontant.Value .Range("B44").Value = Me.TxtDate .Range("B44").Value = Format(Me.TxtDate, "mm-dd-yyyy") Set montab = Sheets("Vire") 'on imprime la feuille "Vire" Sheets("Vire").PageSetup.PrintArea = "$A$1:$G$45" Sheets("Vire").Visible = True Sheets("Vire").PrintOut Copies:=1 Sheets("Vire").Activate End With Set Wbk = Nothing Set Wbka = Nothing Unload UFVir Application.ScreenUpdating = True End Sub
après ton code de modification
et tu répète ce code pour ton 2° fichier avec les variables bDejaOuvert2 et WbkaCode:
1
2
3
4
5
6
7
8 IF bDejaOuvert1 then ' --- Actions pour le cas ou déjà ouvert (sauvegarde? impression ..? ELSE Wbk.Close true 'Ferme en sauvant End if
Merci beaucoup, ça marche beaucoup mieux.
Encore mille mercis :ccool:
Amicalement
René