Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Macro de détection de cellules non vides consécutives

  • Initiateur de la discussion Initiateur de la discussion azmodan31
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

A

azmodan31

Guest
Bonjour,

J'ai un fichier pour établir un planning. Ce que je souhaiterai, c'est trouver une macro qui détecte si il y a plus de 7 jours consécutifs de travail pour un employé. J'ai une ligne par employé, qui comprend des périodes de travail et des périodes de repos. Je cherche donc à savoir si j'ai (n'importe où dans le tableau), une série de 7 cellules consécutives qui sont non vides. Un exemple de planning est en pièce jointe.

Merci d'avance à ceux qui voudront bien se pencher sur mon problème🙂
 

Pièces jointes

Re : Macro de détection de cellules non vides consécutives

Bonjour Abel.

Bonjour tout le monde,

Je cherche un champ pour planter des choux et faire brouter ma chêvre ....

Abel.
Désolé ! Sur ce coup là, je n'ai pas la moindre procédure sous le coude...

J'aime bien, les chèvres... Il y a des poignées...



ROGER2327
#6487


Mardi 10 Pédale 140 (Nativité de Saint Tancrède, jeune homme - fête Suprême Quarte)
14 Ventôse An CCXXI, 6,5460h - vélar
2013-W10-1T15:42:38Z
 
Re : Macro de détection de cellules non vides consécutives

Suite...


...pour rectifier des choses.
La fonction Alerte du message #28 est, je pense, correcte mais incomplète car elle ne vérifie pas les paramètres (par exemple, Transparence doit être compris entre 0 et 1).

Pour éviter un plantage lors de l'exécution de la fonction, il est préférable de l'écrire ainsi :​
VB:
Function Alerte$(Message$, Gauche!, Haut!, Optional Activer As Boolean = True, Optional Inclinaison!, Optional CouleurFond& = 16777215, Optional CouleurTexte&, Optional Graisse As Boolean, Optional Transparence#)
    If Len(Message) Then
        On Error GoTo E
        With ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, Gauche, Haut, 20, 20)
            On Error Resume Next
            With .TextFrame
                With .Characters
                    .Text = Message
                    With .Font
                        .Color = CouleurTexte
                        .Bold = Graisse
                    End With
                End With
                .AutoSize = msoAutoSizeShapeToFitText
            End With
            With .Fill
                .ForeColor.RGB = CouleurFond
                .Transparency = Transparence
            End With
            .IncrementRotation -Inclinaison
            If Activer Then .Select
            Alerte = .Name
            On Error GoTo 0
        End With
    End If
R:
Exit Function
E:  Alerte = "-1"
    Resume R
End Function
D'une part, les paramètres incorrects seront ignorés, d'autre part, en cas d'impossibilité de créer la zone de texte, la fonction renvoie "-1".​


Bonne soirée.


ROGER2327
#6488


Mardi 10 Pédale 140 (Nativité de Saint Tancrède, jeune homme - fête Suprême Quarte)
14 Ventôse An CCXXI, 7,3313h - vélar
2013-W10-1T17:35:43Z
 
Dernière édition:
Re : Macro de détection de cellules non vides consécutives

Roger,

Parfait je réussi bien à afficher mon résultat sous forme de post-it (qui l'eu cru...?) Tes explications sont vraiment très pratiques pour le novice que je suis 🙂

Par contre je rencontre un autre problème: Le code que tu as donné en message #26 est tellement bon que celui de mes autres macros fait pale figure en comparaison...Pourrais-tu m'aider pour les codes que j'ai en module un et deux à récupérer la date afin de l'afficher dans le message de fin?

Mais là j'en demande beaucoup peut-être....

Dans tous les cas merci pour tout 🙂
 

Pièces jointes

Dernière modification par un modérateur:
Re : Macro de détection de cellules non vides consécutives

Bonjour le fil, le forum,

1 - azmodan, attention aux données confidentielles.

2 - Sur le dernier exemple de azmodan31, en A4 et A13, on pourrait croire que nous avons la même personne.
Pourrait, seulement. Car, à y bien regarder, il ne s'agit pas de la même personne.
Bon, certe, on a planning normal et astreinte et plus bas, le copier/coller a bien fonctionné.
Mais comme, dit plus tôt, cette présentation de planning qui est, certe, pratique, à priori intuitive, habituelle, etc, demande une rigeur rigoureusement rigoureuse dans le report des données d'un "pavé" à l'autre. Un espace, et paf !, 14 jours travaillés ...

N'empèche que je cherche quand même un champ....

Abel.
 
Re : Macro de détection de cellules non vides consécutives

Bonjour Abel,

1. Tant que je ne donne pas le nom de ma socièté, je ne pense pas qu'il y ait des problèmes de confidentialité, surtout qu'il ne s'agit là que d'un planning. Mais je te remerci pour ton conseil😉

2. Je ne suis pas sur de bien comprendre ce que tu veux dire, on a bien la même personne en A4 et A13, il s'agit effectivement de deux boques différents, "Semaine de travail" et "Astreinte". Cependant ce planning contient volontairement des erreurs, que je modifi à chaque fois que je veux tester le code.

Pour ton champ pas mieux.......😉


Azmo
 
Re : Macro de détection de cellules non vides consécutives

Re,

Entre a4 et a13, il y a un espace de différence entre le nom et le prénom. Excel interprétera ces deux cellules comme ayant des contenus différents.
Cela peut être gènant quand on passe d'un "bloc" à l'autre.
Dans l'exemple, tout va bien car d'un "bloc" astreinte à l'autre, c'est identique comme pour les "blocs" non astreinte.
Mais il faut veiller à cette erreur possible.

Abel.
 
Re : Macro de détection de cellules non vides consécutives

Re,

Ok cette subtilité m'avait échappé, je corrigerai, merci pour l'oeuil de lynx 😉

Azmo
 
Re : Macro de détection de cellules non vides consécutives

Bonjour à tous,

Concernant le message #33, j'adresse ma demande a Roger car il est à l'origine du code, mais si quelqu'un d'autre veut le tenter je suis preneur aussi 😉

Azmo
 
Re : Macro de détection de cellules non vides consécutives

Bonjour à tous


Après décorticage du module Module1, il me semble[SUP](1)[/SUP] qu'on peut le remplacer par la seule procédure suivante :​
VB:
Sub VerificationLateEarly()
Dim Pers(), CritC(), plg As Range, plgR(), refDate$
Dim i&, j&, k&, p&, d&, VF As Boolean
Dim Crit0$, Crit1$
Dim ep$, msg$
    CritC = Array("LT", "EY")
    With Worksheets("Paramètres")
        On Error GoTo E1
        Pers = .[A1].Resize(.Cells(.Rows.Count, 1).End(xlUp).Row).Value
        On Error GoTo 0
        refDate = .[C2].Value
    End With
    With Worksheets("Cycle Planning")
        On Error GoTo E1
        plgR = .Range("DATA").Value
        On Error GoTo 0
    End With
    For p = 2 To UBound(Pers, 1)
        If Not IsEmpty(Pers(p, 1)) Then
            ep = Pers(p, 1)
            For d = 1 To UBound(plgR, 1)
                If plgR(d, 1) = refDate Then
                    For i = d + 1 To UBound(plgR, 1)
                        If plgR(i, 1) = ep Then
                            For j = 2 To UBound(plgR, 2)
                                Crit0 = Crit1: Crit1 = plgR(i, j)
                                If Crit0 = CritC(0) And Crit1 = CritC(1) Then
                                    msg = msg & IIf(VF, "", ep & " :" & vbLf) & Space(12) & CritC(0) & " - " & CritC(1) & "   ( " & Format(plgR(d, j) - 1, "ddd dd/mm/yy") & " - " & Format(plgR(d, j), "ddd dd/mm/yy") & " )" & vbLf
                                    VF = True
                                End If
                            Next
                        ElseIf plgR(i, 1) = refDate Or IsEmpty(plgR(i, 1)) Then
                            Exit For
                        End If
                    Next
                End If
            Next
            If VF Then msg = msg & vbLf
            VF = False
            Crit1 = ""
        End If
    Next
    If Len(msg) Then msg = vbLf & Left$(msg, Len(msg) - 1)
   Call Alerte(Message:=msg, Gauche:=90, Haut:=45, Largeur:=240, Activer:=True, Inclinaison:=5, CouleurFond:=RGB(255, 255, 64), CouleurTexte:=0, Graisse:=False, Transparence:=0.12)
Exit Sub
'Gestionnaire d'erreurs de lecture des paramètres :
E1:
    MsgBox "Aucun contrôle à faire." 'Parce que la liste du
'personnel est vide et/ou il n'y a pas de données à traiter.
    End
End Sub
Sa structure est (en plus simple) voisine de celle de la procédure P7J : s'y reporter pour les commentaires...

Quant au module Module2, j'ai eu la flemme d'aller jusqu'au bout...

Une remarque : vous avez conservé la première version de la fonction Alerte. Ça fonctionne, certes, mais je vous engage à voir le message #32 (et peut-être aussi #28, modifié).

_______________
[SUP](1)[/SUP] ... il me semble seulement ; je n'ai pas la certitude d'avoir tout compris...



ROGER2327
#6496


Vendredi 13 Pédale 140 (Sainte Valburge - fête Suprême Quarte)
17 Ventôse An CCXXI, 0,2593h - doronic
2013-W10-4T00:37:20Z
 
Re : Macro de détection de cellules non vides consécutives

Une fois de plus merci beaucoup Roger,

Le code fonctionne parfaitement.

Pour la fonction alerte j'avais bien noté mais je n'avais pas encore fait le changement, merci pour le rappel 🙂

Azmo
 
Re : Macro de détection de cellules non vides consécutives

Suite...


Un essai pour remplacer VerificationAstreinte :​
VB:
Sub Vérification_Astreinte()
Dim Pers(), CritC(), plg As Range, plgR(), refDate$
Dim i&, j&, k&, l&, m&, n&, p&, d&, VF As Boolean, VF2 As Boolean
Dim ep$, msg$
  CritC = Array(Array("WE", "WL", "Off", "Vac"), Array("AstrW", "Astr"))
  With Worksheets("Paramètres")
    On Error GoTo E1
    Pers = .[A1].Resize(.Cells(.Rows.Count, 1).End(xlUp).Row).Value
    On Error GoTo 0
    refDate = .[C2].Value
  End With
  With Worksheets("Cycle Planning")
    On Error GoTo E1
    plgR = .Range("DATA").Value
    On Error GoTo 0
  End With
  For p = 2 To UBound(Pers, 1)
    If Not IsEmpty(Pers(p, 1)) Then
      ep = Pers(p, 1)
      For d = 1 To UBound(plgR, 1)
        If plgR(d, 1) = refDate Then
          For i = d + 1 To UBound(plgR, 1)
            If plgR(i, 1) = ep Then
              VF2 = False
              For l = i + 1 To UBound(plgR, 1)
                If plgR(l, 1) = ep Then
                  VF2 = True: Exit For
                ElseIf plgR(i, 1) = refDate Then
                  VF2 = False: Exit For
                End If
              Next
              If VF2 Then
                For j = 2 To UBound(plgR, 2)
                  VF2 = False
                  For m = 0 To UBound(CritC(0))
                    If plgR(i, j) = CritC(0)(m) Then VF2 = True: Exit For
                  Next
                  If VF2 Then
                    VF2 = False
                    For n = 0 To UBound(CritC(1))
                      If plgR(l, j) = CritC(1)(n) Then VF2 = True: Exit For
                    Next
                    If VF2 Then
                      msg = msg & IIf(VF, "", ep & " :" & vbLf) & Space(12) & CritC(0)(m) & " - " & CritC(1)(n) & "   ( " & Format(plgR(d, j), "ddd dd/mm/yy") & " )" & vbLf
                      VF = True
                    End If
                  End If
                Next
              End If
            ElseIf plgR(i, 1) = refDate Or IsEmpty(plgR(i, 1)) Then
              Exit For
            End If
          Next
        End If
      Next
      If VF Then msg = msg & vbLf
      VF = False
    End If
  Next
  If Len(msg) Then msg = vbLf & Left$(msg, Len(msg) - 1)
  Call Alerte(Message:=msg, Gauche:=90, Haut:=45, Activer:=True, Inclinaison:=5, CouleurFond:=RGB(20, 255, 240), CouleurTexte:=0, Graisse:=False, Transparence:=0.12)
Exit Sub
'Gestionnaire d'erreurs de lecture des paramètres :
E1:
  MsgBox "Aucun contrôle à faire." 'Parce que la liste du
'personnel est vide et/ou il n'y a pas de données à traiter.
  End
End Sub



ROGER2327
#6503


Samedi 14 Pédale 140 (Sabbat - Vacuation)
18 Ventôse An CCXXI, 0,7175h - mouron
2013-W10-5T01:43:19Z
 
Dernière édition:
Re : Macro de détection de cellules non vides consécutives

Bonjour Roger et bonjour à tous,

Une fois de plus je suis bluffé, le code est super, il fonctionne parfaitement.

Que dire à part merci, merci, merci 🙂

Azmo
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…