XL 2010 pages recap

fabrice31

XLDnaute Junior
bonjour,

tout d'abord, merci à Vgndron pour mon dernier problème, et à tous ceux qui nourrissent ce forum.

voici mon nouveau dilemme:
j'aimerai avoir un page de recap de mon suivi matériel évolutif en fction de la date du jour.
en sélectionnant une période grâce à 2 liste déroulantes (année / mois + trim), ou calendrier "de....à..." avec "à" aujourdhui() auto, je voudrai compiler les infos obtenue dans les pages suivantes à partir de la date du jour.
pb: sur la feuille 'année N', j'ai 1 semaine N-1 et 1 mois N+1. je ne veux pas compter 2 fois ces infos. (possibilité de supprimer ce système, mais je préférerai le garder.
je ne vois pas comment intégrer dans mes formule l'idée de commencer à telle date (liste déroulante) jusqu’à aujourd’hui....

mon fichier en PJ

en félicitant ceux qui ont compris, et remerciant ceux qui plancheront
 

Pièces jointes

  • tableau Off.xlsm
    1.2 MB · Affichages: 30

vgendron

XLDnaute Barbatruc
Pour t'éviter de saisir une date de fin de réparation "prévue" je te propose ce code qui remplace l'existant
VB:
Private Sub TextBoxR3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Len(TextBoxR3) <> 0 And Len(TextBoxR3) <> 10 Then
    MsgBox "date au format jj/mm/aaaa", vbInformation + vbOKOnly, "ERREUR"
    Cancel = True
ElseIf Len(TextBoxR3) <> 0 Then 'ajouter un test pour éviter de saisir une date future...
    If CDate(TextBoxR3) > Date Then
        MsgBox ("Date future non autorisée - Saisissez une date <= aujourd'hui")
        Cancel = True
    End If
End If
End Sub
 

vgendron

XLDnaute Barbatruc
pour ce qui est de charger les infos de Réparation et/ou Etalonnage..
puisque que tu préfères avoir des textbox pour la réparation (TextBoxR) ET des textbox pour l'étalonnage (TextBoxE), on peut donc changer la macro de chargement pour toujours tout charger (que ce soit un R ou en E

VB:
Sub charger(Caract As String, line As Variant, feuille As Variant)
'récupère les infos qui sont dans la feuille excel
With Sheets("" & feuille & "")
    Select Case Caract
        Case "R", "E" 'cas Réparation
            TextBoxR1 = .Range("H" & line) 'date du devis
            TextBoxR2 = .Range("I" & line) 'début réparation
            TextBoxR3 = .Range("J" & line) 'fin réparation
            TextBoxR4 = .Range("K" & Ligne) 'Motif réparation
           
            TextBoxE1 = .Range("E" & line) 'début Etalonnage
            TextBoxE3 = .Range("G" & line) 'fin Etalonnage
            TextBoxE2 = .Range("F" & line) 'Date Prévue Etalonnage
       
'        Case "E" 'Cas Etalonnage
'            TextBoxE1 = .Range("E" & line) 'début Etalonnage
'            TextBoxE3 = .Range("G" & line) 'fin Etalonnage
'            TextBoxE2 = .Range("F" & line) 'Date Prévue Etalonnage
           
        Case "S" 'Cas Stock
        Case "C" 'Cas Chantier
    End Select
End With
End Sub
 

fabrice31

XLDnaute Junior
j'ai rajouté ca dans sub charger
Code:
 Case "S" 'Cas Stock
            TextBoxE2 = .Range("F" & line) 'Date Etalonnage             ' sert de rappel
            If CDate(TextBoxE2) < Date Then                             ' en rouge si E en retard
            TextBoxE2.Font = RGB(255, 0, 0)
            End If
        Case "C" 'Cas Chantier
            TextBoxE2 = .Range("F" & line) 'Date Etalonnage             ' sert de rappel
            If CDate(TextBoxE2) < Date Then                             ' en rouge si E en retard
            TextBoxE2.Font = RGB(255, 0, 0)
            End If
 

vgendron

XLDnaute Barbatruc
non. sinon si..

en fait, je voulais mettre If Len(TextBoxR3) <> 0 and CDate(TextBoxR3) > Date
sauf que ca bug lorsque la textbox est vide.. ,
parce que VBA evalue TOUS les éléments de la ligne
len (textboxR3)<>0 renvoie faux
cdate(TextBoxR3) lui renvoie une erreur.. puisque TextboxR3 est vide
du coup. suis obligé de décomposer en deux if.. ..
 

vgendron

XLDnaute Barbatruc
puisque tu fais la meme chose que ce soit S ou C, tu peux réduire le code à
VB:
Sub charger(Caract As String, line As Variant, feuille As Variant)
'récupère les infos qui sont dans la feuille excel
With Sheets("" & feuille & "")
    Select Case Caract
        Case "R", "E" 'cas Réparation OU Etalonnage
            TextBoxR1 = .Range("H" & line) 'date du devis
            TextBoxR2 = .Range("I" & line) 'début réparation
            TextBoxR3 = .Range("J" & line) 'fin réparation
            TextBoxR4 = .Range("K" & Ligne) 'Motif réparation
         
            TextBoxE1 = .Range("E" & line) 'début Etalonnage
            TextBoxE3 = .Range("G" & line) 'fin Etalonnage
            TextBoxE2 = .Range("F" & line) 'Date Prévue Etalonnage
         
        Case "S", "C" 'Cas Stock OU cas "Chantier"
            TextBoxE2 = .Range("F" & line) 'Date Etalonnage             ' sert de rappel
            If CDate(TextBoxE2) < Date Then TextBoxE2.Font = RGB(255, 0, 0)  ' en rouge si E en retard
    End Select
End With
End Sub
 

fabrice31

XLDnaute Junior
j'ai séparé E et R
VB:
Private Sub OptionButton_reparation_Change()
'separation des operations E et R obligatoire

For i = 1 To 4
    Me.Controls("TextBoxR" & i).Enabled = OptionButton_reparation And Me.Controls("TextBoxR" & i) = ""
Next i
TextBoxR4.Enabled = True

For i = 1 To 3
    Me.Controls("TextBoxE" & i).Enabled = False  ' tout bloquer
Next i

'textboxR3 (fin de reparation) est rentrée en dernier. si elle est saisie, reprendre les infos dans 'suivi reparation'
'et effacer la partie reparation de la ligne materiel

Call charger("R", Ligne, feuille)

End Sub

Private Sub OptionButton_etalonnage_Change()

For i = 1 To 4
    Me.Controls("TextBoxR" & i).Enabled = False
Next i

For i = 1 To 3
    Me.Controls("TextBoxE" & i).Enabled = OptionButton_etalonnage And Me.Controls("TextBoxE" & i) = ""
Next i

Call charger("E", Ligne, feuille)

End Sub
 

vgendron

XLDnaute Barbatruc
Ca ne sert à rien de sérparer.. parce que de toute facon.. le code ira dans les deux..
donc. en séparant. tu fais deux fois la meme chose...

pour t'en convaincre..
ajoute les msgbox comme ci dessous au début du Optionbutton_Reparation
VB:
Private Sub OptionButton_reparation_Change()
MsgBox OptionButton_reparation
MsgBox OptionButton_etalonnage
'pas besoin de coder OptionButton_Etalonnage qui est lancé systématiquement à la suite de celui ci
'OptionButton_Etalonnage et OptionButton_Réparation sont liés

lance le formulaire
choisi un numéro
et clique alternativement sur Etalonnage puis Reparation puis etalonnage..
tu vas voir que quand Etalonnage passe à vrai. automatiquement Reparation passe à faux. et vice versa.
 

fabrice31

XLDnaute Junior
on peut rajouter le controle da date de R3 ici??
VB:
Private Sub TextBoxR3_Change() 'pour controler la saisie d'une date au format dd/mm/yyyy
Dim valeur As Byte
valeur = Len(TextBoxR3)
If valeur = 2 Or valeur = 5 Then
TextBoxR3 = TextBoxR3 & "/"   '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
    If ((Split(TextBoxR3, "/")(0) > 31) Or (Split(TextBoxR3, "/")(1) > 12) Or (Split(TextBoxR3, "/")(2) < 1900)) Then
    TextBoxR3 = ""
    MsgBox "La date est fausse", vbOKOnly, "etalonnage"
    End If
    If CDate(TextBoxR3) > Date Then
        MsgBox ("Date future non autorisée - Saisissez une date <= aujourd'hui")
        Cancel = True
    End If
End If
End Sub
 

vgendron

XLDnaute Barbatruc
si tu préfères mettre le controle de date dans l'évènement change plutot qu'exit. je ne vois pas de problème...
du coup. faudrait peut etre mettre aussi un test pour empecher de saisir une date de fin AVANT la date de début...(ce qui provoque un bug pour la fonction MettreCaractEntreDates...

et faire la meme chose pour les dates d'étalonnage..
 

fabrice31

XLDnaute Junior
allez, 2 choses sur le sujets de E et R:
- TBR4 doit être libre même si il est rempli (en mode réparation bien sur, mais je trouve pas ou le placer)
- du coup, quelle utilité de recharger a chaque fois qu'on change E et R puisqu'on charge les 2 a chaque fois...?

aussi, obliger de cliquer 2 fois apres saisie de no_kalilab pour faire remonter les infos.


dsl, faut que j'y aille.
j'ai fait de petite mise a jour et correction

merci pour ta patience!

bonne soirée
 

Pièces jointes

  • tableau Off5.xlsm
    1.3 MB · Affichages: 21

vgendron

XLDnaute Barbatruc
Hello

Pour continuer, j'ai besoin de clarification..

déjà. on va vérifier que le fonctionnement est celui attendu:

1) à l'intialisation du formulaire
Les textbox sont vides et les optionsbutton sont inactifs

2) tu peux juste saisir un Numéro
dès sa saisie, on vérifie qu'il existe dans la feuille de l'année en cours
==>si n'existe pas. on arrete et on attend un nouveau numéro
==>si existe
on active tous les boutons par défaut
on revide les cases (au cas ou on aurait changé de numéro de kalilab en cours de route
on va chercher les infos (de réparation et etalonnage)
-->si il y a une réparation en cours (colonne H) alors on bloque tout et on ne laisse accessible que le motif et la fin de réparation

--> si il y a un étalonnage en cours (colonne E) alors on bloque tout , on ne laisse accessible que la fin d'étalonnage ET le bouton "réparation": on peut découvrir que l'appareil doit etre réparé.

-->sinon, on laisse tout accessible

3) Le chargement des infos
finalement, avant meme de choisir R E S ou C, on charge toutes les infos..
si j'ai bien compris; une réparation terminée ou un etalonnage terminée ne sont PLUS dans la feuille.. donc ne peuvent pas etre chargés... donc les tests de date en retard ne servent à rien. ou ne sont pas à la bonne place..

dans le cas S ou C, tu remets la date d'étalonnage (colonne F) dans le TextBoxE2.. pourquoi ce n'est pas le E3 ?? erreur??
si c'est bien le E2 (faudra donc m'expliquer pourquoi)..
dans le cas R ou E,
pour quoi faire un test sur son retard ou pas.. alors que tu as désactivé le chargement de ce textbox?

4) la validation
cas Réparation:
si il n'y a pas de fin de réparation, alors, on recopie les infos dans la feuille année
sinon (la réparation est terminée) on recopie les infos dans la feuille de suivi et on efface dans la feuille Année ==> impose que la date de fin de réparation DOIT etre <= aujourdhui et >date début de réparation
pour le MettreCaractEntreDates.. peut etre faut il le faire UNIQUEMENT si la réparation est terminée?


Cas Etalonnage:
c'est la meme chose?? (pour l'instant. ce n'est pas codé dans ce sens)

Cas Chantier ou Stock: on met juste un caractère sur la date du jour. ?
 

Pièces jointes

  • tableau Off5b.xlsm
    1.3 MB · Affichages: 14

Discussions similaires

Réponses
5
Affichages
192
Réponses
46
Affichages
871

Statistiques des forums

Discussions
312 249
Messages
2 086 603
Membres
103 260
dernier inscrit
NHOURRA