XL 2021 Formulaire de navigation

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

olivier1984

XLDnaute Junior
Bonsoir à tous j'espère que vous allez bien.

J'ai une application dont le formulaire me servant de menu de navigation ne fonctionne pas correctement. L'objectif est de cliquer sur une case du formulaire et elle nous renvoie à la feuille du classeur concernée. Le fichier contient plusieurs feuilles (achats, Stock, TDB, BDD, nouvelle facture, imprimer facture etc...)

Problème : lorsque je clique par exemple sur TDB ça ouvre plutôt la feuille BDD, si je clique sur le bouton nouvelle facture ça va ouvrir la feuille achats etc... Tous les boutons du formulaire fonctionnent Mais n'ouvrent pas la feuille indiquée.

J'aimerais que vous m'aidiez à corriger l'erreur du code VBA afin que le bouton cliqué ouvre la feuille correspondante.

Je suis vraiment très novice en VBA donc j'apprends sur le tas.

Toute aide sera la bienvenue j'en ai vraiment besoin et je suis dans une urgence.

Pièces jointes :
- Fichier Excel
 

Pièces jointes

Bonjour Olivier,
Il me semble qu'il y ait pb dans vos sub de boutons :
VB:
Private Sub BtnimprimerFactures_Click()
Sheets(Me.BtnimprimerFactures.Caption).Select
'Feuil9.Select

End Sub
Le 1er Sheets(x).select est correct mais le second renvoie à une autre feuille.
Il suffit de le supprimer.
PJ à tester.

( NB : Vous avez des références circulaires qu'il vaudrait mieux résoudre )
 

Pièces jointes

Re,
Dans votre macro "vide_fichier" il y a des noms de feuilles inconnus.
"lignes factures" au lieu de probablement "LISTE DES FACTURES"
"Entrées" n'a pas de feuille correspondante.

De plus lorsqu'on réinitialise un fichier il est bon de demander confirmation au demandeur pour éviter les aneries.
Donc on peut faire :
VB:
Sub vide_fichier()
    Rep = MsgBox("Voulez vous vraiment réinitialiser ce fichier ?" & Chr(10) & _
                "Cela durera quelques secondes.", vbYesNo, vbCritical)
    If Rep = vbNo Then Exit Sub
    Sheets("LISTE DES FACTURES").[a2:f1000,i2:i1000].ClearContents
    Sheets("REGLEMENTS").[h2:h1000,e4:e1000].ClearContents
    Sheets("STOCK PRODUITS").[j7:j1000,m7:m1000].ClearContents
    'Sheets("Entrées").[f2:f1000,a2:c1000].ClearContents
    MsgBox "Traitement terminé", vbInformation
End Sub
La ligne de "Entrées" est en commentaires, à rectifier.

NB : pour les MSGBOX il y a un très bon tuto sur toutes les possibilités :
Vous avez aussi un petit outil pour construire graphiquement le msgbox, et il vous donne le code à mettre dans le VBA :
 
Dernière édition:
Bonsoir olivier1984, sylvanu,

On peut utiliser l'UserForm USFmenuPro comme module de classe avec ce code :
VB:
Public WithEvents CB As MSForms.CommandButton

Private Sub CB_Click()
Sheets(CB.Caption).Select
End Sub

Private Sub CB_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
CB.BackColor = IIf(X > 4 And X < CB.Width - 4 And Y > 4 And Y < CB.Height - 4, RGB(15, 215, 15), RGB(255, 255, 255))
End Sub
La classe est initialisée avec ce code dans Module1 :
VB:
Dim CB() As New USFmenuPro 'mémorise la variable

Sub menu()
Dim c As Control, n
With USFmenuPro
    For Each c In .Controls
        ReDim Preserve CB(n)
        Set CB(n).CB = c
        n = n + 1
    Next
    .Show
End With
End Sub
A+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour