Tableau de services
Bonjour à tous.
Je voudrai automatiser un tableau de services au sein de ma société (ALPHA). N'étant pas un expert en macros ou formules, j'aurais besoin de vous pour obtenir un gros coup de pouce
Je vous explique, un tableau de service est établi mensuellement afin de surveiller nuit et jour du matériel sensible.
Chaque jour, un groupe de garde est désigné et se compose :
- d'un chargé de sécurité CS (pour une semaine du vendredi 08h au vendredi suivant),
- de 2 vigiles V1 et V2 (pour la journée de 08h au lendemain 08h),
- d'un maître-chien MC (pour une journée qui prend la journée désignée de 18h au lendemain 18h).
En recherchant sur le forum, j'ai trouvé un moyen de mettre à jour les dates en fonction de l'année car le but est d'avoir un fichier facile d'utilisation.
J'aurai besoin d'aide pour :
- l'onglet "Récapitulatif" : en effet, je souhaiterai faire afficher les dates de service correspondants au nom (1, 2, 3 ... sont les nombres de tour)
- l'onglet "Compte rendu" : à la fin du mois, pouvoir imprimer un compte rendu global par catégorie de personnel (1 pour le 1ier vigile, 1 autre pour le 2ième vigile et 1 dernier pour les maîtres-chiens) en distinguant la semaine "SEM" (lundi au vendredi) des weekends/jours fériés "WE". Ne pas tenir compte des renforts extérieurs.
- le problème des homonymes.
- afficher le n° des semaines.
J'espère que je n'ai pas été trop brouillon
Je reste à votre disposition pour les questions éventuelles.
Cordialement, JOHN72.
Bonsoir JOHN72,
Pour compléter la feuille "Récapitulatif", essaie ceci :
Option Explicit
Sub test()
Dim a, b(), w(), i As Long, j As Long, n As Long, txt As String, maxCol As Long
Dim dico As Object, ws As Worksheet
Set dico = CreateObject("Scripting.Dictionary")
dico.CompareMode = 1
a = Sheets("Récapitulatif").Range("a1").CurrentRegion.Value
For i = 2 To UBound(a, 1)
txt = Join$(Array(a(i, 2), a(i, 3)), Chr(2))
n = n + 1
dico(txt) = VBA.Array(n, Empty)
Next
'attention à la 2eme dimension
ReDim b(1 To dico.Count, 1 To 100)
For Each ws In Worksheets([{"Janvier","Février"}])
a = ws.Range("a5:r36").Value2
For i = 2 To UBound(a, 1)
For j = 7 To UBound(a, 2) Step 4
If Not IsEmpty(a(i, j)) Then
txt = Join$(Array(a(i, j), a(i, j + 1)), Chr(2))
If dico.exists(txt) Then
w = dico(txt): w(1) = w(1) + 1
b(w(0), w(1)) = a(i, 3)
dico(txt) = w
maxCol = Application.Max(maxCol, dico(txt)(1))
End If
End If
Next
Next
Next
Application.ScreenUpdating = False
With Sheets("Récapitulatif").Range("a1").CurrentRegion
On Error Resume Next
.Offset(, 5).Resize(.Rows.Count, .Columns.Count - 5).Clear
On Error GoTo 0
With .Offset(, 5).Resize(UBound(b, 1) + 1, maxCol)
.VerticalAlignment = xlCenter
.HorizontalAlignment = xlCenter
.BorderAround Weight:=xlThin
.Borders(xlInsideVertical).Weight = xlThin
With .Rows(1)
.Cells(1).Value = 1
.DataSeries
.BorderAround Weight:=xlThin
End With
With .Offset(1).Resize(.Rows.Count - 1)
.NumberFormat = "dd/mm/yyyy;@"
.Value = b
End With
End With
End With
Set dico = Nothing
Application.ScreenUpdating = True
End SubConcernant la seconde question, je n'ai rien compris
klin89
Bonjour Klin89, bonjour le forum
D'abord, merci pour ton message et pour t'avoir intéresser à mon cas.
Je viens de tester ta macro : impeccable, ça marche du tonnerre.
Je l'adapterai quand je finirai mon fichier avec mes 12 mois.
Le seul souci, comme tu verras dans le fichier joint, ce sont les homonymes (exemple : il y a 2 homonymes donc la recopie se fait sur un nom.
Vois-tu un moyen d'éviter ça ? Surtout sur les feuilles par mois (exemple : dans la colonne vigile 1, il y a du vigile 2), mettre une variable au niveau de la formule ...
Pour le seconde question, je dois sortir un état mensuel à la fin du mois :
- 1 état du lundi au vendredi, par catégorie (vigile 1, vigile 2 et maitres-chiens) sauf pour les extérieurs à la société (EXT) cf onglet "Liste",
- 1 état le WE (samedi et dimanche), par catégorie (vigile 1, vigile 2 et maitres-chiens) sauf pour les extérieurs à la société (EXT) cf onglet "Liste".
Si je n'ai pas été clair, n'hésites pas.
Merci d'avance.
Cordialement, JOHN72.
Re,
JOHN72 a dit :
Le seul souci, comme tu verras dans le fichier joint, ce sont les homonymes (exemple : il y a 2 homonymes donc la recopie se fait sur un nom.
Vois-tu un moyen d'éviter ça ? Surtout sur les feuilles par mois (exemple : dans la colonne vigile 1, il y a du vigile 2), mettre une variable au niveau de la formule ...
Je suis nul en formules et ne sais donc pas comment récupérer le bon prénom pour les différents homonymes figurant en colonnes G,K et O des feuilles mensuelles
Edit : j'ai réajusté le code de mon 1er post.
klin89
T'inquiètes Klin89, ce que tu as fait m'a bien aidé en tout cas.
Merci pour ton aide précieuse.
À une prochaine sur le forum.
Cordialement, JOHN72.