Caché fichier Excel pour travailler depuis USERFORM et pouvoir autre Excel
Bonjour,
Je'ai un fichier excel de plusieurs pages avec quelques Userform. Le tout vas bien mais je voulais cacher le Excel (tableur à mes yeux). Cette étape à bien été, mais maintenant, lorsque je veux consulter d'autres fichiers excel je dois fermer mon userform.
J,ai tenté de caché avec la variable 0
Menu.Show 0
Et j'ai aussi tenté de caché avec cette formule.
If Application.Windows.Count > 1 Then
Application.Windows(ThisWorkbook.Name).Visible = False
Else
Application.Visible = False
End If
Dans les deux cas ça fonction mais si j'ouvre un second fichier excel et que je veux faire une recherche sur mon Userform ou lorsque je veux enregistre une données, sa me donne le message d'eurreur suivant:
Erreur d'exécution '9' :
L'indice n'appartient pas à la selection.
Est i je fias le débogage sa m'apporte à mon code de copiage des données de mon Userform vers mon excel ou vice versa (si j'enregistre ou si je modifie) Par exemple la ligne Sheets (''Bd'').select sera en jaune dans ce code.
Private Sub cmdSearch_Click()
' page BD
Sheets("Bd").Select
'on efface ancienne donnée
ComboBox1 = ""
ComboBox2 = ""
TextBox1 = ""
TextBox2 = ""
TextBox8 = ""
TextBox7 = ""
TextBox9 = ""
TextBox10 = ""
TextBox5 = ""
TextBox6 = ""
TextBox11 = ""
TextBox12 = ""
ComboBox3 = ""
ComboBox4 = ""
ComboBoxConclusion = ""
TextBoxValeurDePerte = ""
TextBox13 = ""
TextBox14 = ""
Dim totRows As Long, I As Long
totRows = Worksheets("Bd").Range("A1").CurrentRegion.Rows.Count
If TextBox0.Text = "" Then
MsgBox "Entrer le PO recherché!", vbCritical, " Choisir une commande"
End If
For I = 2 To totRows
'If Trim(Bd.Cells(i, 1)) <> Trim(TextBox0.Text) And i = totRows Then
'MsgBox "Name not found!"
'End If
If Sheets("Bd").Cells(I, 1) = TextBox0.Text Then
TextBox0.Text = Sheets("Bd").Cells(I, 1)
TextBox1.Text = Sheets("Bd").Cells(I, 2)
TextBox2.Text = Sheets("Bd").Cells(I, 4)
ComboBox1.Text = Sheets("Bd").Cells(I, 3)
TextBox8.Text = Sheets("Bd").Cells(I, 5) 'date 1 5e col
TextBox7.Text = Sheets("Bd").Cells(I, 6) ' raison 1 6e col
TextBox9.Text = Sheets("Bd").Cells(I, 7) 'date 2 7e col
TextBox10.Text = Sheets("Bd").Cells(I, 8) ' raison 2 8e col
TextBox5.Text = Sheets("Bd").Cells(I, 9) 'date 3 9e col
TextBox6.Text = Sheets("Bd").Cells(I, 10) ' raison 3 10e col
TextBox11.Text = Sheets("Bd").Cells(I, 11) ' raison 4 11e col
ComboBox2.Text = Sheets("Bd").Cells(I, 12)
TextBox12.Text = Sheets("Bd").Cells(I, 13)
ComboBox3.Text = Sheets("Bd").Cells(I, 14)
ComboBox4.Text = Sheets("Bd").Cells(I, 15)
ComboBoxConclusion.Text = Sheets("Bd").Cells(I, 16)
TextBoxValeurDePerte.Text = Sheets("Bd").Cells(I, 17)
TextBox14.Text = Sheets("Bd").Cells(I, 18)
TextBox13.Text = Sheets("Bd").Cells(I, 19)
currentrow = I 'capture the value of the currentrow
Exit For
End If
Next I
End Sub
Merci pour votre aide :D
Salut,
lorsque je veux consulter d'autres fichiers excel je dois fermer mon userform.
Passe le UserForm en non modal
Est i je fias le débogage sa m'apporte à mon code de copiage des données de mon Userform vers mon excel ou vice versa (si j'enregistre ou si je modifie) Par exemple la ligne Sheets (''Bd'').select sera en jaune dans ce code.
Tente en mettant l'assignation complète WorkBook("Ton_Classeur").Worksheets("BD") mais sans le select
Dim Ctrl
With Application.Workbooks("Ton_Classeur").Worksheets("BD")
For Each Ctrl In Me.Controls
Select Case TypeName(Ctrl)
Case "TextBox"
Ctrl.Value = vbNullString
Case "ComboBox"
Ctrl.ListIndex = -1
Case Else
End Select
Next Ctrl
End With
'...
'...
End With
De plus ceci ne sert à rien
If TextBox0.Text = "" Then
MsgBox "Entrer le PO recherché!", vbCritical, " Choisir une commande"
End If
Puisque tu continu le code après
Donc le code doit donner à peut près cela
Dim Ctrl
With Application.Workbooks("Ton_Classeur").Worksheets("BD")
For Each Ctrl In Me.Controls
Select Case TypeName(Ctrl)
Case "TextBox"
Ctrl.Value = vbNullString
Case "ComboBox"
Ctrl.ListIndex = -1
Case Else
End Select
Next Ctrl
End With
Dim totRows As Long, I As Long
totRows = Worksheets("Bd").Range("A1").CurrentRegion.Rows.Count
If TextBox0.Text = "" Then
MsgBox "Entrer le PO recherché!", vbCritical, " Choisir une commande"
Else
For I = 2 To totRows
If Sheets("Bd").Cells(I, 1) = TextBox0.Text Then
TextBox0.Text = Sheets("Bd").Cells(I, 1)
TextBox1.Text = Sheets("Bd").Cells(I, 2)
TextBox2.Text = Sheets("Bd").Cells(I, 4)
ComboBox1.Text = Sheets("Bd").Cells(I, 3)
TextBox8.Text = Sheets("Bd").Cells(I, 5) 'date 1 5e col
TextBox7.Text = Sheets("Bd").Cells(I, 6) ' raison 1 6e col
TextBox9.Text = Sheets("Bd").Cells(I, 7) 'date 2 7e col
TextBox10.Text = Sheets("Bd").Cells(I, 8) ' raison 2 8e col
TextBox5.Text = Sheets("Bd").Cells(I, 9) 'date 3 9e col
TextBox6.Text = Sheets("Bd").Cells(I, 10) ' raison 3 10e col
TextBox11.Text = Sheets("Bd").Cells(I, 11) ' raison 4 11e col
ComboBox2.Text = Sheets("Bd").Cells(I, 12)
TextBox12.Text = Sheets("Bd").Cells(I, 13)
ComboBox3.Text = Sheets("Bd").Cells(I, 14)
ComboBox4.Text = Sheets("Bd").Cells(I, 15)
ComboBoxConclusion.Text = Sheets("Bd").Cells(I, 16)
TextBoxValeurDePerte.Text = Sheets("Bd").Cells(I, 17)
TextBox14.Text = Sheets("Bd").Cells(I, 18)
TextBox13.Text = Sheets("Bd").Cells(I, 19)
currentrow = I 'capture the value of the currentrow
Exit For
End If
End If
Next I
Salut,
Sur quelle ligne as-tu le message d'erreur
Je te joint le fichier si jamais tu voudrais voir.
Salut,
Je n'ai pas trop de temps à accorder pour la programmation ces temps-ci.
Je ne saurais trop te conseiller de Mettre Option Explicit en tête de tous tes modules car il y a pas mal de variables qui ne sont pas déclarées.
Pour ma part au vu de l'utilisation que tu fais de cette application tu devrais te rabattre sur Access, cela te faciliterait le travail surtout dans les recherches et les impressions. Et même les stats qui seront plus faciles à traiter.
Si tu veux rester sur Excel voici quelques points que tu dois regarder
- Passer le tableau de la feuille BD en tableau structuré.
- En général éviter tous les Select qui ne font que ralentir Excel
Range("M685").Select
Selection.Copy
Sheets("IMPCIE").Select
Range("E1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks :=False, Transpose:=False)
' // Peut être remplacé par
Sheets("IMPCIE").Range("E1").Value = Range("M685").Value)
- Donner des noms explicite aux contrôles cela facilitera la vie de tout le monde
- Et ne pas cacher mais fermer les fenêtres qui ne sont plus utilisées sauf Menu bien sur
Private Sub EnrgNouvPOVersMenu_Click()
'Fermer l'enregistrement d'un nouveau Po et affichier le menu
Unload ChercherModifier
'Application.WindowState = xlMaximized
'Menu.Show
End Sub
Voilà pour un premier jet...
Merci pour votre temps :)
Pas encore résolu mais je peu l’inscrire comme résolu quand même car je ne crois pas que je trouverais la solution rapidement :P