Formule valeur unique(texte) selon une date choisie
Bonjour,
C'est la première fois que j'écris sur un forum.
Ma question est;
-Dans mon fichier j'ai des dates (journée) dans ma colonne A qui descend jusqu'à 500-600 lignes environs.
-Dans les colonnes K-M-O-P j'ai des prénoms (qui peuvent être les mêmes ou différents ou vide)
-J'aimerais pouvoir faire un calcul qui me donne le nombre de prénom (valeur unique) seulement sur la date que je choisis.
J'ai besoin de calculer le nombre d'employé qu'il y a eu dans cette journée de travail mais les noms peuvent se répéter plusieurs fois car ils peuvent avoir fait plusieurs produits différents.
Le B1 est la date que je choisis; donc quand je la change, je veux qu'il cherche par rapport à une autre date. (J'ai faite juste pour une ligne car je comptais faire la même formule avec )+(.
Exemple:
Date: 2022-11-26 (date chercher qui se trouve sur une autre feuille en B1)
A B C D E F G H I J K L M N O P Q
2022-11-26 Marc
2022-11-26 Antoine
2022-11-26 Marc
2022-11-27 Marc
J'ai essayé de faire la formule (=somme.si.ens(nbval(unique(O:O));A:A; B1) mais Excel ne me donne un message d'erreur
La réponse devrait être 2 car j'ai pris la date du 2022-11-26
Je ne sais pas si je suis clair dans ma question, j'en suis navré.
Malheureusement je ne peux m'être mon fichier.
Je vous remercie énormément :)
Bonsoir. Pouvez-vous nous fournir un classeur exemple ? C'est très difficile de comprendre votre besoin comme ça.
Sous l'onglet *TABLEAU* je veux qu'il compte le n'ombre d'employé des 4 colonnes (1 seul fois) basé sur la date du TCD de la feuille Week 1-52.
Merci énormément si vous trouvé. Je suis encore débutant Excel.
bonjour dwaynesm,
Sub UniquePersonnes()
Dim aA, aOut, aOut2, ptr
aA = Sheets("tableau").Range("A1").CurrentRegion.Resize(, 21).Value2 'tous ces données
ReDim aOut(1 To UBound(aA), 1 To 3) 'preparer 2 matrices
ReDim aOut2(1 To UBound(aA))
For i = 2 To UBound(aA) 'boucle les données
If aA(i, 1) > 0 Then
r = Application.Match(aA(i, 1), aOut2, 0) 'chercher la date
If Not IsNumeric(r) Then 'pas trouvé
ptr = ptr + 1 'ajouter nouvelle date
r = ptr 'incrementer pointer
aOut(r, 1) = aA(i, 1) 'ajouter aux 2 matrices
aOut2(r) = aA(i, 1)
End If
For j = 11 To 17 Step 2 'les 4 colonnes des noms
If Len(aA(i, j)) > 0 Then 'une date valable
If InStr(1, aOut(r, 3), "|" & aA(i, j) & "|", 1) = 0 Then 'nom inconnu pour cette date ?
aOut(r, 3) = aOut(r, 3) & IIf(Len(aOut(r, 3)) = 0, "|", "") & aA(i, j) & "|" 'ajouter ce nom entre pipes ("|")
aOut(r, 2) = aOut(r, 2) + 1 'incrementer le nombre
End If
End If
Next
End If
Next
With Sheets("tableau").ListObjects("TBL_Noms") 'ce tableau structuré
If .ListRows.Count Then .DataBodyRange.Delete 'RAZ
If ptr > 0 Then .ListRows.Add.Range.Range("A1").Resize(ptr, 3).Value = aOut 'ajouter les données de aOut
End With
End SubBonjour Bart (Bsalv)
Merci énormément mais en fait, quand vous regarder en dessous de mon graphique sur la feuille Week 1-52 2023, il y a les informations du graphique et il y a le nombre d'employé de la journée. Je veux que quand je change la date du tableau croisé dynamique (B1), il va chercher dans la feuille de tableau le nombre d'employer qui a travaillé cette journée. (il peu y avoir entre 1 a 15 lignes supplémentaires a chaque jour)
Mais, à chaque jour, je rajouter des données de production. ( a la fin de l'année ma liste devrais avoir environ 600-700 lignes vers le bas. ) j'ajoute des données a chaque jour de la semaine. mon problème est que quand des employés (les mêmes) fabrique plusieurs produit différents. je rajoute une ligne pour chaque produit avec les même nom d'employés. donc quand je fais ma formule normal (somme.si), il calcule les même employés à répétition. ( on peu voir mon NBVAL sur la colonne U qui me dit combien d'employé j'ai sur cette ligne.) mais on voie bien (exemple; ligne 39 a 42) que sais les mêmes employé donc ma formule ne fonctionne pas sur ma feuille Week 1-52 2013 en dessous du graphique. car il va me calculer 33 employé pour la journée du 23 novembre quand en fait j'en est 17.
et comme spécifié, je rajoute des lignes a tout les jours avec de nouvelle informations.
Je ne connais pas trop bien les codes de feuilles.
Merci énormément encore,
J'ai oublié,
Le code est parfait (je pourrais faire une rechercheV à partir de ma cellule dans ce tableau) mais il voudrait qu'il se mette à jour à chaque fois je rentre une donnée. (Qu'il rajoute les nouvelles dates).
Merci encore :)
bonjour Dwaynesm, un update de ce tableau est pour le moment sur mon ordinateur 0.6 sec. Les colonnes d'importance sont A, K, M, O et Q, donc vous pouvez ajouter cette macro au module de la feuille "Tableau", mais ça vous embêtera peut-être quand vous ajouter des données. Donc vous pouvez manipuler les evenements avec les 2 macros dans un module normal.
dans un module normal
Sub Eoff()
Application.EnableEvents = False 'ne pas permettre les events
End Sub
Sub eon()
Application.EnableEvents = True 'permettre les events
End Subdans "tableau"
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c
Set c = Intersect(Target, Range("A:A,K:K,M:M,O:O,Q:Q")) 'vérifier les changements dans ces colonnes particulier
If c Is Nothing Then Exit Sub 'le changement n'était pas dans ces colonnes
UniquePersonnes 'nouveau comptage
End SubMerci énormément Bart.
Je m'y connais pas vraiment en macro (je comprends 1/10 de ce que je voie hahaha) je vais essayer de les ajouter et voir si cela fonctionne sinon je risque simplement d'enlever le nombre d'employé de la journée du graphique.
Merci de prendre autant de temps pour aider les personnes (comme moi) qui en connaissent beaucoup moins.
Très apprécié