Mon problème est simple mais la solution l’est moins :
J’ai dans un onglet BDD une colonne de dates et une autre de valeurs, j’aimerai faire dans un autre onglet un calendrier annuel où les valeurs s’inscrivent en fonction de leur date respectives :
Pour cela j’ai fais =SIERREUR(INDEX(BDD!$E$3:$E$105;EQUIV(DATE($A$1;MOIS(1&B$2);$A8);BDD!$M$3:$M$105;0));"")
Le seul problème c’est que certaines valeurs ont les mêmes dates associés, ce qui fait que je n’ai que la première valeur qui s’y inscrit.
Exemple : les valeurs 2, 3, 4 , 5 et 6 ont comme date associé le 15/01/19
et mon calendrier n’affichent que “2” à cette date là.
J’aimerai avoir 2/3/4/5/6
J’ai pensé à une boucle for en VBA ou à la limite à diviser mes jours en 5 en ajoutant une fonction qui trierai les valeurs déjà prise ou non, mais je n’ai ni la fonction et en plus cela serait moche.
Ci joint l’excel simplifié de mon problème Excel Simplifié.xlsx (26,3 Ko)
Merci d’avance ! Je suis preneur de toutes informations/conseils.
A tester avec une petite fonction VBA personnalisée
la formule:
=SIERREUR(MaRecherche(DATE($A$1;COLONNE()-1;LIGNE()-2);BDD!$M$3:$M$105;-8);"")
La fonction macro
Function MaRecherche(Item As Variant, Plage As Range, Index As Integer)
Dim Tablo()
Dim Compteur%, i%
Dim c
Application.Volatile
Compteur = 1
For Each c In Plage
If c = Item Then
ReDim Preserve Tablo(Compteur)
Tablo(Compteur) = c.Offset(, Index)
Compteur = Compteur + 1
End If
Next c
For i = 1 To UBound(Tablo)
MaRecherche = MaRecherche & " " & Tablo(i)
Next i
End Function
Par contre j’ai oublié de préciser que je n’avais jamais fait de VBA avant aujourd’hui
Donc il va falloir que j’analyse ton code avant de tous comprendre ahah (j’aime bien comprendre ce que je fais)
Mais pour l’instant je vais utiliser ta solution sans réfléchir (c’est pour le boulot)
Pour utiliser ta solution dans mon vrai Excel je copie le code dans le projet Module 1 (pour avoir la fonction MaRecherche) et la formule dans la case concernée ?
Je ne me trompe pas ?
Encore merci Mimimathy
Je viens de découvrir, mais le VBA m’a l’air très sympa comme outil !
Function MaRecherche(Item As Variant, Plage As Range, Index As Integer)
'déclaration des variables
Dim Tablo()
Dim Compteur%, i%
Dim c
Application.Volatile 'Pour que la fonction soit dynamique et recalculée chaque fois que le calcul se produit
Compteur = 1 'initialisation de la variable compteur
For Each c In Plage 'boucle sur la plage
If c = Item Then 'si la valeur c= item
ReDim Preserve Tablo(Compteur) 'je redimensionne mon tablo
Tablo(Compteur) = c.Offset(, Index) 'je renseigne en mémoire les données
Compteur = Compteur + 1 'le compteur prend une valeur de plus au tour de boucle
End If
Next c 'fin de la boucle
For i = 1 To UBound(Tablo) 'autre boucle pour mettre en place les données dans la cellule concernée
MaRecherche = MaRecherche & " " & Tablo(i)
Next i
End Function