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 :

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
Je me suis emmêlé les pinceaux quelque part, si vous pouvez m'en sortir je vous en serez reconnaissant !