XL 2016 Comment afficher uniquement un formulaire sans accès à la base de données

Kirikou46

XLDnaute Nouveau
Bonlour à tous,
Nouveau sur le forum et pratiquant depuis peu le VBA, je souhaiterai suite à une création d'un USF avec 2 formulaires (1 pour la saisie et l'autre pour modifications et suppressions) ne pas donner accès à la bdd pour éviter toutes manipulations aux utilisateurs.
Lorsque je rends la feuille "invisible" j'ai un message d'erreur car la feuille "source" (celle de la bdd) figure dans mon code n'est plus ainsi accessible.
Quelqu'un aurait-il l'immense bonté de m'indiquer la marche à suivre afin de répondre à mon besoin.
J'adresse un grand merci d'avance et vous souhaite un excellent week-end.
 

Usine à gaz

XLDnaute Barbatruc
Bonjour :)
Si votre feuille est également protégée :

code dans le ThisWorkbook
Private Sub Workbook_Open()
Worksheets("le nom de votre feuille").Protect Password:="votre mot de passe", UserInterfaceOnly:=True
Application.EnableEvents = False
Application.ScreenUpdating = False
vos autres lignes s'il y a ...
Application.EnableEvents = True
Application.ScreenUpdating = True
end sub

ça devrait fonctionner,
:)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Kirikou et bienvenu sur XLD,
Lorsque je rends la feuille "invisible" j'ai un message d'erreur car la feuille "source" (celle de la bdd) figure dans mon code n'est plus ainsi accessible.
Une feuille même masquée, même en état Visible= 2-Xlsheet veryhidden reste accessible par le VBA. ( voir PJ )
Je pense que votre souci vient d'autre part.
Vous n'auriez pas un petit fichier test ?
 

Pièces jointes

  • Kirikou.xlsm
    14.7 KB · Affichages: 15

patricktoulon

XLDnaute Barbatruc
bonjour
avant le show de ton userform
application.visible=false
et tu n'aura que le userform a l'ecran
et il ya bien d'autres techniques mois contraignante que masquer une feuille notamment le pilotage de l'activate ou sélection change ou change de la feuille a l’intérieur du userform même
un exemple de ton fichier anonymisé aurait été utile pour t aider
 

Kirikou46

XLDnaute Nouveau
@ Patrick - Bah... si... Excel, il sait faire de la magie Mais pas encore le café
Pour le fun : il faut tenter de cliquer sur "Non" au début.
Bonjour Eric C,
Désolé en effet, voici ci dessous le code du formulaire "recherche" :
'Procédure permettant d'afficher les champs renseignés dans la base de données

Private Sub cbnAller_Click()
Dim No_Lign As Integer
No_Lign = cboObjet.ListIndex + 2
txtType.Value = Sheets("source").Cells(No_Lign, 3).Value
txtReference.Value = Sheets("source").Cells(No_Lign, 4).Value
txtTitulaire.Value = Sheets("source").Cells(No_Lign, 5).Value
txtCoordonnees.Value = Sheets("source").Cells(No_Lign, 6).Value
txtInterlocuteur.Value = Sheets("source").Cells(No_Lign, 7).Value
txtTelephone.Value = Sheets("source").Cells(No_Lign, 8).Value
txtDatepassation.Value = Sheets("source").Cells(No_Lign, 9).Value
txtConsultation.Value = Sheets("source").Cells(No_Lign, 10).Value
txtMontant.Value = Sheets("source").Cells(No_Lign, 11).Value
txtPeriodicite.Value = Sheets("source").Cells(No_Lign, 12).Value
txtDuree.Value = Sheets("source").Cells(No_Lign, 13).Value
txtRenouvellement.Value = Sheets("source").Cells(No_Lign, 14).Value
txtObservations.Value = Sheets("source").Cells(No_Lign, 15).Value
txtEtat.Value = Sheets("source").Cells(No_Lign, 16).Value
End Sub

'Fermeture du formulaire

Private Sub cbnFermer_Click()
Unload Me
End Sub



Private Sub cboObjet_Initialize()
Sheets("source").Activate
Range(A1).Select

End Sub

'***************************************************
'Procédure permettant de modifier un contrat
'*****************************************************


Private Sub cbnModifier_Click()
Dim No_Ligne As Integer
Sheets("source").Select
No_Lign = cboObjet.ListIndex + 2
If cboObjet.Value = "" Then
MsgBox ("Veuillez choisir le contrat ou la convention")
Else
Cells(No_Lign, 3) = txtType.Value
Cells(No_Lign, 4) = txtReference.Value
Cells(No_Lign, 5) = txtTitulaire.Value
Cells(No_Lign, 6) = txtCoordonnees.Value
Cells(No_Lign, 7) = txtInterlocuteur.Value
Cells(No_Lign, 8) = txtTelephone.Value
Cells(No_Lign, 9) = txtDatepassation.Value
Cells(No_Lign, 10) = txtConsultation.Value
Cells(No_Lign, 11) = txtMontant.Value
Cells(No_Lign, 12) = txtPeriodicite.Value
Cells(No_Lign, 13) = txtDuree.Value
Cells(No_Lign, 14) = txtRenouvellement.Value
Cells(No_Lign, 15) = txtObservations.Value
Cells(No_Lign, 16) = txtEtat.Value

End If
End Sub


'************************************************
'Procédue permettant de supprimer un contrat
'************************************************

Private Sub cbnSupprimer_Click()
Dim DR As Integer
DR = MsgBox(("Etes vous sûr de vouloir supprimer le contrat ?"), vbYesNo + vbCritical + vbDefaultButton1, "Quitter")
Select Case DR
Case vbYes
Sheets("source").Activate
Rows([B2:B100].Find(cboObjet.Value).Row).EntireRow.Delete
Case vbNo
Exit Sub
End Select
End Sub


'****************************************************************
'Procédure de mettre l'interlocuteur en majuscules
'******************************************************************
Private Sub txtInterlocuteur_Change()
txtInterlocuteur.Text = UCase(txtInterlocuteur.Text)
End Sub

'*********************************************************************
'Procédure permettant de mettre le numéro téléphone avec espaces
'**********************************************************************


Private Sub txtTelephone_Change()
txtTelephone.Value = Format(txtTelephone, "00 00 00 00 00")
End Sub



'****************************************************************
'Procédure de mettre le nom en majuscules
'******************************************************************

Private Sub txtTitulaire_Change()
txtTitulaire.Text = UCase(txtTitulaire.Text)
End Sub








Private Sub UserForm_Click()

End Sub
Lorsque je place la feuille "source" (bdd) invisible (2-xlsSheetveryhidden) un message d'erreur indique "erreur d'exécution 1004" "La méthode select de la classe worksheet a échoué"
J'espère que cela completera ma demande.
Bonne journée, à bientôt.
 

chris

XLDnaute Barbatruc
Bonjour

Déjà il faudrait préciser sur quelle ligne se produit l'erreur mais il y a fort à parier que Activate et Select sont responsables.
On ne doit même pas les utiliser sur une feuille visible mais c'est sûr que cela ne peut fonctionner sur une feuille masquée.

Un code ne doit pas se référer aux Range sans préciser classeur et feuille concernés.
 

Kirikou46

XLDnaute Nouveau
Bonjour

Déjà il faudrait préciser sur quelle ligne se produit l'erreur mais il y a fort à parier que Activate et Select sont responsables.
On ne doit même pas les utiliser sur une feuille visible mais c'est sûr que cela ne peut fonctionner sur une feuille masquée.

Un code ne doit pas se référer aux Range sans préciser classeur et feuille concernés.
Bonjour Chris,
l'erreur se produit sur le sheets("source").Select de :
Private Sub cbnModifier_Click()
Dim No_Ligne As Integer
Sheets("source").Select
Merci de prendre le temps de m'aider à résoudre ce problème et si tu as une solution peux tu me l'indiquer sachant que je suis néophite en la matière et de plus autodidacte.
A bientôt et bon week-end
 

chris

XLDnaute Barbatruc
RE

Comme dit, chaque range doit être précédé des objets auquel il appartient
Au minimum
Sheets("source").Select
doit être remplacé par
With Sheets("source")
Chaque range de type Cells(No_Lign, 3)
doit être ensuite préfixé d'un point
.Cells(No_Lign, 3)
pour s'y rapporter
et
End With doit suivre
End If
 

Kirikou46

XLDnaute Nouveau
RE

Comme dit, chaque range doit être précédé des objets auquel il appartient
Au minimum
Sheets("source").Select
doit être remplacé par
With Sheets("source")
Chaque range de type Cells(No_Lign, 3)
doit être ensuite préfixé d'un point
.Cells(No_Lign, 3)
pour s'y rapporter
et
End With doit suivre
End If
Bonsoir Chris,
Bien reçu ton message . Est ce à dire que le code devra être :
Private Sub cbnModifier_Click()
Dim No_Ligne As Integer
With Sheets("source")
No_Lign = cboObjet.ListIndex + 2
If cboObjet.Value = "" Then
MsgBox ("Veuillez choisir le contrat ou la convention")
Else
.Cells(No_Lign, 3) = txtType.Value
End With
End Sub
J'espère avoir compris.
Merci encore
 

Discussions similaires

Statistiques des forums

Discussions
314 626
Messages
2 111 294
Membres
111 093
dernier inscrit
Yvounet