XL 2016 Fermeture userform non désirée

Thibault A.

XLDnaute Nouveau
Bonjour,

Je suis en train de développer une succession de macros afin d'automatiser un banc de mesures.
J'ai créé un fichier principal où l'on saisit les caractéristiques de la pièce, sous forme d'userform.

Concrètement, l'userform s'ouvre au lancement du fichier, et on doit y inscrire les caractéristiques de la pièce que l'on va mesurer. Ensuite, on clique sur valider et cela crée un fichier .xlsm selon les caractéristiques que l'on a donné précédemment.

L'utilisateur est alors censé faire des mesures, et cliquer à la fin sur un bouton "sauver et quitter", afin de revenir au menu principal pour choisir une nouvelle pièce. Mon problème est là : lorsque l'on quitte le fichier d'une pièce, l'userform principal disparaît aussi, laissant place au tableur de cet userform principal.

Est-ce normal?
J'ai cherché un peu partout je vois rien qui puisse fermer l'userform dans mon code.

Si vous avez une idée pour que cet userform reste en place, je suis preneur !

Merci d'avance,

Thibault
 

Thibault A.

XLDnaute Nouveau
Bonjour,

Car il est plus simple pour nous d'avoir un fichier par pièce pour un suivi dans le temps (30 ans environ)

Voici les codes :

Le fichier principal :

userform :

VB:
Private Sub UserForm_Initialize()
    ListBox1.RowSource = "Donnees!A1:A3"
End Sub

Private Sub ToggleButton1_Click()



N1 = NumPince.Value
N2 = NumTrac.Value
N3 = NomStation.Value
N4 = NomInstallat.Value
N5 = NumAffaire.Value
N6 = NumContact.Value
N7 = ListBox1.Value
N8 = Intervenant1.Value
N9 = Intervenant2.Value
N10 = Intervenant3.Value
N11 = NumProced.Value

Range("C9").Value = N11
Range("C5").Value = N1
Range("C7").Value = N2
Range("B3").Value = N3
Range("C3").Value = N4
Range("B7").Value = N5
Range("B5").Value = N6
Range("D9").Value = N7
Range("D3").Value = N8
Range("D4").Value = N9
Range("D5").Value = N10

Call Test

End Sub

Fonction appelée lors du clic sur le bouton :

VB:
Sub Test()
  
    Dim i As Integer

    For i = 2 To 3
        If Cells(3, i).Value = "" Then
        MsgBox ("Merci de remplir la case " & Cells(2, i).Value)
        Exit Sub
        End If
    Next i
  
    For i = 5 To 7
        If Cells(i, 3).Value = "" Then
        MsgBox ("Merci de remplir la case " & Cells(i - 1, 3).Value)
        Exit Sub
        End If
    Next i
  
    If Cells(9, 4).Value = "" Then
        MsgBox ("Merci de remplir la case " & Cells(8, 4).Value)
        Exit Sub
    End If
  
  
    NomModele = "ModeleTB41D39.xlsm"
    NomFich = Range("C5").Value & "_" & Range("C7").Value & ".xlsm"
    NomDossier = Range("C3").Value & "_" & Range("B3") & "_" & Year(Date)
  
    CheminPrincipal = "C:\Users\Clément\Desktop\MACRO\" 'Racine du dossier MACRO
    CheminModeles = CheminPrincipal & "Modeles\"
    CheminResultats = CheminPrincipal & "Resultats\"
    CheminFichier = CheminResultats & NomDossier & "\" & NomFich
  
    If Len(Dir(CheminResultats & NomDossier, vbDirectory)) > 0 Then
    Else
       MkDir (CheminResultats & NomDossier)
    End If
       
    If Len(Dir(CheminFichier)) > 0 Then
        MsgBox ("Le fichier existe")
        Workbooks.Open (CheminFichier)
    Else
        Workbooks.Open CheminModeles & NomModele
        Range("A3").Value = Workbooks("Main").Sheets("MacroMain").Range("B3").Value
        Range("A5").Value = Workbooks("Main").Sheets("MacroMain").Range("B5").Value
        Range("A7").Value = Workbooks("Main").Sheets("MacroMain").Range("B7").Value
        Range("A9").Value = Workbooks("Main").Sheets("MacroMain").Range("B9").Value
        Range("I3").Value = Workbooks("Main").Sheets("MacroMain").Range("C3").Value
        Range("I5").Value = Workbooks("Main").Sheets("MacroMain").Range("C5").Value
        Range("I7").Value = Workbooks("Main").Sheets("MacroMain").Range("C7").Value
        Range("I9").Value = Workbooks("Main").Sheets("MacroMain").Range("C9").Value
        Range("AA3").Value = Workbooks("Main").Sheets("MacroMain").Range("D3").Value
        Range("AA4").Value = Workbooks("Main").Sheets("MacroMain").Range("D4").Value
        Range("AA5").Value = Workbooks("Main").Sheets("MacroMain").Range("D5").Value
        Range("AA7").Value = Workbooks("Main").Sheets("MacroMain").Range("D7").Value
        Range("AA9").Value = Workbooks("Main").Sheets("MacroMain").Range("D9").Value
        ActiveWorkbook.SaveAs Filename:=CheminFichier
    End If
      
End Sub

Et bien sûr pour lancer l'userform dès le début :

VB:
Private Sub Workbook_Open()

        Application.Visible = False

        Load UserForm1
        UserForm1.Show
      
End Sub

A partir de là, le fichier modèle possède une macro effectuant pas mal de calculs, et une fois faits, un bouton possède ce code :

VB:
Sub Fermer()
ActiveWorkbook.Close savechange:=True
  
End Sub


Voilà, j'ai mis les codes car je ne sais pas bien coder, si je donne les fichiers ça va être la croix et la bannière pour arriver à changer les chemins etc...
Veuillez m'excuser d'ailleurs pour le code, je débute...
Si besoin je peux quand même donner les fichiers
 

mutzik

XLDnaute Barbatruc
re,

si c'est la croix et la bannière, il faut :
- surtout ne pas mettre les chemins et autres paramètres en 'dur' dans le code mais dans une feuille
- récupérer ces paramètres par macro en les affectant à des variables qui sont utilisées ensuite dans le code macro
 

Thibault A.

XLDnaute Nouveau
Re bonjour,

J'ai fait deux fichiers résumant le problème :

Un MainTest à lancer en premier (userform), cliquer simplement sur TEST dans l'userform, cela appelle le fichier ModeleTest, où on trouve deux boutons, un CALCULER représentant mes opérations, et un FERMER pour quitter le classeur.

On remarque donc le même probleme : le premier userform s'en va...

PS: désolé j'ai du mal à faire autrement qu'avec les chemins en dur...


EDIT : En fait, on dirait que tout est dépendant du premier userform parce que quand je met une msg box pour une info dans le deuxième fichier, la msgbox s'affiche sur le premier userform...
 

Pièces jointes

  • MainTest.xlsm
    15.5 KB · Affichages: 33
  • ModeleTest.xlsm
    15.6 KB · Affichages: 36
Dernière édition:

Thibault A.

XLDnaute Nouveau
Bonjour,

Je me permet de vous relancer.

Est-ce finalement une caractéristique d'excel, et devrais-je essayer de la contourner?

Parce qu'après beaucoup d'essais, je ne suis pas arrivé à résoudre ce problème.

Cordialement,

Thibault

EDIT : J'ai contourné le problème avec 2 userforms successifs.

Maintenant un autre problème, j'aimerais détecter l'arrivée d'un fichier dans un dossier, mais je trouve pas la façon de le faire autrement qu'une macro en boucle !
 
Dernière édition:

Discussions similaires