RESOLU: formule + VBA avec date variable

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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.
 
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
 
bonjour,

merci pour ce premier jet. j'avoue que j'y pompe rien!!
"MaDate = Feuil1.Range("A2"): Feuil1.Range("C1😛10000").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.
 
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.
 
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

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.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Résolu(e)
Microsoft 365 DATEDIF
Réponses
11
Affichages
184
  • Question Question
Microsoft 365 Problème de date
Réponses
5
Affichages
162
  • Question Question
Microsoft 365 format date
Réponses
3
Affichages
105
Réponses
10
Affichages
257
Réponses
2
Affichages
153
Retour