Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 besoin d'aide pour une macro pour Userform

AlexandrB

XLDnaute Nouveau
Bonjours ,

J'aimerai crée une macro qui me permet que quand je clique sur start dans ma feuille interface , je passe d'une feuille a une autre en fonction de ma colonne saisie de valeur dans ma feuille Gamme .
Dans saisie de valeur j'ai 4 choix possible :
- non = UserForm " conformenonconforme"
- oui = UserForm " valeur"
- Mesure Méridien = UserForm " MesureMeridien"
- Mesure Suspente = UserForm MesureSuspente"

j'aimerai mettre en place un choix automatique de mes Userform en fonction de la case Saisie de Valeur dans ma feuille Gamme , comme sa quand je lance ma macro dans mon interface sa me fait le choix automatique des UserForm , j'ai crée des bouton dessus précèdent et Valider , mais quand je clique sur Valider il passe pas au prochain point de contrôle.
qq pourrait-il m'aider a finir ma macro je bloque ?

exemple d'un UserForm

 

Pièces jointes

  • JTO-Gamme PVC .xlsm
    596.5 KB · Affichages: 5
Dernière édition:

AlexandrB

XLDnaute Nouveau
j'ai réussi a modifier ma macro mais sa me met une erreur 1004 , a la ligne suivante :
Do While Cells(Sheets("Gamme").Range("F")).Value = "Oui" Or "Non" Or " Mesure Méridient" Or "Mesure Suspente".

je c'est pas si mon erreur est dans la macro ou dans le fichier Excel .
 

Pièces jointes

  • JTO-Gamme PVC.xlsm
    518.6 KB · Affichages: 3

vgendron

XLDnaute Barbatruc
Hello
Je pense qu'il y a du boulot pour améliorer et debugger tout ca..

1) il faudrait donner des noms à tes Userform, histoire de comprendre (rien qu'avec le nom") à quoi ils servent

2) j'ai vu du code incohérent qui me laisse à penser que tu n'as pas vraiment compris ce que tu fais..
dans la feuile "List"
VB:
Sub worksheet_change(ByVal target As Range)
Set target = Range("A1")
If target.Value = "oui" Then
    Call conformenonconforme.Show
End If
If target.Value = "non" Then
    Call Valeur.Show
End If
End Sub
l'évènement "Worksheet_change" est déclenché lorsque tu modifies une cellule dans la feuille
cette cellule, est connue par "Target"
tu peux donc savoir quelle cellule vient de déclencher l'évènement avec msgbox target.address

toi. tu commences par modifier cette target en imposant target=range("A1")
et tu regardes sa valeur "Oui oui non"
à priori, tu n'as donc pas besoin de savoir qui est target
il te suffit donc
VB:
Sub worksheet_change(ByVal target As Range)
If Range("A1") = "oui" Then
    Call conformenonconforme.Show
End If
If Range("A1") = "non" Then
    Call Valeur.Show
End If
End Sub
l'ennui, c'est que meme avec ca.. aucun des formulaires ne sera jamais lancé, puisque en A1 de la feuille "List", il y a "Outil de contrôle (EN)"
==> le code n'est à priorr pas dans la bonne feuille??

ensuite, je vois des choses comme ca
VB:
Private Sub CommandButton2_Click()
For i = 6 To 46
    Cells(i, "C") = ""
    Cells(i, "D").Interior.Color = RGB(255, 255, 255)
Next
UserForm3.Show
End Sub
la boucle peut etre simplement remplacée par
VB:
Private Sub CommandButton2_Click()
Range("C6:C42").ClearContents
Range("D6:D42").Interior.Color = RGB(255, 255, 255)

UserForm3.Show
End Sub

3) à prirori tu as les memes boutons sur toutes les feuilles et donc autant de fois le meme code sur chaque feuille
autant n'avoir qu'un SEUL code qui est appelé par les boutons

4) pour ton do while qui plante: range("F") : il manque un numéro de ligne..
 

AlexandrB

XLDnaute Nouveau
En faite j'ai fait une interface de lancement de mes Userform dans la feuille INTERFACE , alors que j'aurai du tous mettre dan ma feuille Gamme , si je comprend bien ? mais j'aimerai que mon lancement de mes Userform de ma gamme se lance dans une autre page , c'est possible ?
 

vgendron

XLDnaute Barbatruc
Quelques modifications pour commencer
1) modifier tes tableaux de saisie en tableaux structurés==> ca évite d'avoir des lignes vides inutiles, et c'est plus joli...
2) UN bouton"Réinit" qui lance UNE seule macro
cette macro efface le tableau de la feuille active, et lance le formulaire qui va bien selon la feuille active (select case)

3) pour le Userform3==>renomé USF_Contrôle"
les boutons ont aussi été renommés "CBn_Précédent" et CBn_Suivant
regarde le code qui j'y ai mis et commenté
pour l'instant, j'ai ignoré ton code, et je me suis contenté de passer d'une ligne à l'autre
il faudrait que tu expliques ce que tu fais selon la ligne affichée, et pourquoi..
 

Pièces jointes

  • JTO-Gamme PVC.xlsm
    463.5 KB · Affichages: 3

vgendron

XLDnaute Barbatruc
ci jointe une rev2 dans laquelle j'ai commencé à faire un peu de ménage

dans les feuilles: plus de code redondant
les boutons sont tous les memes, et pointent tous sur la/les memes macro de "navigation"
ces macros sont dans le module standard "mNavigation"

tu as 3 4 macro ExportToPdf==> c'est interdit==> d'ailleurs, ca plante
il faut savoir si l'exportation dépend de la feuille active? ou si on exporte toujours la meme chose
idem pour l'impression

ensuite.. l'outil de saisie==> il va falloir expliquer à quoi ca sert et comment c'est censé fonctionner
quand on est sur le formulaire 1, et qu'on clique sur fin, le formulaire 1 est masqué, et on ouvre le formulaire2
tu y saisis des valeurs, et après. bah. rien... tu as un message qui te dit si c'est valide ou pas. mais rien de plus
tu ne peux meme pas fermer le formulaire 2 (sauf par la croix) et le formulaire 1 qui est masqué n'EST PLUS accessible..
 

Pièces jointes

  • JTO-Gamme PVC Rev 2.xlsm
    428.1 KB · Affichages: 2

vgendron

XLDnaute Barbatruc
sur le formulaire "principal" que j'ai renommé USF_Contrôle, il y a un code pour un combobox qui n'existe pas..?
le bouton "Fin", tu regardes si la celulle "B" &i contient "Pt_38

If Cells(i, "B") = "Pt_38" Then
1: i n'est pas défini
2: pourquoi ce test sur cette valeur particulière?? dans le tableau, il y a jusqu'à PT_406

bref.. beaucoup de code totalement inutile /incohérent
 

vgendron

XLDnaute Barbatruc
en fait, je me rend compte que ton fichier ne correspond pas du tout à ta demande

UserForm " conformenonconforme"
UserForm " valeur"
UserForm " MesureMeridien"
UserForm MesureSuspente"

aucun de ces userfrom n'existe

le fichier que tu as posté: aucune chance qu'il ne fonctionne..

il va donc falloir que tu postes LE bon fichier
et que tu expliques TOUT ce que tu veux, pourquoi comment..
 

AlexandrB

XLDnaute Nouveau
Merci pour toute c'est info Vgendron , sa m'aide beaucoup , si pour les UserForm mai il on pas le nom que j'ai dit , chez toi sa donne :

UserForm " USF_Contrôle" =" conformenonconforme"
UserForm " UserForme6" =" valeur"
UserForm " UserForme1"= " MesureMeridien"
UserForm " UserForm4"=" MesureSuspente"

Se que je voudrai c'est que l'user forme soit diffèrent en fonction de la case Saisie de valeur dans la feuille Gamme , exemple si dans la case saisie de valeur il y a oui , il faut que sa soir l'UserForme6 qui s'affiche , si dans la case il y a non il faut que sa soir l'USF_Contrôle qui s'affiche , si dans la case il y a Mesure méridien il faut que sa soit UserForme1 qui s'affiche et si il y a Mesure suspente dans la case que sa soit l'UserForme4 qui s'affiche .
 

Pièces jointes

  • JTO-Gamme PVC.xlsm
    407.1 KB · Affichages: 3

vgendron

XLDnaute Barbatruc
Bonjour

ton besoin n'est PAS CLAIR
si dans la case saisie de valeur
QUELLE CASE?? de quelle ligne??
à quel moment faut il ouvrir le formulaire?

quand tu lances le formulaire "principal" (=USF_Controle)
tu peux parcourir les lignes de la feuille Gamme
(voir code des boutons Précédent et suivant qui appellent la macro "LoadLigne")
selon le contenu de la colonne Saisie Valeur de LA LIGNE en cours d'affichage, je lance le formulaire
à noter que si il y a NON le formulaire USF_Controle est DEJA affiché==> donc bug.. => j'ai mis la ligne de commande en commentaire


tu n'as pas répondu aux questions que j'ai posées..
pourquoi Pt_38 ?
à quoi sert d'ouvrir un formulaire pour y saisir des info qui ne sont pas utilisées, ni sauvegardées nulle part.?
 

Pièces jointes

  • JTO-Gamme PVCrev2.xlsm
    424.5 KB · Affichages: 3

AlexandrB

XLDnaute Nouveau
Dans la feuille " Gamme " , Colonne F ( saisie de valeur ) , en fonction de se qu'il y a écrit dans cette casse je veux qu'un UserForm diffèrent s'ouvre :

Si dans la case il y a écrit " non " = UserForm " USF_Contrôle" =" conformenonconforme"
Si dans la case il y a écrit " oui " =UserForm " UserForme6" =" valeur"
Si dans la case il y a écrit " MesureMeridien " =UserForm " UserForme1"= " MesureMeridien"
Si dans la case il y a écrit " MesureSuspente " =UserForm " UserForm4"=" MesureSuspente"

Voila se que je veux , besoin que mon User Forme change en fonction de se qu'il y a écrit dans la case et que sa soi automatique.
Pour le point 38 c'est une erreur en faite le formulaire doit aller jusqu'à la dernière case vide , en fonction des gamme j'aurai plu ou moi de casse remplie .
 

vgendron

XLDnaute Barbatruc
bonjour

je crois qu'il y a un problème de compréhension sur ton application..
il va falloir faire le ménage:

Quand tu cliques sur le bouton "START" de la feuille "Interface", ca lance le formulaire principal "USF_Controle"

dans le code de ce formulaire, tu as des blocs complets qui ne correspondent à rien !
"Private Sub Combobox1" et "Private Sub Combobox1_Change"
==> il n'y a PAS de combobox1 ==> donc aucune chance d'executer ces deux codes

Ce que fait le formulaire pour l'instant:
Le formulaire "USF_Controle" permet de parcourir et charger les lignes du tableau "Tab_Gamme" de la feuille "Gamme")
les boutons Suivant et précédant permettent de passer d'une ligne à l'autre
quand le formulaire est lancé, c'est la ligne 1qui est affichée
tu peux faire suivant. jusqu'à la dernière ligne du tableau (67)
à chaque fois qu'un des boutons "Suivant" - "Précédent" est activé, la macro "LoadLigne() est lancée
Cette macro est chargée de récuperer les infos de la ligne dans le tableau et les afficher sur le formulaire
SELON la valeur de la colonne "Saisie de valeur" à la ligne , un nouveau formulaire est affiché
SAUF dans le cas, ou la valeur saisie est NON, puisque le formulaire est DEJA affiché, c'est le formulaire principal "USF_Controle"
Dans la version ci jointe: dans ce cas, on affiche les options bouton "conforme / non conforme"
MAIS.. que faut il faire quand tu cliques sur un des options boutons?
si tu cliques sur "Conforme".. la prochaine fois que tu selectionnera cette ligne.. comment on fait (ou trouve t on l'info) pour savoir que la ligne est conforme?

Comme indiqué précédemment, lorsque tu affiches un autre formulaire.. c'est bien.. tu remplis des valeur ou pas.. et après.?? tu n'en fais rien.. elles ne sont enregistrées nulles part..

Il faut donc que tu précises ce qu'il faut faire à chaque étape.

tu as des formulaires qui se ressemblent enormément: Userform 2 et 5
 

Pièces jointes

  • JTO-Gamme PVCrev3.xlsm
    426.1 KB · Affichages: 1

vgendron

XLDnaute Barbatruc
Re

j'ai regardé un peu les bouts de codes par ci par la.. et en ai déduit certaines choses.. notamment des formulaires identiques... à peu de chose près
afin de simplifier et alleger le code, je te propose la chose suivante:

au clic sur le bouton START==> lancement d'un nouveau formulaire USF_Principal
celui ci permet
1) de selectionner la gamme "FR" ou "EN"
2) de selectionner la ligne de la feuille "Gamme" (FR ou EN)
3) les infos sont affichées sur le formulaire
4) le bouton FIN quitte l'application
5) le bouton GO permet de lancer le formulaire en fonction de la ValSaisie

Si ValSaisie = OUI ou NON==> on lance le MEME formulaire unique "USF_Controle"
==> le formulaire "USF_Mesure ne sert plus à rien.. je l'ai gardé pour l'instant pour éventuellement récuperer du code

le fomulaire unique "USF_Controle" va aussi afficher les infos de la ligne MAIS avec une différence selon que la ValSaisie est OUI ou NON
si OUI: on affiche le combo pour la Valeur
si NON: on affiche les options boutons

les boutons Valider - précedent-fin sont à revoir en fonction de ce qu'on est censé faire dans ce formulaire

Si ValSaisie="Méridien" ou "Suspente"==> on lance le MEME formulaire unique "USF_SUSPENTE_MERIDIEN"

en fonction de la ValSaisie, le combobox est rempli avec les bons éléments (Méridien xx ou Suspente xx)
en fonction de la ValSaisie, le formulaire travaille sur le bon onglet
en fonction de la ValSaisie: on affiche les valeurs Min MAx et Delta==> plus pratique pour savoir si la valeur que l'on saisie dans le textbox est dans les limites
les boutons Suivant et Précédent permettent de naviguer dans les numéro (de méridien ou suspente)
le bouton Nouvelle Limites: ouvre le formulaire USF Min Max==> La. je ne sais pas ce qu'on est censé faire

le bouton Fin permet de quitter le formulaire

pour le formulaire "USF_Ecart": je n'ai rien fait


Je te laisse regarder
me dire ce que tu en penses et apporter les explications necessaires sur le fonctionnement de ton appli.
 

Pièces jointes

  • JTO-Gamme PVCrev4.xlsm
    439.2 KB · Affichages: 5

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…