Mon premier USERFORM

Bonjour à tous,

Et oui ! Je viens de créer mon premier UserForm ! Ce n'était pas si compliqué, en tout cas pour la partie "graphique"... Il faut maintenant que je lui donne vie.

transfert

En le parcourant je pense qu'on comprend assez vite à quoi il va servir ! Transférer des produits d'un point de vente à un autre.

Il y a plusieurs choses que je dois mettre en place (j'ai affecté la macro d'ouverture de l'UF à un icône sur ma feuille)

  • Je voudrais dans un premier temps restreindre l'ouverture de l'UF, via le clic sur l'icône, si C28 contient VRAI
Sub Transferts()
    If Sheets("GESTILIV").Range(C28) = "VRAI" Then
        UF_TRANSFERT.Show
    Else
        Exit Sub
    End If
End Sub

Voici le bout de code que j'ai tenté mais ça ne fonctionne pas, débogage à la 2e ligne...

Merci

Oups... Encore posté trop vite !

Sub Transferts()
    If Range("C28").Value = "VRAI" Then
        UF_TRANSFERT.Show
    Else
        Exit Sub
    End If
End Sub

Cela fonctionne comme ça. Si il y a "mieux" à écrire n'hésitez pas !

  • Donc voici mon second objectif : empêcher de sélectionner 2 fois la même option dans les 2 cadres d'options, là vraiment je ne sais même pas par quoi commencer. Actuellement il n'y a aucun code affecté aux cadres ni aux 6 boutons d'options, faut-il commencer par là ?

Je souhaite que pour chaque PRODUIT sélectionné et pour chaque ORIGINE une liste de choix numérique s'affiche dans QUANTITE

Par exemple à NGAPAROU il y a en stock 23 RUSTIQUES donc liste déroulante QUANTITE de 1 à 23. Où 23 est récupéré dans une cellule du fichier

Bonsoir,

ABCD
1PRODUITSSOMONENGAPAROUSALY
2RUSTIQUE233415
3BOULES91223
4BAGUETTE1173
5BRIOCHE817

Si je sélectionne NGAPAROU et BAGUETTE la liste déroulante QUANTITE doit proposer un choix de 1 à 7 puisque C4 = 7

Est-ce suffisant pour m'aider ?

Mais vraiment dans un premier temps je voudrais réussir à faire ceci :

Donc voici mon second objectif : empêcher de sélectionner 2 fois la même option dans les 2 cadres d'options, là vraiment je ne sais même pas par quoi commencer. Actuellement il n'y a aucun code affecté aux cadres ni aux 6 boutons d'options, faut-il commencer par là ?

Voici un fichier adapté pour essayer d'être plus lisible dans ma demande. J'ai essayé de reproduire au mieux le contexte du fichier original.

Merci

11classeur1.xlsm (29.93 Ko)

Re,

ça ne m'aide pas ton fichier. Il y a une liaison avec un autre fichier. Le formulaire n'a aucun code. Le minimum pour un formulaire c'est de l’initialiser.Ce que tu demandes est faisable. Mais un peu plus loin dans ta démarche.

Bonjour,

Il y a une liaison avec un autre onglet oui, pour les résultats dans les cellules, mais peu importe non ? Ces sont les résultats dans les cellules qui servent à l'UserForm pas la façon dont on les a obtenus ou bien c'est important ? Le formulaire n'a aucun code.... Et pour cause, c'est ce que cherche à faire, mais je ne sais pas par quoi commencer (cf le titre de la discussion : MON PREMIER USERFORM).

Le minimum pour une formule c'est de l'initialiser

De quelle formule parlez-vous ?

J'ai modifié le fichier pour qu'il n'y ai que des chiffres et plus de formules. Les boutons d'options ORIGINE déterminent, dans l'ordre, les colonnes en rouge M, N et 0. La sélection de la liste déroulante PRODUITS détermine la ligne (entre 3 et 20) et donc la combinaison colonne/ligne donne une valeur dont je veux me servir pour la liste déroulante QUANTITE. Si M4 = 20 alors choix liste déroulante QUANTITE de 1 à 20

Merci de vous intéresser au problème.

6classeur1.xlsm (27.62 Ko)

Pour avancer un peu j'essaie actuellement de sélectionner une colonne lors de la sélection d'un bouton mais j'ai une erreur :

Erreur d'execution '1004'

La méthode SELECT de la classe Range a échoué.

Private Sub NGAP_ORIGINE_Click()
    If NGAP_ORIGINE.Value = True Then
        Sheets("LIVRAISON").Range("NGAP_origine").Select
    Else
        Exit Sub
    End If
End Sub

Où (NGAP_origine) est un NOM représentant la colonne (M3:M20)

Est-ce que cette partie du code est nécessaire par ailleurs ?

    Else
        Exit Sub
    End If

Merci

J'ai réussi à faire sélectionner les colonnes via les boutons d'options :

Private Sub NGAP_DESTINATION_Click()
    If NGAP_DESTINATION.Value = True Then
        Application.Goto Range("NGAP_transfert")
    Else
        Exit Sub
    End If
End Sub

Private Sub NGAP_ORIGINE_Click()
    If NGAP_ORIGINE.Value = True Then
        Application.Goto Range("NGAP_transfert")
    Else
        Exit Sub
    End If
End Sub

Private Sub SALY_DESTINATION_Click()
    If SALY_DESTINATION.Value = True Then
        Application.Goto Range("SALY_transfert")
    Else
        Exit Sub
    End If
End Sub

Private Sub SALY_ORIGINE_Click()
    If SALY_ORIGINE.Value = True Then
        Application.Goto Range("SALY_transfert")
    Else
        Exit Sub
    End If
End Sub

Private Sub SOMONE_DESTINATION_Click()
    If SOMONE_DESTINATION.Value = True Then
        Application.Goto Range("SOMONE_transfert")
    Else
        Exit Sub
    End If
End Sub

Private Sub SOMONE_ORIGINE_Click()
    If SOMONE_ORIGINE.Value = True Then
        Application.Goto Range("SOMONE_transfert")
    Else
        Exit Sub
    End If
End Sub

Il faut que je réussisse maintenant à définir la ligne avec le choix de la liste déroulante PRODUITS

Private Sub COMBO_PRODUITS_Change()
    If COMBO_PRODUITS.Value = 1 Then
        Application.Goto Sheets("LIVRAISON").Range("M3:03")
    Else
        Exit Sub
    End If
End Sub

Comment écrit-on le code pour définir le choix de la liste déroulante ? Si par exemple je choisis le premier choix de la liste comment l'écrire ?

If COMBO_PRODUITS.Value = 1
If COMBO_PRODUITS.Value = "NOM"
If COMBO_PRODUITS.Value = Item1
If COMBO_PRODUITS.Value = ???

Faut-il écrire un code pour chaque choix ? la liste de choix est fixe, il y en a 17 (17 produits). Ou encore est-ce préférable de passer par des cases à cocher pour chaque produit ?

Merci

Bonjour nicodak,

Je vais commencer tout à zéro. Apparemment tu es perdu dans tes codes.

1° Les chiffres dans ton fichier correspondent à quoi ?

1° Les chiffres dans ton fichier correspondent à quoi ?

Ce sont des volumes de production, des quantités de produits

pour chaque point de vente (NGAP, SALY et SOM soit colonne M, N et O) il y a une quantité de produits disponible.

Re,

Je prends toujours comme modèle de fichier à travailler le fichier tu as mis à la dispo.

Si j'ai bien compris, il y a plusieurs créneaux de production 6 h, 9 h et 11 h dont le total est remis à coté de chaque produit.

J'ai compris que tu voulais mouvementé les produits entre les différents sites de production.

Quelle est la finalité des colonnes allant de Q à V ?

Je vous remercie de votre intérêt Raja, je m'aperçois que je ne suis pas aussi clair que je le pensais... J'ai la tête dans ce fichier depuis des semaines et donc peut-être je ne suis pas aussi clairvoyant et explicite qu'il le faudrait.

L'UserForm ne concerne que les données des 3 colonnes de 11h00 que j'ai mis en fond rouge. J'aurais du supprimer tout le reste effectivement. Les volumes de produits ne sont pas à fabriquer mais à livrer.

Il arrive parfois qu'un volume de livraison pour un point de vente donné (calculé automatiquement dans le fichier) soit trop important et je souhaite donc transférer une partie des produits sur un autre point de vente.

D'où mon idée de cet UserForm... une fois que l'on a sélectionné l'origine, le produit et la quantité on le transfert selon la sélection destination.

SI les réglages bouton_option ORIGINE/liste déroulante détermine une cellule dont la valeur est de 23 par exemple alors dans quantité j'aimerais une liste de choix allant de 1 à 23, le chiffre choisi alors est soustrait à la valeur ORIGINE et additionné à la valeur DESTINATION (cellule déterminé par le couple liste déroulante/ bouton_option DESTINATION).

Je sais plus si je suis clair ou fou !

Merci RAJA

Bonsoir,

Voir PJ et à tester car je n'ai pas eu le temps de tout regarder. Reviens vers le forum pour l'améliorer. Ce n'est pas évident de tout expliquer. Regarde le code pour essayer de comprendre. Il va y avoir surement des bugs. Car c'est un programme informatique à la base.

Bonsoir Raja,

Un grand merci pour votre travail et le temps que vous avez consacré à mon problème. C'est très aimable de votre part.

Je viens de tester l'UserForm et il fonctionne comme attendu, vous avez très bien compris ce qu'il me fallait. Je vais maintenant prendre le temps de le transférer sur le fichier original et examiner le code pour voir si je peux y comprendre quelque chose... Ce qui n'est pas gagné à première vue.

J'ai remarqué quelques dysfonctionnement comme vous le prévoyiez mais ils n'empêchent pas son utilisation. Je reviens vers vous dès que je l'aurais testé plus longuement.

Encore un grand merci.

Je me suis un peu emballé, il n'y a pas quelques dysfonctionnement, mais un seul : dans la liste déroulante QUANTITE si on choisit une ORIGINE puis un PRODUIT puis finalement on change d'ORIGINE ou de PRODUIT la liste des quantités s'accumulent. Par exemple si la première fois on choisi NGAPAROU/RUSTIQUE la liste affiche de 1 à 25 puis finalement on choisi CÔTOISE la liste affiche de 1 à 17 puis de 1 à 25 et si l'on change de produit cela s'allonge encore.

Je regarde le code pour voir mais je vous le signale tout de même.

J'ai changé quelques bricoles, notamment remplacé les Visible par Enabled je trouve que graphiquement c'est plus joli et ai retiré une ligne en fin de code afin que l'UserForm reste ouvert même en fermant la boite de dialogue erreur en cas de non sélection d'une quantité.

Tout le reste fonctionne à merveille !

Re,

Tu as bien fait en mettant la propriété "Enabled" à la place de "Visible". J'ai rectifié le bug de cumul des quantités avec ce code juste avant la boucle For :

COMBO_QUANTITE.Clear

. Teste et dis-moi.

5classeur1.xlsm (37.29 Ko)

PS : Je n'ai pas eu vraiment beaucoup de temps pour réfléchir. Comme tu as insisté, je me suis forcé à faire vite le code. On peut toujours l'optimiser.

Effectivement c'est beaucoup mieux comme ça concernant la liste déroulante QUANTITE. Toutefois maintenant il est impossible d'effectuer plusieurs transferts à la suite, après le premier si on choisi une nouvelle origine il y a un message d'erreur.

annotation 2020 09 04 190352

Il y aurait peut-être une chose à rajouter, c'est l'impossibilité de cliquer 2 fois sur VALIDER sans faire aucun changement de choix auparavant, cela éviterait un doucle-clic malencontreux et un double transfert. Ou encore d'empêcher de sélectionner un produit dont les cases de volume sont vides (produit non fabriqué ce jour)

Mais tout ça n'est pas pressé Raja, vous n'êtes pas obligé d'optimiser le code encore et encore, vous avez fait déjà un grand travail.

A tester :

7classeur1.xlsm (37.31 Ko)
Rechercher des sujets similaires à "mon premier userform"