XL 2010 reglage userform

fabrice31

XLDnaute Junior
bonjour a tous,

déjà, merci à ceux qui répondent: vous m'avez déjà bcp aidé!
mais la, je bloque depuis 1 semaine...(j'ai plus bcp de cheveux!)

voici mon 1er userform...:
combobox depuis liste de données (qui ne remonte pas)
3 textbox
2 boutons

plusieurs choses:
la combobox est vide (il faudrait la colonne C de "données")
le curseur ne bouge pas et les boutons inactifs
Pb au lancement depuis bouton 182

une fois que cela marche, j'aimerai intégrer les données dans chaque feuille annuelle, à la suite du modèle précisée ds le combobox.... mais j'essaierai.

voici mon code: attention, c'est du patchwork!! :)


Private Sub CommandButton1_Click()
Unload Me
End Sub


Private Sub UserForm_Initialize() 'parametrage USF
mon_userform.Height = 250
mon_userform.Width = 240
ComboBox_pompe.AddItem "AC-SPERHI Mystrale"
ComboBox_pompe.AddItem "AC-SPERHI Expert Autonome"
ComboBox_pompe.AddItem "AC-SPERHI Mystrale Autonome"
ComboBox_pompe.AddItem "C&S - SMART PUMP 1.6"
ComboBox_pompe.AddItem "C&S - SMART PUMP B"
ComboBox_pompe.AddItem "DELTANOVA GH18G3"

End Sub

Private Sub CommandButton2_Click() 'alerte erreur
If TextBox_serie.Value = "" Then
Label1.ForeColor = RGB(255, 0, 0)
ElseIf TextBox_MES.Value = "" Then
Label2.ForeColor = RGB(255, 0, 0)
ElseIf TextBox_etalonnage.Value = "" Then
Label3.ForeColor = RGB(255, 0, 0)
ElseIf ComboBox_pompe.Value = "" Then
Label.ComboBox_pompe.ForeColor = RGB(255, 0, 0)
Else

Dim modele As String, no_ligne As Long, lastrow As Long

If ComboBox_pompe.Value <> "" Then
modele = ComboBox_pompe.Value

lastrow = Range("B" & Rows.Count).End(xlUp).Row 'recherche emplacement insertion données
For i = lastrow To 8
If Cells(i - 1, 2) = modele Then
Row(i).Insert shift:=xlDown
Next

no_ligne = i + 1

Range(no_ligne, 1) = textbox_kalilab.Value 'insertion données
Range(no_ligne, 3) = TextBox_serie.Value
Range(no_ligne, 4) = TextBox_MES.Value
Range(no_ligne, 5) = TextBox_etalonnage.Value

OptionButton2.Value = True 'reinitialisation
TextBox_serie.Value = ""
TextBox_MES.Value = ""
TextBox_etalonnage.Value = ""
ComboBox_pompe.Value = ""
End Sub


merci d'avance.

fabrice
 

Pièces jointes

  • Planificateur base.xlsm
    1.6 MB · Affichages: 21

vgendron

XLDnaute Barbatruc
Voici une rev 4
j'ai remis tes codes pour le Ucase
j'ai ajouté un test pour voir si le Kalilab existe déjà avec le numéro de série (fonction evaluate(sommeprod))

et pour la formule. elle est bien mise à jour.. pour peu qu'il y en ait une :)
dans la feuille 2017, il y a une formule, ainsi que 2018
pour les autres feuilles;. ce ne sont que des valeurs (tu as du faire un copier coller valeur à un moment sans t'en rendre compte)
 

Pièces jointes

  • Planificateur base Rev4.xlsm
    1.2 MB · Affichages: 22

fabrice31

XLDnaute Junior
je pense qu'on est pas mal, sauf:
le controle des N° serie et kalilab
en cas d'anomalie sur les date (par ex: mois=25), la macro pète au lieu de mettre un message d'erreur
je retravaille dessus.
Code:
Private Sub TextBox_MES_Change() 'pour controler la saisie d'une date au format dd/mm/yyyy
Dim valeur As Byte
valeur = Len(TextBox_MES)
    If valeur = 2 Or valeur = 5 Then
    TextBox_MES = TextBox_MES & "/"   'afficher "/" aprés la saisie des 2 premiers chiffres
    End If 'ajouter test pour vérifier la validité de la date saisie !
    If valeur <> 10 Then
    MsgBox "La date est au format dd/mm/yyyy", vbOKOnly, "MES"
    Label3.ForeColor = RGB(255, 0, 0)
    End If
If valeur = 10 Then
    If ((Split(TextBox_MES, "/")(0) > 31) Or (Split(TextBox_MES, "/")(1) > 12) Or (Split(TextBox_MES, "/")(2) < 1900)) Then
        MsgBox "La date est fausse", vbOKOnly, "MES"
        Exit Sub
    End If
End If
End Sub
 

vgendron

XLDnaute Barbatruc
le controle des N° serie et kalilab
en cas d'anomalie sur les date (par ex: mois=25), la macro pète au lieu de mettre un message d'erreur

pour le controle, faudra juste clarifier quel test tu souhaites faire:
faut il juste vérifier que le numéro de Kalilab existe?
ou que le numéro de série,
ou les deux en meme temps (cas actuel)
en gros. dans quelle condition est on autorisé à ajouter un matériel

pour les dates..
si macro pète = efface la date ==> alors oui, c'est ce qui est prévu :-D
j'avais fais ca pour moi, et je ne voulais pas de msgbox justement (oblige à un clic supplémentaire..)
mais après, si toi tu préfères, pas de souci
 

fabrice31

XLDnaute Junior
Pour le contrôle n*, je veux contrôler les 2, séparément.
Quand je dis que la date fait péter la macro, elle ouvre le débogage, au lieu de mettre un message d'erreur, mettre le label en rouge.
Dans l'idée, je voulais une msgbox pour un pb de format (8chiffres) et le label rouge si 41/14/2017.

Vraiment merci
 

vgendron

XLDnaute Barbatruc
Hello
Voici la version 5
il y a donc un controle d'existence du numéro de Kalilab et/ou numéro de série
avec message qui te liste les feuilles dans lesquelles il y a existence.

pour la date.. je ne comprend pas trop. chez moi ca fonctionne sans problème
si je saisi 41 /14 / 2018 (les / sont mis automatiquement), la date est effacée du textbox
 

Pièces jointes

  • Planificateur base Rev5.xlsm
    1.2 MB · Affichages: 22

fabrice31

XLDnaute Junior
salut,

j'ai voulu rajouté ça pour vérifier ma date car le probleme se pose quand je saisi: 41/14/17.
dans mon fichier, ca pète le code, et ça rentre une ligne a moitie remplie

Code:
Private Sub TextBox_MES_Change() 'pour contrôler la saisie d'une date au format dd/mm/yyyy
Dim valeur As Byte
valeur = Len(TextBox_MES)
    If valeur = 2 Or valeur = 5 Then
    TextBox_MES = TextBox_MES & "/"   'afficher "/" aprés la saisie des 2 premiers chiffres
    End If 'ajouter test pour vérifier la validité de la date saisie !
    If valeur <> 10 Then
    MsgBox "La date est au format dd/mm/yyyy", vbOKOnly, "MES"
    Label3.ForeColor = RGB(255, 0, 0)
    End If
If valeur = 10 Then
    If ((Split(TextBox_MES, "/")(0) > 31) Or (Split(TextBox_MES, "/")(1) > 12) Or (Split(TextBox_MES, "/")(2) < 1900)) Then
        MsgBox "La date est fausse", vbOKOnly, "MES"
        textbox_MES=""     
        Exit Sub
    End If
End If
End Sub

pb: la msgbox "La date est au format dd/mm/yyyy", vbOKOnly, "MES" apparaît à chaque frappe
il faut forcer le format à 10 chiffre ou changer le 17 en 2017 automatiquement (au plus simple)

pour le controle N°, c'est ok:
Code:
'test N°
    For m = 1 To i
        If .Range("C" & m) = TextBox_serie.Value Then
        MsgBox "N° série deja existant", vbExclamation + vbOKOnly, "alerte"
        Exit Sub
        End If
       
        If .Range("A" & m) = TextBox_kalilab.Value Then
        MsgBox "N° KALILAB deja existant", vbExclamation + vbOKOnly, "alerte"
        Exit Sub
        End If
    Next m
'fin test N°

j'avoue ne rien comprendre a ton code.....
pas besoin de contrôler chaque feuille puisque ce sont les mêmes. par contre, il faut bien bloquer l'insertion dans toutes les feuilles.

mais on touche au but!
je vais pouvoir attaquer la page de recap!!!!

merci bcp
 

vgendron

XLDnaute Barbatruc
le problème vient du fait que tu saisis une date sur 8 caractères . au lieu de 10 (2 pour année au lieu de 4)
peut etre qu'en ajoutant seulement ceci
VB:
Private Sub TextBox_MES_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Len(TextBox_MES) <> 10 Then Cancel = True 'ou msgbox("format date incorrect")
End Sub
 

vgendron

XLDnaute Barbatruc
plutot ce code..
le précédent était genant.. à partir du moment ou tu cliques dans la boite.. tu ne peux plus en sortir tant que tu n'as pas tapé une date.. donc. impossible de fermer le formulaire pour annuler..

avec celui ci.. si la boite est vide. tu peux en sortir
VB:
Private Sub TextBox_MES_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Len(TextBox_MES) <> 0 And Len(TextBox_MES) <> 10 Then Cancel = True
End Sub

code à recopier et adapter pour l'autre date..
 

fabrice31

XLDnaute Junior
voici ma sauce:
Code:
Private Sub TextBox_MES_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Len(TextBox_MES) <> 10 Then
Cancel = True
MsgBox "date au format jj/mm/aaaa", vbInformation + vbOKOnly
End If
End Sub
Private Sub TextBox_etalonnage_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Len(TextBox_etalonnage) <> 10 Then
Cancel = True
MsgBox "date au format jj/mm/aaaa", vbInformation + vbOKOnly
End If
End Sub

mais pas de remise à 0, donc msgbox en boucle, même avec bouton 'fermer'. obliger de fermer avec X et msgbox après fermeture...

Code:
cancel=true
c'est bien pour effacer le textbox??
 

fabrice31

XLDnaute Junior
Code (Text):
cancel=true
c'est bien pour effacer le textbox??

j'ai mis textbox_xx ="" et c'est ok

Code:
Private Sub TextBox_etalonnage_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Len(TextBox_etalonnage) <> 0 And Len(TextBox_etalonnage) <> 10 Then
TextBox_etalonnage = ""
MsgBox "date au format jj/mm/aaaa", vbInformation + vbOKOnly, "etalonnage"
End If
End Sub
avant de lire ton post :p

derniere chose, quand je rentre une date fausse, le curseur passe à l'autre textbox.
il faut un goto pour remettre le curseur dans la textbox à compléter?
 

fabrice31

XLDnaute Junior
Code:
Private Sub TextBox_etalonnage_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Len(TextBox_etalonnage) <> 0 And Len(TextBox_etalonnage) <> 10 Then
MsgBox "date au format jj/mm/aaaa", vbInformation + vbOKOnly, "etalonnage"
TextBox_etalonnage = ""
Cancel = True
End If
End Sub

je comprends pas ce qui va pas...
j'ai essayé de mettre
Code:
TextBox_etalonnage = ""
avant le msgbox, mais mon curseur disparait...

non. cancel=true c'est pour annuler l'évènement.. Exit..
quel événement?

désolé, mais je préfère comprendre vu ce qui m'attend après...
 

fabrice31

XLDnaute Junior
salut à tous, vgendron si tu suis tjrs ce fil,

je bloque sur un truc idiot je pense...
dans mon UF planning, j'ai rajouté une option 'poubelle' pour supprimer une ligne de mon tableau:
- je rentre mon n° de machine, je clique sur la poubelle
- le click fait apparaître le module poubelle
- je valide ma suppression
les infos du matériel sont enregistrées dans "pompes perdues"
puis je veux supprimer le matériel dans chaque onglet (2018/2019/2020)
pas de soucis pour 2018, mais 2019 et 2020 ne sont pas supprimées.

pourtant, quand je passe par le débogueur pas-à-pas, ca marche plutot bien (j'ai eu un cas de n° non trouvé alors qu'il y était.

merci de votre aide!

mode d'emploi:
ouvrez le classeur, puis bouton 'suivi matériel'.
tapez un n° kalilab (PXXX), poubelle, puis valider

le code est dans 'planning'
 

Pièces jointes

  • Tableau logistique matériel GR copie foutue.xlsm
    1.5 MB · Affichages: 40

Discussions similaires

Réponses
5
Affichages
320

Statistiques des forums

Discussions
311 709
Messages
2 081 774
Membres
101 816
dernier inscrit
Jfrcs