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
Hello Fabrice !

en félicitant ceux qui ont compris
Je crois que tu ne vas pas féliciter grand monde :-D hahaha

perso. je ne comprend pas ce que tu veux calculer et comment..?
pour les listes déroulantes. ca.. ok
pour la colonne "Modèle" OK
maintenant;. les calculs..
Q dispo: Q-Qe-Qr: c'est quoi? c'est quelles cellules.??
idem pour tous les calculs
 

Pièces jointes

  • tableau Off.xlsm
    1.2 MB · Affichages: 29

fabrice31

XLDnaute Junior
salut sauveur!

t'aime bien les défis...
vu que tu connais déjà le fichier, ca sera peut être plus simple...
je suis en train de faire un 2eme USF pour saisir facilement l'état de chaque matériel: Réparation, Etalonnage, Chantier, Stock. ( peut être devrais-je finir ça avant) pardon...(peut être m'aider à finir ça avant!!)
du coup, je veux utiliser ça pour effectuer des recap en fction de la periode sélectionnée. j'ai retravaillé les formules pour qu'elles soient plus explicites.
j'ai essayé avec un TDC, mais je maîtrise pas trop.

on peut remplacer les listes déroulantes par 2 calendriers? "de" et "à".
si je rentre 2 date (début et fin), est-il possible de remplir auto une ligne? 1 pompe en réparation du 01/01/2017 au 01/02/2017 => mettre R dans chaque case entre ces 2 dates?

Grand merci de ne pas te décourager...!!
 

Pièces jointes

  • tableau Off.xlsm
    1.2 MB · Affichages: 23

vgendron

XLDnaute Barbatruc
alors
1) il faudrait te forcer à garder une indentation du code régulière pour s'y retrouver plus facilement
2) j'ai remis le code tel qu'il avait été fait à la fin problème précédent. et je vois qu'il y a quelque chose qui n'est toujours pas clair..
pourquoi persister à faire des boucles de 8 à la fin pour trouver si le Kalilab et Numéro de série existent déjà?
la méthode find est bien plus rapide (equivalent du ctrl+F sous excel)

pour l'histoire d'inserer des lignes pour garder la formule..
déjà. pour garder une formule. il faut qu'elle soit présente à l'origine dans la feuille. ce qui n'est pas le cas dans le fichier :un coup tu as une formule, un coup tu as juste des valeurs..
et en plus. un coup la formule est en colonne F, un coup en colonne J (feuille 2017)

une fois que tu aura harmonisé tout ca, regarde les commentaires que j'ai remis dans le code

ensuite. pour la demande suivante...
euh. je n'ai toujours pas compris ce qu'étaient tes calculs.
Dans ta feuille Récap.. il y a plein de choses. mais je ne comprend pas ce qui doit etre une formule, et ou les mettre.
et pourquoi n'as tu pas repris les 2 petites infos que je t'ai données au début:
créer des listes de noms (Liste mois, Liste Année..; etc

et tout ca. c'est dans le nouveau formulaire? ou c'est autre chose ?
peux tu mettre un exemple en indiquant les données d'entrée (et ou elles sont) et le résultat attendu
 

Pièces jointes

  • tableau Off Rev2.xlsm
    1.2 MB · Affichages: 21

vgendron

XLDnaute Barbatruc
pour le code du bouton valider du nouveau formulaire
VB:
Private Sub CommandButton_valider_Click()
Dim fl As Worksheet, Sheettarget As Worksheet, c As String

For Each fl In Worksheets
    If fl.Name <> "Récap" And fl.Name <> "données" Then
        With fl
            pos = Application.Match(CLng(Date), Rows(6), 0) 'récupère la position de la date du jour dans la ligne 6
            If Not IsError(pos) Then 'si trouvée
                Set ici = .Range("A:A").Find(no_kalilab.Value, lookat:=xlWhole)
                If Not ici Is Nothing Then
                    .Cells(ici.Row, pos) = "ok"
                End If
            End If
        End With
    End If
Next fl
End Sub
 

fabrice31

XLDnaute Junior
re,

ton USF me fait sauter des lignes de matériel. je pense que le copie/colle foire quelque part...
en rentrant le premier modèle de pompe, numéro bison, kalilab à P1000, le ligne 58 disparaît. elle est effacée. si tu en rentre une deuxième, (P1001), c'est 2 ou 3 lignes qui sont effacées. et bien effacées, pas insérées. j'avais corriger ça a ma manière.

effectivement, ta méthode de recherche est bien plus courte. mais la mienne marchait, donc j'ai préféré garder celle que je connaissais pour pouvoir la modifier si jamais... je l'ai récupéré.
j'ai mis en place la liste de données liste_férie (même si j'ai du mal à les réutiliser, par exemple pour la deuxième liste de pompe sur le recap...), remis au propre mes tableaux.

j'ai pas le temps de refaire le nouveau USF. je m'en occuperai demain. idem pour les formules.
je t'ai mis "=......" pour dire ce que la formule devrait etre.
une partie du recap est au jour (compiler les infos de la date du jour)
l'autre est en fonction des dates saisies (le fameux "de.." et "à")...

je me repete mais merci pour ta patience.

bonne soirée
 

Pièces jointes

  • tableau Off.xlsm
    1.2 MB · Affichages: 25

fabrice31

XLDnaute Junior
pour le code du bouton valider du nouveau formulaire
VB:
Private Sub CommandButton_valider_Click()
Dim fl As Worksheet, Sheettarget As Worksheet, c As String

For Each fl In Worksheets
    If fl.Name <> "Récap" And fl.Name <> "données" Then
        With fl
            pos = Application.Match(CLng(Date), Rows(6), 0) 'récupère la position de la date du jour dans la ligne 6
            If Not IsError(pos) Then 'si trouvée
                Set ici = .Range("A:A").Find(no_kalilab.Value, lookat:=xlWhole)
                If Not ici Is Nothing Then
                    .Cells(ici.Row, pos) = "ok"
                End If
            End If
        End With
    End If
Next fl
End Sub

le coup du "ok" etait juste un test pour voir si l'enregistrement de la position marchait bien.
mais ca marchait pas chez moi. il faut enregistrer cette cellule pour y coller soit "S", soit "C" selon optionbutton_chantier ou _stock.

MERCI
 

vgendron

XLDnaute Barbatruc
ok.. je viens de comprendre... on ne parle pas de la meme formule..
moi, j'étais sur la formule en FIN de bloc. celle qui comptabilise le nombre de valeur négative dans le bloc..
toi. tu parlais de la formule DANS le bloc (je ne l'avais pas vue celle ci..)
et donc..
VB:
Rows(i + 1).ClearContents 'on efface la dernière ligne pour permettre de coller les nouvelles données
            Range("F" & i).Resize(2).FillDown 'C'est CETTE ligne qu'il manquait !!

par contre.. il y a quand meme cette histoire de colonne J pour la feuille 2017
cette feuille 2017 n'a pas la meme structure que les autres feuilles..
ce qui explique sans doute le
je pense que le copie/colle foire quelque part..

ton premier souci à régler je pense
que TOUTES les feuilles aient la meme structure
qu'il y ait des formules partout où il est censé y en avoir
et démasquer les colonnes C à F de la feuille 2020(b) --> déjà le nom. n'est pas cohérent avec le reste

ensuite. regarder l'execution du code pas à pas pour détecter les problèmes

pour le reste. je regarde demain aussi :)
Bonne soirée
 

fabrice31

XLDnaute Junior
slt,

j'ai remis le tableau au propre, rajouté une feuille à la fin en la corrigeant dans les USF, vérifié les formules dans le tableau et enlevé les masques.
on s'est aperçu d'un pb lorsque le matériel partait 2 fois dans la même année en réparation. du coup, lorsqu'une réparation est terminée (par la saisie de la date de fin), un recap de cette réparation est copié dans la nouvelle feuille. Le motif et les dates de réparation de la feuille 'année' sont effacés. (pas encore fait mais je devrais m'en sortir...)
2020 s’appelait (b) pour préciser à l'utilisateur que c'est une année bissextile. c’est corrigé

dans l'USF, j'ai un plantage au moment de la sélection de 'réparation' ou 'étalonnage' et du déverrouillage des textbox concernées.

pour les formules du recap, j'ai pas avancé. mais j’espère qu'elles sont compréhensibles.

bonne soirée
 

Pièces jointes

  • tableau Off.xlsm
    1.2 MB · Affichages: 23

vgendron

XLDnaute Barbatruc
es tu sur d'avoir posté ta dernière version?
ca bug dès l'ouverture du formulaire "mon userform"..
les ranges nommées ne sont plus définies correctement..

et encore une fois. ton insertion de ligne ne marche pas !
en partant de ton dernier fichier TEL QUEL (après avoir RE défini la liste "Liste_Pompes" si je veux ajouter un matériel
Pompe Deltanova GH18G3
Numéro de série P741

le matériel n'existant pas est bien ajouté à la fin du bloc de la pompe (Ligne 199 des feuilles)
MAIS ta formule en B (qui indique 41 avant insertion) n'est PAS mise à jour
idem pour la formule en K199 (qui indique 7)

ensuite, une des dates n'est pas inscrite sur la bonne colonne...
 
Dernière édition:

vgendron

XLDnaute Barbatruc
dans La version 4 ci jointe j'ai gardé ta dernière structure de feuille
le code ajoute un nouveau matériel dans TOUTES les feuilles
et la date d'étalonnage est bien en colonne F
la formule en colonne K est bien recopiée sur la ligne qui vient d'etre insérée
les formules en colonnne B et K sur la ligne de fin bloc sont mises à jour pour prendre en compte la nouvelle ligne insérée
 

Pièces jointes

  • tableau Off Rev4.xlsm
    1.2 MB · Affichages: 23

vgendron

XLDnaute Barbatruc
pour le second formulaire "Planning"

il faudrait que tu expliques à quoi il sert?
de ce que j'ai vu
1) te entres un numéro de Kalilab
2) tu cliques sur une des option button
selon le bouton, tu peux saisir les TB de gauche ou de droite (ce serait bien de les renommer dans un ordre logique..
et ensuite??
quand tu fais valider.. ca bug. parce que le fl n'est pas défini.
que souhaites tu faire des infos saisies et ou?
 

vgendron

XLDnaute Barbatruc
autre question
est ce qu'un numéro de kalilab peut etre présent dans une feuille et pas dans une autre?

pourquoi cette question?
voir le code ci dessous avec les commentaires
VB:
Private Sub CommandButton_valider_Click()
Dim fl As Worksheet, Sheettarget As Worksheet, lastrow As Long

For Each fl In Worksheets
    If IsNumeric(fl.Name) Then
        With fl
            Set trouve = .Range("A:A").Find(Me.no_kalilab, lookat:=xlWhole) 'on regarde déjà si le numéro existe dans la feuille
            If trouve Is Nothing Then
                MsgBox "N° KALILAB n'existe pas", vbOKOnly + vbInformation, ERREUR
                Exit For 'ATTENTION: si le numéro n'existe pas dans la feuille, on sort du for = sort de la macro ==> on ira pas voir si le numéro existe dans une autre feuille
                '= on suppose que si un numéro est présent, il doit etre présent dans TOUTES les feuilles
            End If
            lastrow = .Range("A" & .Rows.Count).End(xlUp).Row   'il faut trouver la dernière ligne du bloc de la pompe sélectionnée
            i = lastrow
            While .Range("A" & i) <> no_kalilab.Value    'en partant du bas. on remonte jusqu'à trouver le Matériel
                i = i - 1       'enregistrement ligne
            Wend
            
            pos = Application.Match(CLng(Date), .Rows(6), 0) 'récupère la position de la date du jour dans la ligne 6
            If Not IsError(pos) Then 'si trouvée
                    If OptionButton_chantier Then .Cells(trouve.Row, pos) = "C"
                    If OptionButton_Stock Then .Cells(trouve.Row, pos) = "S"
                    If OptionButton_Réparation Then .Cells(trouve.Row, pos) = "R"
                    If OptionButton_Etalonnage Then .Cells(trouve.Row, pos) = "E"
            End If
        End With
    End If
Next fl
End Sub
 
Dernière édition:

vgendron

XLDnaute Barbatruc
autre question
avec cette ligne de code
VB:
            pos = Application.Match(CLng(Date), Rows(6), 0) 'récupère la position de la date du jour dans la ligne 6
tu cherches la date du jour dans la ligne 6 de la feuille.
si on ne la trouve pas, alors.. on ne fait rien dans la feuille et on passe à la suivante..

plutot que de boucler sur toutes les feuilles.
pourquoi ne pas aller directement sur la feuille concernée?
aujourd'hui, nous sommes le 12 décembre 2017 ==> on va directement sur la feuille 2017
et on fait ce qu'on a à faire..

ex:
VB:
feuille = Year(Date)
With Sheets("" & feuille & "")
    .Activate 'et on fait tout ce qu'il faut faire
End With
 

vgendron

XLDnaute Barbatruc
et plutot que de vérifier à chaque fois si le numéro de Kalilab existe, autant le tester dès sa saisie
VB:
Private Sub no_kalilab_AfterUpdate()
'une fois qu'on a saisi ce textbox, on vérifie directement s'il existe
absent = False
For Each fl In Worksheets
    If IsNumeric(fl.Name) Then
        With fl
            Set trouve = .Range("A:A").Find(Me.no_kalilab.Value, lookat:=xlWhole) 'on regarde déjà si le numéro existe dans la feuille
            If trouve Is Nothing Then absent = True
        End With
    End If
Next fl
If absent Then MsgBox "N° KALILAB n'existe pas", vbOKOnly + vbInformation, ERREUR
End Sub
 

Discussions similaires

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

Statistiques des forums

Discussions
312 249
Messages
2 086 598
Membres
103 253
dernier inscrit
alscanv974