XL 2010 Phrase récap concaténer avec comptage

erwanhavre

XLDnaute Occasionnel
Bonsoir je cherche comment créer une "phrase récap" en fonction de plusieurs éléments voir pj
potentiellement en colonne A plusieurs année plusieurs personnes dans les colonnes attachées etc
Aussi je ne sais pas comment compter le nombre de samedi etc
 

Pièces jointes

  • Classeur1.xlsx
    15.3 KB · Affichages: 29

helias jeremy

XLDnaute Nouveau
Bonsoir je cherche comment créer une "phrase récap" en fonction de plusieurs éléments voir pj
potentiellement en colonne A plusieurs année plusieurs personnes dans les colonnes attachées etc
Aussi je ne sais pas comment compter le nombre de samedi etc

Bonjour,
En colonne A vous souhaitez afficher quoi exactement?

ex : colonne A =CONCATENER(B6;C6;D6;E6;F6;G6;H6;I6;J6;K6;L6;M6;N6)
 

helias jeremy

XLDnaute Nouveau
J'ai créé une colonne A avec vos dates au format texte. (format = jour de la date)
Ensuite en A5 j'ai ajouté une formule nb.si(A5:A600;"samedi") --> qui compte le nombre avec un critère (SAMEDI)

Ci joint votre fichier modifié.
 

Pièces jointes

  • Classeur2.xlsx
    22.1 KB · Affichages: 28

erwanhavre

XLDnaute Occasionnel
Bonjour à tous tout d'abord merci pour vos réponses ce dont j'ai besoin ce trouve dans les fiches individuel ici j'en ai creé que 2 mais (personne 1, personne 2 etc)
la fameuse phrase ce créera en fonction des données inscrites dans le planning
 

job75

XLDnaute Barbatruc
Bonjour erwanhavre, helias jeremy,

Voyez le fichier joint et cette fonction VBA qui utilise 4 Dictionary :
Code:
Function Phrase$(nom, dat1, dat2)
Application.Volatile
Dim c As Range, col%, t, nombre As Object, debut As Object, fin As Object, samedi As Object
Dim i&, dat, x$, a, b1, b2, b3, b4, f$
With Sheets("calendrier").UsedRange
    Set c = .Find(nom, , xlValues, xlWhole)
    If nom = "" Or c Is Nothing Or Not IsDate(dat1) Or Not IsDate(dat2) Then Exit Function
    col = c.Column - .Column + 1
    t = .Resize(, col) 'tableau VBA, plus rapide
End With
Set nombre = CreateObject("Scripting.Dictionary"): nombre.CompareMode = vbTextCompare 'la casse est ignorée
Set debut = CreateObject("Scripting.Dictionary"): debut.CompareMode = vbTextCompare
Set fin = CreateObject("Scripting.Dictionary"): fin.CompareMode = vbTextCompare
Set samedi = CreateObject("Scripting.Dictionary"): samedi.CompareMode = vbTextCompare
For i = 1 To UBound(t)
    dat = t(i, 1)
    If IsDate(dat) Then
        If dat >= dat1 And dat <= dat2 Then
            x = CStr(t(i, col))
            If x <> "" Then
                If Not nombre.exists(x) Then debut(x) = dat
                nombre(x) = nombre(x) + 1
                fin(x) = dat
                samedi(x) = samedi(x) - (Weekday(dat) = 7)
            End If
        End If
    End If
Next
If nombre.Count = 0 Then Exit Function
a = nombre.keys: b1 = nombre.items: b2 = debut.items: b3 = fin.items: b4 = samedi.items
f = "d mmmm yyyy"
For i = 0 To nombre.Count - 1
    Phrase = Phrase & ", " & b1(i) & " " & a(i) & " du " & Format(b2(i), f) & " au " & Format(b3(i), f) & _
        IIf(b4(i), " dont " & b4(i) & " samedi" & IIf(b4(i) > 1, "s", ""), "")
Next
Phrase = Mid(Phrase, 3)
End Function
A+
 

Pièces jointes

  • Phrase(1).xlsm
    31.8 KB · Affichages: 39
Dernière édition:

job75

XLDnaute Barbatruc
Re,

Oui le planning peut être dans un autre fichier, voyez les fichiers joints.

Cette macro dans le ThisWorkbook du 1er fichier maintient le second toujours ouvert :
Code:
Private Sub Workbook_Activate()
Dim wb As Workbook
For Each wb In Workbooks
    If wb.Name = "Calendrier.xlsx" Then Exit Sub
Next
Workbooks.Open ThisWorkbook.Path & "\Calendrier.xlsx" 'chemin d'accès à adapter
Me.Activate
Calculate
End Sub
Avec ce code les 2 fichiers sont à placer dans le même répertoire.

De son côté le code de la fonction VBA Phrase nécessite une très légère adaptation.

Bonne nuit.
 

Pièces jointes

  • Phrase(2).xlsm
    28.6 KB · Affichages: 32
  • Calendrier.xlsx
    18.2 KB · Affichages: 31
Dernière édition:

erwanhavre

XLDnaute Occasionnel
je n'arrive pas à adapter à mon projet :(

Dans la feuille active (ou doit être noté la phrase)
la date de début de période est en BK4 fin de période BL4 le nom en AZ6

Le fichier ou sont les infos :
le nom du fichier Planning présences (beta).xlsm
le nom de la feuille Planning

j'ai bien collé le code dans un module
le fichier source (planning) s'ouvre bien au moment ou j'ouvre l'autre fichier


je pense que nous sommes pas loin du compte ...
merci en tout cas job75
 

erwanhavre

XLDnaute Occasionnel
Les fameux fichiers @job75 ... re bonsoir
voila mon problème
j’ai essayé de le réadapter sur un gros fichier voir pièce jointe cela fonctionne mais le souci est que quand il se lance il met un temps fou pour calculer y a-t-il un moyen de lancer la macro à la main ?ou essayer de réduire le temps de calcul ? la phrase attendue est en colonne x du classeur points congés ... j'ai bloqué la macro pour le moment merciii
 

Pièces jointes

  • Planning présences.zip
    173 KB · Affichages: 14

Discussions similaires

Statistiques des forums

Discussions
312 538
Messages
2 089 400
Membres
104 159
dernier inscrit
isbouk