Remplacer une InputBox par un Userform

Bonjour à tous,

Dans le fichier joint" charge planifiée", je voudrais remplacer les 2 Inputbox situées dans le module 5, autre_charge_pas_planifié et autre_charge_pas_sap, par un userform.

Dans ce userform, je dois y indiquer un temps en hh:mm.

L'inputbox ne me convient pas car je ne veux pas que la croix en haut à droite de la fenêtre et que le bouton annuler apparaissent.

J'aimerais aussi que la valeur entrée dans le userform soit contrôlée pour être certain que le format hh:mm soit respecté et que la "donnée" entrée dans ce userform ne soit pas vide.

Merci d'avance§

jojolafrite

17visu.xlsm (340.91 Ko)

Bonjour,

Cela fait beaucoup d'exigences, mais la première à respecter par le demandeur est de désactiver les modifications d'interface.

Ensuite, sachant que je vais trouver 5 modules standard au moins et que c'est vraisemblablement au moins 3 sinon 4 de trop, mon exigence est de les réduire à 1, ou éventuellement 2 si le second est justifié par la nature du code.

Ensuite viendra le code indenté, je ne préjuge pas mais s'il ne l'est pas ou s'il allonge par trop la lecture, je ne lis pas !

Ensuite, on attendra les indications précises pour trouver où se trouve la question à traiter, sans avoir à la chercher.

Enfin, on pourra se pencher sur la recevabilité des demandes...

Cordialement.

bonjour

salut au passage MFerrand

jojo,

tu veux faire "bien" et joli

mais visiblement tu connais mal Excel, sans vouloir te fâcher

sur le forum tu trouveras de l'aide de très haut niveau en VBA

pourtant je te propose de commencer par faire un chouette fichier bien Excel

comme ceci :

ne conserve que la feuille "données", supprimes les autres

tu saisiras directement dans cette feuille

sans JAMAIS archiver de ligne (si besoin mets une colonne "Travail terminé" dans laquelle tu mets un X (ajoute sur toute la ligne une MFC en vert quand il y a X

menu Accueil "mettre sous forme de Tableau". Si tu ne connais pas, il FAUT le faire et tu verras la puissance d'Excel (en fait il fera des tonnes de choses automatiquement, à ta place)

tu pourras faire des TCD pour faire des bilans (pas sûr que les gens de SAP te les fassent depuis leur truc)

connais-tu les TCD ?

pour l'instant, mets les formulaires de côté, tu apprendras VBA dans un ou 2 ans. Ne les utilises pas.

apprends Excel et ses extraordiaires possibilités en gestion de données

y compris par exemple l'extraction de données SAP ! des millions de données. Il les digère et te les présente dans des TCD et graphiques !

(Power Query est une annexe incluse dans Excel 2016, mais tu la téléchargeras)

j'ai failli oublier : ne JAMAIS fusionner de cellules ! problèmes en vue droit devant.

fais des centrages avec "aligné sur colonnes" (tu connais ? )

dernière chose : n'imite jamais SAP.

rebonjour

n'étant pas expert en vba, il m'est impossible de réduire ce programme à 1 ou 2 modules.

Pour la désactivation de la modification d'interface, je ne sais pas ce que ça veut dire, désolé...

Si ça peut vous faciliter la tâche, j'ai mis ci-dessous, la partie du code que j'aimerais modifier.

Merci .

Public Sub autre_charge_pas_planifié(nom As String, fritt As String, nr_prog As String, sap As Long, poid As String, temp As String, con As String)
Dim wks As Worksheet
Dim i As Integer

Set wks = Worksheets("données")
i = wks.Cells(1048576, 1).End(xlUp).Row + 1
wks.Cells(i, 1).Value = fritt
wks.Cells(i, 2).Value = nom
wks.Cells(i, 3).Value = Now
duree = Module3.calcule_duree(nom, nr_prog)
    If duree = 0 Then
        duree = InputBox("Il n'y a pas de valeurs pour estimer la durée du programme. Veuillez entrer la durée sous la forme hh:mm pour la charge: ")
    End If
wks.Cells(i, 4).Value = duree
wks.Cells(i, 5).Value = wks.Cells(i, 3).Value + wks.Cells(i, 4).Value
wks.Cells(i, 6).Value = Module3.nr_charge(nom)
wks.Cells(i, 7).Value = sap
If temp <> "" Then wks.Cells(i, 8).Value = temp
If nr_prog <> "" Then wks.Cells(i, 9).Value = nr_prog
If poid <> "" Then wks.Cells(i, 10).Value = poid
wks.Cells(i, 11).Value = Depart_point.tb_nr_op.Value
If con <> "" Then wks.Cells(i, 12).Value = con
Call Module5.decal(nom, wks.Cells(i, 5).Value, sap)

bonjour jmd,

merci pour ces précieux conseils,

effectivement Excel est très puissant et ses possibilités sont immenses.

J'utilise régulièrement Power Query et les TCD. Je ne maîtrise pas toutes les finesses de ces derniers, mais suffisamment pour exploiter une quantité de données qui , sans ces outils, me prendraient un temps fou.

Je n'ai pas pris le temps de vous expliquer la philosophie de ce fichier, qui fonctionne plutôt pas mal, mais qui présente de petits inconvénients, comme laisser cette fameuse InputBox vide ou cliquer sur la croix de cette même InputBox.

J'ai bien tenté d'utiliser un userform, "paramétrable" à souhait, mais je n'ai réussi qu'à faire des erreurs

Je n'abandonne pas mon idée d'utiliser un userform, je continue à lire des tutos et à visionner des vidéos. La persévérance est souvent payante.

Bonne soirée à tous et encore merci pour vos conseils.

jojolafrite

Bonjour,

Un essai ...

Je te laisse continuer. En regardant le code, je présume que tu es en mesure de fignoler à ton goût.

Le Userform, que j'ai nommé "TempsEnHH_MM", sert aux deux avec une variable publique "LesHeures" placée en haut du module 5.

Je te laisse la gestion de la saisie dans le textbox et le transfert de l'info (format à gérer) sous le bouton Fermer qui renseigne "LesHeures" ... puis, duree = LesHeures dans les deux macros.

ric

22charge-planifiee.xlsm (599.31 Ko)

Bonjour ric,

grand merci à toi !

Petite soirée entre amis, je regarde ton fichier un peu plus tard.

Bonne soirée et encore merci!

jojolafrite

voilà ric, j'ai testé et adapté à ma façon.

J'ai modifié le userform pour ne garder que les heures sans les minutes.

Dans la déclaration en haut du module, j'ai changé le type de la variable. Je l'ai déclarée en Variant pour que le code accepte les valeurs supérieures à 24.

Tout fonctionne comme voulu.

J'ai également "filtré" les erreurs de données entrées dans le userform, en utilisant Select Case.

Merci ric et bonne nuit.

Public Sub autre_charge_pas_sap(nom As String, fritt As String, nr_prog As String, sap As Long, poid As String, temp As String, con As String, sap_vieux As Long)
Dim wks As Worksheet
Dim i As Integer

Set wks = Worksheets("données")
i = Module3.chercher(sap_vieux)
wks.Cells(i, 4).Value = ""
wks.Cells(i, 1).Value = fritt
wks.Cells(i, 2).Value = nom
wks.Cells(i, 3).Value = Now

duree = Module3.calcule_duree(nom, nr_prog)

   If duree = 0 Then
      duree_prog.Show                'Appel du Userform

debut:
       Select Case lesheures         'lesheures=variable plubique renseigée dans le nouveau userform "duree_prog

         Case 1 To 240
         duree = lesheures & ":00"
         Case Is = ""
         duree_prog.Show
         GoTo debut
         Case Else
         duree_prog.Show
         GoTo debut

       End Select

   End If

jojolafrite

Bonjour jojo la frite,

tu a écrit :

j'ai testé et adapté à ma façon.

Tout fonctionne comme voulu.

J'ai également "filtré" les erreurs de données...

bravo pour tous tes efforts ! j'trouve que ça mérite bien un ! (et p't'être que ric t'en attribuera un autre ? )

c'est sympa aussi de pas avoir oublié d'passer le sujet en résolu !

dhany

Bonsoir dhany,

Merci pour tes encouragements ! Je n'ai pas fait de programmation de haut vol, mais je suis content du résultat !

Bonne nuit et à bientôt, je sais que j'aurai encore besoin des bons conseils des membres de ce forum.

jojolafrite

Bonjour à tous.

Je vais donc cesser de me chasse la tête avec le masque de saisi de droite à gauche.

Je suis bien heureux que ça fonctionne maintenant à ton goût.

ric

Merci pour l'add-in qui permet d'indenter automatiquement.

J'essaie dès demain !

Bonne nuit et à très bientôt.

jojolafrite

merci pour les pop-corn et les frites !

bonne nuit à toi aussi, et à très bientôt.

dhany

Bonjour à tous,

@jojo la frite, ... si cela peut t'être utile ... puisque tu as mentionné vouloir changer les inputbox pour des userform afin de gérer la saisie du temps.

On saisit 1, 2, 3 ou 4 chiffres dans le textbox sous le format hh:mm commençant à droite vers la gauche.

Si les 2 derniers chiffres sont plus grands que 60, une heure est ajoutée et le restant des minutes est inscrit.

C'est un textbox, le contenu est immanquablement du texte.

ric

Bonjour ric,

Merci pour ces explications sur les inputbox.

Effectivement, je dois gérer le temps en hh:mm, mais je dois surtout me débarrasser de la croix de fermeture de la fenêtre et du bouton annuler. Les utilisateurs du programme s'en servaient pour annuler une erreur de saisie, sauf que ça n'annulait rien.

En passant par le userform, j'ai pu désactiver la croix et ne mettre qu'un bouton.

Je vais maintenant promener mon chien, qui doit utiliser l'application On Time : il me réveille tous les jours à la même heure !

Rechercher des sujets similaires à "remplacer inputbox userform"