RESOLU: formule + VBA avec date variable

fabrice31

XLDnaute Junior
bonjour a tous et bonne année!

je veux faire une page de recap, mais mes formules sont trop complexe pour moi.
je pense qu'il faut melanger formule et VBA
voila mon pb:
sur mon recap, j'ai 2 tableaux:
1 qui depend de la date du jour (A2).
je veux faire une synthèse de l’état de mon matériel (modele / modele) à date du jour donc:
1- recherche dans feuille "year(date)" de la colonne (date)
-calcul du nbre de E dans la colonne date / machine
-calcul du nbre de R dans la colonne date / machine
-calcul du nbre de C dans la colonne date / machine
-calcul du nbre de S dans la colonne date / machine
- .....
j'ai essayer de décrire les formules voulue dans le tableau
a actualiser a chaque activation de la feuille

un 2eme tableau qui lui renvoie les infos sur une plage de date (celui-ci est moins urgent, j'ai pas encore les données voulue)

si quelqu'un peut me lancer sur une piste...

en vous remerciant par avance.
 

Pièces jointes

  • tableau recap.xlsm
    1.5 MB · Affichages: 27

fabrice31

XLDnaute Junior
bonjour,

je vais essayer d’être plus précis:
sur la feuille 2018
en ligne 6 les jours de l'année.
dans la colonne du jour (08/01/2018), je vais avoir pour chaque ligne(matériel) un état (C,S,E,ou R).

du coup, dans ma pages recap, dans le premier tableau (tableau à date du jour), j'aimerai avoir une synthèse par modèle de pompes (par ex: modèle AC-SPERHI : 8 C; 3S; 4E; 2R) actualisé à chaque activation de la feuille 'recap' puisque les C et S sont destinés à être du tps réel.

pour moi, il faut dans la colonne 'date du jour', si modèle 'X', compter si E,C,S ou R...

Le deuxième tableau sera plutôt un moyenne sur une plage de date, mais on verra plus tard.

merci de vous pencher sur mon cas.
 

Bebere

XLDnaute Barbatruc
Fabrice un 1er code,variable a reprend les 4 cas
Code:
Public Sub Recap()
    Dim MaDate As Date, Ws As Worksheet, L As Long, j As Long, C As Long, b(), i As Long, x As Boolean
    Dim a()
    a = Array("C", "E", "R", "S")
    MaDate = Feuil1.Range("A2"): Feuil1.Range("C1:P10000").ClearContents
    Set Ws = Worksheets(CStr(Year(MaDate)))
    L = Ws.Range("A65536").End(xlUp).Row
    tbl = Ws.Range("A1:OY" & L)
    Col = 3
        For C = 16 To UBound(tbl, 2)'cherche date
        If tbl(6, C) = MaDate Then Exit For
                Next C
    For j = 0 To UBound(a)
    ReDim Preserve b(0 To 2, 0 To i)
    For L = 8 To UBound(tbl, 1)
            x = False
            If tbl(L, C) = a(j) Then'cherche c,e,r,s
                b(0, i) = tbl(L, 2)
                b(1, i) = tbl(L, 3)
                b(2, i) = b(2, i) + 1
                x = True
            End If
            If x Then i = i + 1: ReDim Preserve b(0 To 2, 0 To i)
    Next L
       
If i > 0 Then'peut être prévoir le case si le tableau b n'a qu'une ligne
b = Application.Transpose(b)
Feuil1.Cells(1, Col) = a(j)
Feuil1.Cells(2, Col).Resize(UBound(b, 1), UBound(b, 2)) = b: Erase b: i = 0
Col = Col + 4
End If
Next j
End Sub
 

fabrice31

XLDnaute Junior
bonjour,

merci pour ce premier jet. j'avoue que j'y pompe rien!!
"MaDate = Feuil1.Range("A2"): Feuil1.Range("C1:p10000").ClearContents"??
VB:
Public Sub Recap()
    Dim MaDate As Date, Ws As Worksheet, L As Long, j As Long, C As Long, b(), i As Long, x As Boolean
    Dim a()   ' definition des variables
    a = Array("C", "E", "R", "S")
    MaDate = Feuil1.Range("A2"): Feuil1.Range("C1:P10000").ClearContents  'PK?? tu effaces mes données?? on ne peux pas les écraser?
    Set Ws = Worksheets(CStr(Year(MaDate)))  'définition de la feuille de données
    L = Ws.Range("A65536").End(xlUp).Row  'nbre de ligne
    tbl = Ws.Range("A1:OY" & L)   'plage

Col = 3
        For C = 16 To UBound(tbl, 2)'cherche date
        If tbl(6, C) = MaDate Then Exit For
                Next C

'c'est la que je suis perdu. je connais pas ces requetes... et i n'est pas defini?
    For j = 0 To UBound(a)
    ReDim Preserve b(0 To 2, 0 To i)
    For L = 8 To UBound(tbl, 1)
            x = False
            If tbl(L, C) = a(j) Then'cherche c,e,r,s
                b(0, i) = tbl(L, 2)
                b(1, i) = tbl(L, 3)
                b(2, i) = b(2, i) + 1
                x = True
            End If
            If x Then i = i + 1: ReDim Preserve b(0 To 2, 0 To i)
    Next L
      
If i > 0 Then  'peut être prévoir le case si le tableau b n'a qu'une ligne
b = Application.Transpose(b)
Feuil1.Cells(1, Col) = a(j)
Feuil1.Cells(2, Col).Resize(UBound(b, 1), UBound(b, 2)) = b: Erase b: i = 0
Col = Col + 4
End If
Next j
End Sub

il ne fait la correspondance que du modèle de la dernière ligne...
peux tu m'expliquer le fctionnement de cette partie que je puisse me l'approprier?
VB:
If tbl(L, C) = a(j) Then  'cherche c,e,r,s
                b(0, i) = tbl(L, 2)
                b(1, i) = tbl(L, 3)
                b(2, i) = b(2, i) + 1
                x = True
            End If

il faut que je comprenne pour avancer...
mais merci de plancher dessus.
 

fabrice31

XLDnaute Junior
bonjour,

j'ai enlevé " b(1, i) = tbl(L, 3)" qui correspond au N°serie. j'en ai pas l'utilité.
est-il possible d'additionner le nombre de modèle plutôt que de faire des lignes séparées?
par ex, au lieu de:
pompa A: 1
pompe A: 1

faire:
pompe A: 2
pompe B: 4

l'objectif le plus lisible étant d'avoir en lignes les modèles de pompe, en colonne les C,S,R,E, et à l'intersection la quantité.

aussi, j'ai mis le code dans un module. si je le mets dans la feuille concernée (en mettant dans le titre worksheet_activate) ca marcherait...?

Merci de ton aide.
 

fabrice31

XLDnaute Junior
slt.

merci bcp!
je ne vois pas la diff entre recap et recap1. le résultat est le même...
est-il possible de laisser les E,R,C,S en tête de colonne (sans les effacer), et construire le tableau dessous.
également, si le résultat est 0 pour un modèle de pompe, le mettre quand meme.
c'est pour ça qu'à la base, le tableau était construit (modèle de pompe en Ligne, état en Col) et il fallait "juste" remplir les données.
Dans le même état d'esprit, j'aimerai avoir pour chaque modèle, le nombre de (colonne L <30j + pas en "E" ni "R")(double contrôle). A mettre à coté du comptage de E. j'ai fait un tableau dans l'onglet "exemple".

merci encore.
 

Pièces jointes

  • tableau recapV1.xlsm
    1.4 MB · Affichages: 19

fabrice31

XLDnaute Junior
re,
j'avais bien compris que le code est différent.
pour ce qui est de la présentation, je retombe sur la présentation initiale.
tu l'as modifiée, sans soute par rapport au codage, la présentation du 1er fichier est la bonne.

je vais trifouiller un peu voir ce que je peux faire.

en tout cas merci.
 

fabrice31

XLDnaute Junior
bonjour, et merci d'avoir planché dessus.

j'ai réussi (pas tout seul) en formule.
pour ceux que cela peut intéresser, voici ce que ça donne.

en tout cas merci!
 

Pièces jointes

  • tableau demo V1.xlsm
    829.7 KB · Affichages: 12
Dernière édition:

Discussions similaires

Réponses
2
Affichages
196
Réponses
5
Affichages
186
Réponses
7
Affichages
322

Statistiques des forums

Discussions
312 215
Messages
2 086 326
Membres
103 180
dernier inscrit
Vcr