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).
La société bénéficie d'un renfort extérieur (même composition que le groupe ci-dessus).

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.

70services.xlsm (38.43 Ko)

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 Sub

Concernant 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".
Pour Vigile 1 et 2 pas de souci car il commence le jour même à 08h00 ; en revanche, pour les maîtres-chiens, ils prennent à 18h (Pour eux le WE, c'est vendredi 18h au dimanche 18h).

Si je n'ai pas été clair, n'hésites pas.

Merci d'avance.

Cordialement, JOHN72.

46services.xlsm (50.26 Ko)

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.

Rechercher des sujets similaires à "tableau services"