Bonjour,
Après quelques heures de galère, je me résigne à faire appel à la communauté des développeurs
En effet, je rencontre le problème suivant :
J'ai un classeur avec un userform qui permet d'alimenter une feuille de ce dit classeur en données. Ces données sont ensuite copiées dans un autre classeur que je créé afin de garder mon classeur source vierge, comme modèle.
Le classeur qui contient donc le modèle rempli est donc sauvegardé dans un répertoire.
Là où cela se complique, c'est que dans certains cas, je souhaite ajouter une deuxième feuille, cette feuille provient d'un autre fichier que j'ouvre avec la procédure "getopenfilename".
Et là problème, je ne parviens plus a enregistrer mon fichier.
Je pense que le problème vient des "activeworkbook" ou autre déclarations dan ce genre.
Autre remarque : si je démarre mon userform, que je fais une fois la démarche avec une seule feuille, cela fonctionne ok.
Puis je le fais avec deux feuilles, cela fonctionne.
Mais si je démarre le userform et que j'insère la deuxième feuille lors de la première démarche, ça plante. Etrange, c'est comme si un chemin ne se faisait pas.
Un aperçu des codes :
Voilà la démarche pour Ajouter la deuxième feuille
Nota : cette démarche à lieu avant la procédure pour Enregistrer
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 Private Sub opendim_Click() 'on insere un rapport dimensionnel dans une nouvelle feuille du dossier de non conformité On Error GoTo Fin Dim rapportdim As Variant rapportdim = "" rapportdim = Application.GetOpenFilename("Fichier excel(*.xls;*.xlsx;*.xlsm),*.xls;*.xlsx;*.xlsm", Title:="Insertion Rapport Dimensionnel", MultiSelect:=False) If rapportdim <> False Then Workbooks.Open (rapportdim) Worksheets(1).Copy After:=Workbooks("DeclarationNC_V2.xlsm").Sheets("ficheNC") End If 'on ferme le classeur qui a fourni le rapport dimensionnel Dim Wbk As Workbook Dim AWb As String AWb = ThisWorkbook.Name For Each Wbk In Workbooks If Wbk.Name <> AWb Then Wbk.Close False End If Next Wbk Workbooks("DeclarationNC_V2.xlsm").Activate 'on renomme la feuille pour signifier la présence d'un rapport dimensionnel ActiveWorkbook.Sheets(2).Name = "RapDim" ActiveWorkbook.Sheets("ficheNC").Select canceldim.Locked = False opendim.Locked = True Fin: End Sub
Ceci est une petite partie de la procédure globale qui se déroule lorsque j'enregistre mon document.
Et dans laquelle j'appelle la procédure Enregistrer que je joint ci dessous.
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 If ExisteFichier(Chemin & ThisWorkbook.Sheets("ficheNC").Range("B5") & "-" & ThisWorkbook.Sheets("ficheNC").Range("D3") & "-" & ThisWorkbook.Sheets("ficheNC").Range("D2") & "-" & Left(ThisWorkbook.Sheets("ficheNC").Cells(3, 2), 1) & ".xlsx") Then 'si le fichier existe on affiche un message et la demarche s'interrompt UserForm2.Show Else 'on enregistre dans un fichier au nom de l'OF enregistrer If filesaved = True Then 'MsgBox ("fichier exporté") 'on exporte l'OF, la date et la description dans une liste (autre fichier excel) via cette fonction exportlist 'on envoie un mail via outlook via la fonction prévu a cet effet envoimail 'on initialise le processus Do Until filesaved = True Application.Wait Now + TimeValue("00:00:01") 'MsgBox ("attente sauvegarde") Loop initprocess Else MsgBox ("fichier NON exporté") initprocess End If End If
Et voilà donc la fonction pour Enregistrer :
Je me suis emmêlé les pinceaux quelque part, si vous pouvez m'en sortir je vous en serez reconnaissant !
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 Function enregistrer() 'on crée une fonction pour enregister la fiche de non conformité Dim Chemin As String Dim rapexist As Boolean filesaved = False Dim cheminsuite As String cheminsuite = "" Application.ScreenUpdating = False Dim y As Integer For y = 1 To Sheets.Count If Sheets(y).Name = "RapDim" Then rapexist = True End If Next y If rapexist = True Then 'Dans le cas où a un rapport on copie/exporte la nouvelle feuille qui le contient Sheets(Array("ficheNC", "RapDim")).Copy 'MsgBox ("avec rapport") Else Sheets("ficheNC").Copy 'MsgBox ("SANS rapport") End If Chemin = "Blablabla" *le chemin est bien défini mais ça sert a rien de le diffuser ici cheminsuite = ActiveWorkbook.Sheets("ficheNC").Range("B5") & "-" & ActiveWorkbook.Sheets("ficheNC").Range("D3") & "-" & ActiveWorkbook.Sheets("ficheNC").Range("D2") & "-" & Left(ActiveWorkbook.Sheets("ficheNC").Cells(3, 2), 1) & ".xlsx" ActiveWorkbook.SaveAs Filename:=Chemin & cheminsuite 'on memorise le chemin du fichier pour le joindre au mail ou l'utiliser ailleurs cheminfichiersauve = ActiveWorkbook.FullName ActiveWorkbook.Close savechanges:=False cheminsuite = "" filesaved = True End Function
Partager