IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Ranger informations selon section et grade


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2020
    Messages : 10
    Points : 0
    Points
    0
    Par défaut Ranger informations selon section et grade
    Bonjour,

    Je vous remercie avant tout de lire ce post et de me venir en aide.
    Je travail sur EXCEL 2016.
    J'ai créer une prévision de planification pour mon travail car le créateur de la version précédente quittera le job.
    Je suis complétement novice et je vous remercie de vos tutoriels qui mon permis d'élaborer le fichier ci-joint afin de comprendre mes demandes.

    Je souhaiterais à partir du formulaire dans l'onglet "formulaires et consignes" que les informations d'insertions et de modification soit ranger selon la section et le grade dans la 1ère feuille. afin de ne pas changer la structure de mon tableau. J'ai créer le formulaire et la macro mais je n'arrive pas à insérer les conditions.

    Je souhaiterais pourvoir modifier le grade et lors de la mise à jour du formulaire que celui-ci range automatiquement le tableau selon les critères du dessus. Mais je n'ai pas trouvé de tutoriel.

    Merci par avance.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Bonjour,

    Une façon de faire, après avoir ajouté une colonne (à masquer par la suite) permettant de classer les sections et grades, et ainsi d'y insérer une nouvelle personne à la bonne place.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    Option Explicit
     
    Sub AjoutPersonne()
        '--- Ajout d'une personne
        Dim sFeu As String, sCat As String, sSec As String
        Dim sGra As String, sNom As String, sPre As String
        sFeu = Range("E5")      '--- feuille à traiter
        sCat = Range("E7")      '--- catégorie
        sSec = Range("E9")      '--- section
        sGra = Range("E11")     '--- grade
        sNom = Range("E13")     '--- nom
        sPre = Range("E15")     '--- prénom
        '--- problème: le tri n'est pas alphabétique ---!
        Dim rSect As Range, kR As Long
        Sheets(sFeu).Select
        Set rSect = Columns("B:B").Cells.Find(What:=sSec, After:=Range("B23"), LookIn:=xlValues, _
            LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
        '--- ajoute une ligne 2 ligne + bas que la ligne début de section
        '--- présume qu'il y a au moins déjà 2 lignes dans chaque section
        kR = rSect.Row + 2
        Rows(kR).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        Range("A" & kR) = sCat
        Range("B" & kR) = sSec
        Range("C" & kR) = sGra
        Range("D" & kR - 1).Copy Range("D" & kR) '--- pour copier la formule de la celulle
        Range("E" & kR) = sNom
        Range("F" & kR) = sPre
        Range("E" & kR).Select
        '--- tri
        Tri_SecGra_Nom_Prenom
        '--- retrouve la personne
        '--- présume qu'il n'y a pas 2 personnes ayant le même nom dans la même section
        Set rSect = Columns("B:B").Cells.Find(What:=sSec, After:=Range("B23"), LookIn:=xlValues, _
            LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
        Set rSect = Columns("E:E").Cells.Find(What:=sNom, After:=Range("E" & rSect.Row), LookIn:=xlValues, _
            LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
        rSect.Activate
    End Sub
     
    Sub Tri_SecGra_Nom_Prenom()
        '--- Tri selon colonnes Section+Gra, Nom, Prenom
        Dim LastRow As Long
        LastRow = Cells(Rows.Count, 1).End(xlUp).Row            '--- n° de la dernière ligne en colonne 1
        With ActiveSheet.Sort
            .SortFields.Clear
            .SortFields.Add Key:=Range("D24:D" & LastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            .SortFields.Add Key:=Range("E24:E" & LastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            .SortFields.Add Key:=Range("F24:F" & LastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            .SetRange Range("A23:NH" & LastRow)
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End Sub
     
    Sub SupprimerPersonnel()
        '--- supprimer une personne
        Dim sFeu As String, sCat As String, sSec As String
        Dim sGra As String, sNom As String, sPre As String
        sFeu = Range("E5")      '--- feuille à traiter
        sCat = Range("E7")      '--- catégorie
        sSec = Range("E9")      '--- section
        sGra = Range("E11")     '--- grade
        sNom = Range("E13")     '--- nom
        sPre = Range("E15")     '--- prénom
        '---
        Dim rPers As Range, kR As Long
        Sheets(sFeu).Select
        '--- retrouve la personne
        '--- présume qu'il n'y a pas 2 personnes ayant le même nom dans la même section
        Set rPers = Columns("B:B").Cells.Find(What:=sSec, After:=Range("B23"), LookIn:=xlValues, _
            LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
        Set rPers = Columns("E:E").Cells.Find(What:=sNom, After:=Range("E" & rPers.Row), LookIn:=xlValues, _
            LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
        rPers.Activate
        kR = rPers.Row
        Rows(kR).Select
        If MsgBox("Voulez-vous vraiment supprimer cet agent ?", vbYesNo + vbDefaultButton2, "A confirmer") = vbYes Then
            Selection.Delete Shift:=xlUp
        End If
    End Sub
    En attaché, une version légèrement modifiée, utilisant cela. A adapter.

    Cordialement.
    Fichiers attachés Fichiers attachés

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2020
    Messages : 10
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Merci beaucoup de votre réponse et du temps consacrés à mon égard.
    Pour répondre a vos annotations, voici les éléments:

    - MDL et SGT est le même grade mais différent selon les armes (blanche et or);
    - OE G7 est supérieur au OE G6

    Puis-je abuser de votre gentillesse pour d'autres éléments concernant le même fichier ?

    1- Je souhaiterais réaliser un autre formulaire (sur la même feuille) pour éviter les problématiques de cellules copiées au mauvais endroits lors du remplissage de la planification afin de diminuer le risque d'erreur. ex: ( formulaire d'insertion de données: nom, statut, date de début et date de fin).

    2- Je souhaiterais, si cela est possible mettre une fermeture et un enregistrement automatique au bout de 10 min d'inactivité.

    3-Chaque jour, nous devons faire un point de situation de l'état des différents statuts par section. Cela doit il se faire via des rechercheV ou par Macro ? Je souhaiterais a partir d'une date que les informations rentrées dans la planification soient retransmit sur un formulaire comme sur le premier fichier.

    Merci par avance de votre retour à mes questions.

    Cordialement.

  4. #4
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Bonjour,

    Pourriez-vous réexpliquer ce que vous entendez au point 1.

    Pour le point 3, cela doit-il être sur une seule feuille, et quelle est l'utilité des premières lignes du tableau (avant les sections).

    Cordialement.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2020
    Messages : 10
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    En réponse à vos questions:

    Point N°1:

    Dans la "feuille 2020", je souhaiterais limiter les mauvaises manipulations lors des insertions manuelles dans celle-ci afin d'éviter les erreurs des différents utilisateurs qui sont amenés à remplir la planification. Pour cela, je souhaiterais insérer a droite du premier formulaire, un autre formulaire pour insérer les différents statuts sur la "feuille 2020" par le biais d'une insertion automatique des statut dans la "feuilles liste"en stipulant la date de début et date de fin pour le personnel identifié (modèle réaliser dans la feuille en question).

    Point N° 3:

    Je souhaiterais pouvoir transposer les informations dans 2020 (catégorie, grade, nom, prénom) par section avec une mise à jour des personnels dans leurs SPA respectifs de façon à ne pas devoir insérer une lignes et rajouter manuellement chaque personnel. Comme un effet miroir. Si je rajoute un personnel dans 2020 dans une section cela me l'insert systématiquement dans la SPA de la section concerné.
    l'utilité des premières lignes est une date automatique reliant la date par liste déroulant la SPA à la planification "2020" afin de remplir par un 1 les différents cases selon le statut.

    Je sais pas si je suis bien compréhensible vu mon langage informatique mais merci de votre aide.

    Cordialement.
    Fichiers attachés Fichiers attachés

  6. #6
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Bonjour,

    Quelques façons de faire, à adapter.

    Pour le (2), fermeture automatique, il y a quantités de discussions sur ce sujet, dont celle-ci: fermeture automatique au bout d'un certain temps. A noter que cette fermeture ne s'effectuera cependant pas
    - si une "Message Box" est ouverte
    - si un encodage est en cours dans une cellule (en attente de la frappe de la touche Entrée).

    Pour le (1), une possibilité est de faire qu'un double-clic sur une cellule de la feuille "2020" dans la plage des statuts ouvre la feuille "formulaire" au niveau de "planification" (en reprenant ce qui est déjà encodé dans la feuille "2020"). Code contenu dans la feuille "2020":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        Dim kr As Long, kC As Long, shFrm As Worksheet
        If Target.Count > 1 Then Exit Sub       '--- plusieurs cellules sélectionnées
        kr = Target.Row
        kC = Target.Column
        If kr < 20 Or kr > 137 Or kC < 7 Then Exit Sub   '--- hors plage de données statuts
        If Cells(kr, 5) = "" Then Exit Sub               '--- pas de nom sur cette ligne
        '--- prérempli le formulaire avec les données cellule double cliquée
        Set shFrm = ThisWorkbook.Worksheets("Formulaire")
        With shFrm
            .Range("K5") = Cells(kr, 2)     '--- Section
            .Range("K6") = Cells(kr, 3)     '--- Grade
            .Range("K7") = Cells(kr, 5) & " " & Cells(kr, 6)    '--- Nom Prénom
            .Range("K9") = ActiveCell       '--- statut
            .Range("K11") = Cells(2, kC)    '--- date début
            .Range("K13") = ""              '--- date fin
            '--- cachés par le bouton "Enregistrer"
            .Range("K15") = kr
            .Range("K16") = ActiveSheet.Name
            .Select
            .Range("K9").Select
        End With
    End Sub
    Ensuite, sur le bouton "Enregistrer", remettre cela dans la feuille de départ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Sub EnregistrerStatut()
        Dim kr As Long, kC As Long, kC1 As Long, kC2 As Long
        Dim sData As String, shData As Worksheet
        Dim d1 As Date, d2 As Date
        d1 = Range("K11")
        If Range("K13") = "" Then Range("K13") = Range("K11")
        d2 = Range("K13")
        If d2 < d1 Then
            MsgBox "Annulé: date fin avant date début !", , "Pour info"
            Exit Sub
        End If
        sData = Range("K16")    '--- nom de la feuille
        kr = Range("K15")       '--- ligne dans la feuille
        Set shData = ThisWorkbook.Worksheets(sData)
        With shData
            If d1 < .Range("G2") Then
                MsgBox "Annulé: date début est avant la première date de cette feuille.", , "Pour info"
                Exit Sub
            End If
            If d2 > .Range("NI2") Then
                MsgBox "Annulé: date fin dépasse la dernière date de cette feuille.", , "Pour info"
                Exit Sub
            End If
            kC1 = CLng(d1) - CLng(.Range("G2")) + 7     '--- colonne date début
            kC2 = CLng(d2) - CLng(.Range("G2")) + 7     '--- colonne date fin
            For kC = kC1 To kC2
                .Cells(kr, kC) = Range("K9")
            Next kC
            .Select
            .Cells(kr, kC1).Select
        End With
    End Sub
    Pour le point (3), impression pour le jour, une possibilité est de masquer temporairement toutes les colonnes, sauf celle du jour concerné et d'imprimer cela. Après impression, tout est réaffiché.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub ImprimerJour()
        Dim kC As Long
        kC = ActiveCell.Column
        If kC < 7 Or kC > 373 Then  '--- cellule active hors plage des dates
            MsgBox "Sélectionnez une cellule dans la colonne du jour à imprimer !", , "Annulé"
            Exit Sub
        End If
        Columns("G:NI").Hidden = True
        Columns(kC).Hidden = False
        With ActiveSheet.PageSetup
            .PrintArea = "A3:NI" & Cells(Rows.Count, 1).End(xlUp).Row
            .CenterHeader = "&""-,Gras""&12Journée du " & Format(Cells(2, kC), "ddd dd mmmm yyyy")
            .LeftFooter = "&8Imprimé le &D"
            .Zoom = 90
        End With
        ActiveSheet.PrintPreview
        Debug.Print "fin preview"
        Columns("G:NI").Hidden = False
    End Sub
    A noter que vu la quantité de données encodées, il y a vraiment intérêt à faire régulièrement (quotidiennement) des sauvegardes du fichier, de préférence sur des pc différents.
    Cordialement.
    Fichiers attachés Fichiers attachés

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2020
    Messages : 10
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    Merci de toutes ces formules VBA ainsi que du temps passé.
    Quelques petites questions :

    Comment faire pour changer l'année car il y a un message débogage dès que l'on essaye de changer l'année.
    Comment puis-je faire pour changer les statuts si je souhaite en rajouter.
    La partie imprimer est intéressante mais l'on doit réaliser une spa quotidienne signé par les chefs de sections en cas de modificatif.

    Cordialement.

  8. #8
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Bonjour,

    En plaçant directement dans la feuille '2020' la plage de données relative aux jours fériés (colonne NK), il est plus facile de faire des copies de cette feuille pour une autre année.

    Pour changer les statuts, il suffit de faire cela au niveau du tableau des statuts dans la feuille "formulaire". Si ce tableau est modifié il faut ensuite ajuster tous les formats conditionnels dans la feuille de données à l'aide de la macro "FormatConditionnelStatut", macro qu'il faut au préalable corriger selon nécessités (redéfinition des plages).
    A noter que le format conditionnel produit par cette macro ne permet pas de faire simultanément une coloration des cellules selon le "statut" ET selon "samedi-dimanche-férié".

    Pour ce qui est de l'impression "du jour", rien n'empêche de faire une impression maintenant et de réimprimer ce même "jour" un peu plus tard si un ajout ou une correction a été faite.

    Cordialement.
    Fichiers attachés Fichiers attachés

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2020
    Messages : 10
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Merci pour votre dernière version c'est au top. J'ai testé et j'ai remarqué quelques petits soucis:

    - Classements des catégories et des grades: sur la v2 cela fonctionner à merveille et le classement ce faisait très bien.
    -Création nouvelle année: cela me crée bien la feuille mais je n'obtient que la fin de l'année a partir de novembre.
    -Ajout nouveau statut: comment changer la mise en forme. Des différents statuts.
    -Comment faire pour que la mise en forme soit effective par dessus la mise en forme conditionnelle des week-ends et jours fériés.
    Comment puis-je faire pour pallier à toutes ces problématiques afin que je puisse la mettre en place pour le plus tôt possible

    Merci par avance.
    Cordialement

  10. #10
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Bonjour,

    Pour les 2 premiers points, mais je n'ai pas constaté ces problèmes. A noter que les volets sont bloqués sur G3 pour conserver l'affichage des 2 premières lignes et 6 premières colonnes à gauche.

    Pour adapter la mise en forme conditionnelle des cellules de la plage statut, ces différentes macros permettent de le faire en reprenant les présentations effectuées au niveau des cellules modèles. La macro principale est activable à partir d'un bouton posé sur la feuille de données.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    Option Explicit
     
    Sub Mise_à_jour_FormatsConditionnels()
        If ActiveSheet.Name = "Listes" Or ActiveSheet.Name = "Formulaires" Then
            MsgBox "Formats conditonnels non applicables à la feuille active actuelle '" & ActiveSheet.Name & "'", , "Annulé"
            Exit Sub
        End If
        '---
        FormatConditionnel_Statut
        FormatConditionnel_SDF
        LignesSansStatut
    End Sub
     
    Private Sub FormatConditionnel_Statut()
        '--- ajuste le format conditionnel pour les plages de données "statuts"
        '--- en utilisant les cellules de la plage N3:N24 de la feuille Formulaire
        Dim wshFrm As Worksheet, kR As Long, rStat As Range
        Dim rPlage As Range, kR1 As Long, kLastRow As Long
        Set wshFrm = ThisWorkbook.Worksheets("Formulaire")
        '--- ligne contenant le mot-titre "CATEGORIE"
        kR1 = Columns("A:A").Cells.Find(What:="CATEGORIE", After:=Range("A1"), LookIn:=xlValues, _
            LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Row
        kLastRow = Cells(Rows.Count, 1).End(xlUp).Row                       '--- n° dernière ligne colonne 1
        '--- plage sous le mot-titre CATEGORIE
        Set rPlage = Range("G" & kR1 + 1 & ":NH" & kLastRow)
        With rPlage
            .FormatConditions.Delete
            '--- formats conditionnels reprenant ceux utilisés dans le tableau des statuts
            kR = 23                             '<<< ligne dernier "statut",  à ajuster si nécessaire
            While kR > 3
                Set rStat = wshFrm.Range("N" & kR)
                Debug.Print kR, rStat.Value
                .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=""" & rStat.Value & """"
                .FormatConditions(.FormatConditions.Count).SetFirstPriority
                With .FormatConditions(1)
                    .StopIfTrue = True
                    .Font.Bold = rStat.Font.Bold
                    .Font.Color = rStat.Font.Color
                    .Interior.Color = rStat.Interior.Color
                End With
                kR = kR - 1
            Wend
            Set rStat = Nothing
            '--- formats conditionnels relatif aux jours fériés
            .FormatConditions.Add Type:=xlExpression, Formula1:="=NON(ESTNA(RECHERCHEV(G$2;$NK$5:$NK$17;1;0)))"
            .FormatConditions(.FormatConditions.Count).SetFirstPriority
            With .FormatConditions(1)
                .StopIfTrue = False
                .Interior.Color = Range("NL4").Interior.Color
            End With
            '--- formats conditionnels samedi-dimanche
            .FormatConditions.Add Type:=xlExpression, Formula1:="=JOURSEM(G$2;2)>5"
            .FormatConditions(.FormatConditions.Count).SetFirstPriority
            With .FormatConditions(1)
                .StopIfTrue = False
                .Interior.Color = Range("NL4").Interior.Color
            End With
            '---
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
        End With
        Set rPlage = Nothing
        Set wshFrm = Nothing
    End Sub
     
     
    Private Sub FormatConditionnel_SDF()
        '--- ajuste le format conditionnel pour les samedis, dimanches et jours fériés
        Dim wshFrm As Worksheet, kR As Long, rStat As Range
        Dim rPlage As Range, kR1 As Long
        Set wshFrm = ThisWorkbook.Worksheets("Formulaire")
        '--- ligne contenant le mot-titre "CATEGORIE"
        kR1 = Columns("A:A").Cells.Find(What:="CATEGORIE", After:=Range("A1"), LookIn:=xlValues, _
            LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Row
        '--- plage de la ligne 1 à celle qui précède le mot-titre CATEGORIE
        Set rPlage = Range("G2:NH" & kR1 - 1)
        With rPlage
            .FormatConditions.Delete
            '--- formats conditionnels relatif aux jours fériés
            .FormatConditions.Add Type:=xlExpression, Formula1:="=NON(ESTNA(RECHERCHEV(G$2;$NK$5:$NK$17;1;0)))"
            .FormatConditions(.FormatConditions.Count).SetFirstPriority
            With .FormatConditions(1)
                .StopIfTrue = False
                .Interior.Color = Range("NL4").Interior.Color
            End With
            '--- formats conditionnels samedi-dimanche
            .FormatConditions.Add Type:=xlExpression, Formula1:="=JOURSEM(G$2;2)>5"
            .FormatConditions(.FormatConditions.Count).SetFirstPriority
            With .FormatConditions(1)
                .StopIfTrue = False
                .Interior.Color = Range("NL4").Interior.Color
            End With
            '---
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
        End With
        Set rPlage = Nothing
    End Sub
     
    Private Sub LignesSansStatut()
        Dim kR As Long, kR1 As Long, kLastRow As Long
        '--- ligne contenant le mot-titre "CATEGORIE"
        kR1 = Columns("A:A").Cells.Find(What:="CATEGORIE", After:=Range("A1"), LookIn:=xlValues, _
            LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Row
        kLastRow = Cells(Rows.Count, 1).End(xlUp).Row                       '--- n° dernière ligne colonne 1
        For kR = kR1 + 1 To kLastRow
            If Range("A" & kR) = "" Then
                '--- si cellule en colonne A vide = ligne de séparation sans format conditionnel
                Range("A" & kR).Copy
                With Range("A" & kR & ":NH" & kR)
                    .PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                    .FormatConditions.Delete
                    .Borders(xlInsideVertical).LineStyle = xlNone
                End With
                Application.CutCopyMode = False
            End If
        Next kR
        Range("G3").Select
    End Sub
    Pour la superposition samedi-dimanche-férié et statut il vous faudra faire un compromis. Ici la priorité est donnée à la couleur de fond des samedi-dimanche-férié.

    Bonne continuation.
    Fichiers attachés Fichiers attachés

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2020
    Messages : 10
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    Merci pour les informations et le fichier corrigé.

    Cordialement.

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2020
    Messages : 10
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    Suite à l'agrémentation des données, j'ai essayé de planifier plusieurs périodes pour des personnes différentes et cela agrémente sur la même personne.
    Je ne sais pas si cela vient du fait que j'ai supprimé les lignes existantes et inséré via le formulaire les données pour arrivée au document final en PJ ou bien si c'est une problématique à l'enregistrement du fichier car celui-ci change le nom de celui-ci de prévision à Prévision v6 quand je l'enregistre du site vers mon PC.
    J'ai essayé aussi le bouton mise en forme conditionnelle et celui-ci n'a aucun action.
    Pourriez-vous modifier la macro "modifier" du personnel dans le formulaire de façon que dès l'activation du bouton en question celle-ci modifie et reclasse le personnel selon les critères de "ajouter" tout en conservant la ligne lié à l'intéressé lors du classement.

    Vous remerciant par avance.

    Cordialement.
    Fichiers attachés Fichiers attachés

  13. #13
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Bonjour,

    Je n'ai pas rencontré les problèmes que vous mentionnez sur mon pc.
    Pour ce qui est de "modifier", le formulaire ne convient pas, mais le clic sur le bouton indique la procédure à suivre pour effectuer de telles modifications.
    Comme toujours, faire des sauvegardes ... on ne sait jamais!

    Bonne continuation.
    Fichiers attachés Fichiers attachés

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2020
    Messages : 10
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    Je vous remercie pour la dernière version. Tout fonctionne à merveille.
    Petite question anodine pour vous mais qui a une importance pour moi dans la gestion, surtout en fin d'année quand je dois jongler entre deux années.
    Après avoir créer l'année suivante, je souhaiterais pouvoir planifier soit pour l'onglet année en cours soit pour l’année A+1 mais une fenêtre d'erreur s'affiche car la date de planification et supérieur à l'année en cours.
    Y a t'il possibilité dans une macro de l'onglet formulaire planification d'avoir le choix de la feuille a agrémenter soit l'année en cours, soit l'année suivante.
    Une fois l'année fini, pour l'archivage pourriez-vous réaliser une macro pour copier l'onglet et l'enregistrer vers une autre feuille autre que dans le fichier en question ou dans un onglet après tous les onglets "année, liste et planification".

    Vous remerciant infiniment pour le temps consacrés et l’excellent travail que vous avez fourni dans la réalisation de ce sujet.

    Cordialement.

  15. #15
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Bonjour,
    Voilà, il ne vous reste plus qu'à comprendre le code si plus tard il faut encore adapter quelque chose!
    Une fois qu'une année est vraiment terminée, le plus simple est de supprimer l'onglet: clic droit sur le nom de l'onglet, puis sélectionner Supprimer. Attention: pas de récupération possible de cet onglet supprimé si le dossier a été sauvegardé.
    Cordialement.
    Fichiers attachés Fichiers attachés

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2020
    Messages : 10
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    Merci pour les éléments rajoutés. C'est parafait !!!!!

    J'ai une dernière doléance et j'arrêterai de vous embêter sur ce travail.
    Dans le dossier prévision en PJ, j'ai rajouté un onglet au nom d'une section avec des commentaires pour expliquer ma demande cela et une copie de la version 8 dont les éléments ont été rajoutés afin d'expliquer ce qui émets une fenêtre d'erreur mais plus simple a expliquer.
    Cela doit être identique pour chaque section.
    J'ai essayé de faire des recherches V ou SI mais cela n'a pas fonctionné, j'ai ensuite essayé avec un tableau croisé dynamique mais cela ne fonctionne pas car je ne maitrise pas non plus.

    Pourriez vous jeter un œil sur la section , je ferais le travail pour les autres.

    Vous remerciant par avance de votre gentillesse.
    Cordialement.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/03/2014, 08h33
  2. Réponses: 0
    Dernier message: 22/03/2014, 18h13
  3. [WD-2010] Pied de page différent selon section
    Par Titigre dans le forum VBA Word
    Réponses: 2
    Dernier message: 23/04/2012, 08h36
  4. Page qui affiche des informations selon un paramètre
    Par blasil64 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 24/08/2010, 19h11
  5. Trigger vidant des informations selon une contrainte de temp
    Par jlassira dans le forum Développement
    Réponses: 1
    Dernier message: 16/11/2005, 15h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo