Conflit entre 2 usf

julien34

XLDnaute Occasionnel
Bonjour le forum,

J'ai crée un petit truc sur vba. Tout allait bien jusqu'à ce que je mette en place un accès utilisateur.

Je m'explique ...
j'ouvre le fichier je me log tout se déroule correctement. j'ai crée également une fonction recherche (clic sur image rechercher un dossier) qui ne fonctionne pas après l'exécution de la macro d'identification.

En gros j'ouvre le fichier je me log, la fonction rechercher un dossier plante (ou plus exactement il faut taper tout le nom du client)
Par contre si à l'ouverture je ferme le userform d'identification, j'affiche l'onglet "saisie MRP" la fonction recherche fonctionne très bien. En tapant la première lettre il me sort tous les clients commençant par cette lettre.

Pouvez vous m'aider là dessus, je suis complètement planté là !

Ps: J'ai du effacer certains onglets pour confidentialité mais la fonction recherche est accessible !
C'est assez difficile à expliquer alors n'hésitez pas à me demander plus d'info si besoin

ID => direction
mdp => 10

D'avance merci
 

Pièces jointes

  • test 5.5.xlsm
    421.6 KB · Affichages: 46
  • test 5.5.xlsm
    421.6 KB · Affichages: 50
  • test 5.5.xlsm
    421.6 KB · Affichages: 51

Jam

XLDnaute Accro
Re : Conflit entre 2 usf

Salut Julien

Pas réussi à reproduire ton erreur. Quoique je fasse la recherche ne fonctionne pas.
Et comme j'ai peu de temps je n'ai pas pu trouver ce qui clochait.
En tout cas, il faut que tu rajoutes un test d'erreur dans ta procédure au cas où la recherche ne renvoie rien.

Petits détails: je ne comprends pas bien pourquoi tu "mets en forme" tes usf en les codants alors qu'il suffit de donner le caption d'un bouton par exemple directement dans la feuille de propriété.
Si je puis me permettre une autre remarque, il faut que tu nommes tes contrôles de feuille pour mieux les retrouver ;)

Concernant le remplissage de ta feuille MRP avec les données de la base, je pense qu'il faut que tu fasses cela autrement, car c'est particulièrement consommateur de temps et de calcul que d'écrire d'une feuille vers une autre. Ah, dans ce cas, utilise des With...End With pour rendre plus lisible et plus rapide ton code.

Bon courage

PS./ je joints ton fichier dans lequel j'ai juste modifié le userform de login. Ah, petit détail complémentaire, utilise Option Explicit en en-tête de module pour forcer la déclaration des variables. C'est mieux ;)
 

Pièces jointes

  • test 5.5.xlsm
    440.2 KB · Affichages: 46
  • test 5.5.xlsm
    440.2 KB · Affichages: 47
  • test 5.5.xlsm
    440.2 KB · Affichages: 47

julien34

XLDnaute Occasionnel
Re : Conflit entre 2 usf

Bonjour le forum, Jam,

Débutant en VBA je pense effectivement que mon code n'est pas des plus "propres et légers".

Pour info, la recherche fonctionne mais il faut taper le nom entier (exemple "cactus")
Normalement il trouve en tapant juste la lettre "c" dans recherche mais depuis que j'ai mis en place l'accès utilisateurs il faut taper le nom en entier.

Si quelqu'un peut aider là dessus ?!

D'avance merci.
 

Jam

XLDnaute Accro
Re : Conflit entre 2 usf

Re,

Bon, j'ai pas réglé ton problème...j'ai bloqué sur ton module1.
Pour faire (plus) simple, j'ai modifié une partie de la procédure Sup_données() que je t'invite à aller regarder puis à essayer d'appliquer au reste de ton code dans ce module (y'a beaucoup à faire dans Envoi_Donnéesbis(), Envoi_Données()...). J'ai commenté une grosse partie du code inutile et supprimé une partie aussi.
Ton code y gagnera en lisibilité et en rapidité.
Jette un oeil vers la fin de la procédure pour comprendre à quoi servent les variables que j'ai ajouté en début de procédure. Pour trouver le code plus rapidement tu peux rechercher la balise <JAM> que j'ai mis dedans.
Si j'ai un peu plus de temps, j'essaierai de comprendre ce que tu fais et le problème de recherche...qui ne marche toujours pas chez moi :(
Ah, j'ai vu que tu déclarais en en-tête de 2 modules différents des variables Public, comportant le même nom. Attention, gros risque de conflit ;)

Bon courage.
 

Pièces jointes

  • test 5.6.xlsm
    441.9 KB · Affichages: 45

julien34

XLDnaute Occasionnel
Re : Conflit entre 2 usf

Re,

Merci beaucoup, je vais essayer de déchiffrer la méthodologie utilisée dans ton code.

Par contre ça m'étonne vraiment que ça ne marche pas chez toi.
Si tu procèdes comme suit:
1. Ouvre le classeur
2. Ferme le userform d'accueil
3. Clic droit sur les onglets au bas du classeur "afficher l'onglet Saisie MRP"
4. Clic sur rechercher un dossier

En tapant la lettre "c" il devrait t'afficher cactus présent dans la base

Non ?

A te lire ,
 

Jam

XLDnaute Accro
Re : Conflit entre 2 usf

Julien,

Une suggestion pour remplacer les procédures Envoi_Donnéesbis() et Envoi_Données():
- Tu crées une feuille masquée dans laquelle tu "mappes" toute ta feuille de saisie afin de coller au format de ta base.
- Tu te contentes ensuite ed faire un bête copier/coller de cette feuille temporaire dans la base

Je pense que cela sera beaucoup plus simple à gérer tant dans tes feuilles que dans ton code :)

Pour le bug, je suis dessus...mais je comprends pas encore pourquoi. Faut dire que j'ai changé tes modules (un seul suffit) pour tout regrouper dedans (je parle pas des modules d'usf). J'ai mis un Option Explicit en début...et là c'est le drame :( Il faut que je repasse sur toutes les variables non déclarées. Ca prends un peu de temps, mais cela permettra peut-être de résoudre ou comprendre le problème.
Question à quoi servent Public i, Public Var et Public Var1 ?

A+
 

julien34

XLDnaute Occasionnel
Re : Conflit entre 2 usf

Re Jam,

Très honnêtement, concernant Public i, Public Var et Public Var, c'est un conseil qui m'a été donné sur ce même forum.
L'utilité exacte, je ne la connais pas.

Concernant ta suggestion pour remplacer les procédures d'envoi de données, je vais me pencher là dessus également.

Je te remercie à nouveau pour le temps que tu consacres à résoudre mon problème.

A+
Julien
 

Jam

XLDnaute Accro
Re : Conflit entre 2 usf

Julien,

Utiliser les variables en mode Public permet de partager la valeur d'une variable d'un module à un autre pour réutiliser son contenu dans une procédure différente.
C'est à utiliser avec beaucoup de pincettes pour éviter les conflits ou les erreurs dans d'affectation de variable. Surtout que dans ton code, tu réutilises la variable i un peu partout.
Il vaut mieux mettre un Dim i dans chacune de tes procédures plutôt qu'un Public i en en-tête de module. Je t'invite à lire cet excellent article de MDF VBA et les variables - Tutoriels & Astuces Excel > VBA pour débutants - Tutoriels : myDearFriend! Excel Pages

A+
 

Jam

XLDnaute Accro
Re : Conflit entre 2 usf

Julien,

J'ai trouvé !

Bon c'est tordu comme truc...:p
En fait dans la fonction VerifMDP() tu fais une recherche dans laquelle tu mets dans ton .Find un LookAt:=xlWhole. Et il est là le bug ! Excel va conserver par la suite cette option cochée pendant toute la durée du programme. Donc quand tu lances ton .Find dans la procédure de recherche dans ta base, il ne peut pas trouver avec "c". Par contre il trouvera bien "CACTUS" :)
Bref, il suffit juste de rajouter LookAt:=xlPart dans cette recherche et le tour est joué.

Pour info: j'ai pu trouver en lançant une recherche manuelle sur la plage avec "c" en critère. Comme il ne trouvait pas (!!!), c'est là que j'ai vu que l'option était cochée...après j'ai cherché dans ton code où il y avait un autre .Find.

Bon courage pour la suite.

PS./ Je te joins le fichier que j'ai continué à modifier pour qu'il puisse te servir par la suite avec la modif bien sûr.
 

Pièces jointes

  • test 5.7.xlsm
    448.5 KB · Affichages: 33

julien34

XLDnaute Occasionnel
Re : Conflit entre 2 usf

Salut Jam,

En effet, bien tordu le truc, je n'aurais jamais trouvé !
Je te remercie pour l'aide précieuse que tu m'as apportée. Je vais essayer de réécrire mon code avec ta méthodologie, et ainsi essayer de progresser.

MERCI BEAUCOUP
 

julien34

XLDnaute Occasionnel
Re : Conflit entre 2 usf

Re,

J'ai un autre petit pb à te soumettre si tu me le permets.
L'appli marche nickel sous Excel 2010.

En revanche, j'ai un bouton qui suit l'utilisateur au clic via
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ActiveSheet.Shapes("Image 474").Top = ActiveCell.Top
    Application.GoTo Reference:=Worksheets(ActiveSheet.Name).Range(ActiveCell.Address)
End Sub

Ce code plante uniquement sous 2007.

j'ai essayé avec la collection pictures etc ... rien n'y fait

L'erreur renvoyée est la suivante
"La valeur tapée dépasse les limites" ou quelque chose dans le genre

Aurais tu une idée? Aucun membre du forum n'as su trouver le pb
Je pense que tu dois être sous 2010 donc compliqué pour toi de tester !!

Si tu as une idée ....
Merci
A+
 

Statistiques des forums

Discussions
312 322
Messages
2 087 279
Membres
103 507
dernier inscrit
tapis23