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

Toutes les lettres désignent des jours travaillés, elles ne diférencient que les horaires de travail, excepté les Astr et AstrW, qui sont des astreintes et pour lequelles je n'ai pas de vérification à faire.

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

Bonjour azmodan31, JBARBE,

Cette formule en AR3 détecte si 7 cellules consécutives sont remplies sur la plage B3:V3 :

Code:
=SOMMEPROD(N(SOUS.TOTAL(3;DECALER(A3;;COLONNE(A1:O1);;7))=7))
Si c'est le cas le résultat est > 0.

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

Bonjour le fil, bonjour le forum,

Une propositon VBA avec le code ci-dessous :
Code:
Sub Macro1()
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim b As String 'déclare la variable b
Dim li As Range 'déclare la variable li (LIgne)
Dim celi As Range 'déclare la variable celi (CEllule de la LIgne)
Dim a As String 'déclare la variable a

With Sheets("Cycle Planning") 'prend en compe l'onglet "Cycle Planning"
    dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée dl de la colonne 1 (=A)
    Set pl = .Range("A3:A" & dl) 'définit la plage pl
    Set pl = pl.SpecialCells(xlCellTypeConstants) 'redéfinit la plage pl (sans les cellules vides)
End With 'fin de la prise en compe de l'onglet "Cycle Planning"
For Each cel In pl 'boucle 1 : sur toutes les cellules cel de la plahe pl
    b = "" 'réinitialise la variable b
    If cel.Value <> "Employee / Days" Then 'condition 1 : si la valeur de la cellule est différente de "Employee / Days"
        Set li = Range(Cells(cel.Row, 2), Cells(cel.Row, 22)) 'définit la ligne li
        For Each celi In li 'boucle 2 sur toutes les cellules celi de la ligne li
            Select Case celi.Value 'agit en fonction de la valeur de la cellule celi
                Case "", "Astr", "AstrW" 'cas vide, "Astr" et "AstrW"
                    a = "," 'définit la variable a
                Case Else 'autres cas
                    a = 1 'définit la variable a
            End Select 'fin de l'acion en fonction de la valeur de la cellule celi
            b = IIf(b = "", a, b + a) 'définit la variable b
        Next celi 'prochaine cellule de la boucle 2
        For i = LBound(Split(b, ",")) To UBound(Split(b, ",")) 'boucle fur toutes les valeurs du tableau split(b,",")
            If Len(Split(b, ",")(i)) >= 7 Then 'condition 2 : si le nombre de caractères de la valeur de la boucle est supérieur ou égal à 7
                MsgBox "Voir problème sur cette ligne!" 'message
                cel.EntireRow.Select 'sélectionne la ligne
                Exit Sub 'sort de la procédure
            End If 'fin de la condition 2
        Next i 'prochaine valeur tu tableau spli(b, ",")
    End If 'fin de la condition 1
Next cel 'prochaine cellule de la boucle 1
MsgBox "Aucune anomalie dans le tableau" 'message de fin
End Sub
La macro détecte une anomalie et s'arrête. Il faudra donc la relancer jusqu'à ce qu'il n'y ai plus aucune anomalie...
 
Re : Macro de détection de cellules non vides consécutives

Bonjour le fil, Robert,

Robert, j'ai lu ton code (un peu en travers j'avoue ! pas besoin des lumières ni de la baignoire !).
Prends tu en compte le fait que 7 jours peuvent être à cheval sur deux semaines qui ne se suivent pas en ligne dans le planning de azmodan31.
Car c'est sa grosse difficulté.
Qu'on le fasse en formule ou en macro, le planning s'arrète en fin d'écran à droite pour continuer "un bloc" dessous pour des raisons pratique de lecture, je suppose.

Je suis le fil depuis un moment pour voir (oui, un poil pervers, je sais ...mais intéressé quand même).


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

bonjour à tous,

En cliquant sur le bouton RECHERCHE la macro s'arrête sur le dernier jour ayant atteints 7 jours avec un message !

Il faut relancer la macro s'il y a eu un message avant !

Bien sur j'aurais pu colorier les jours concernés en rouge et ainsi ne pas relancer la macro mais je n'ai pas voulu changer les couleurs dans le tableau !

La feuille ne se fige pas pour repérer la cellule qui est activée lors de la recherche !

Bonne journée !
 

Pièces jointes

Dernière édition:
Re : Macro de détection de cellules non vides consécutives

Re,

A vérifier, mais pas sûr que d'un point de vue du code du travail une astreinte de plus de 7 jours, surtout si elle est "utilisée", soit légale.
Six jours travaillés consécutifs maximum par semaine. La notion de semaine est assez mal définie.
Mais en recoupant plusieurs textes, on peut comprendre que c'est du lundi au dimanche.
Le repos devant être de 24 h (un jour complet de repos) + 11 h (durée minimum de repos entre deux postes de travail).
A moins qu'on ne soit pas sur le code du travail français.

Abel.

Edit : j'ai testé les deux codes (VBA ...). Celui de Robert est vraiment rapide.
Mais pb sur passage de semaine 14 à 15 et 17 à 18, etc pour les deux codes (en tous cas chez moi).
Ceci dit, c'est tout de même bien ficelé.
 
Dernière édition:
Re : Macro de détection de cellules non vides consécutives

Bonjour le fil, bonjour le forum,


Réponse : heu... non Abel ! Je suis parti de la base "J'ai une ligne par employé". Je navet même pas vu que le planning continuait plus bas, tellement je me suis précipité à coder...
 
Re : Macro de détection de cellules non vides consécutives

Un test pour s'assurer que tout fonctionne !

Ne pas oublier de modifier la cellule sélectionnée, contenant la semaine de 7 jours avant la relance de la macro !

Bonne soirée !
 

Pièces jointes

Dernière édition:
Re : Macro de détection de cellules non vides consécutives

Re tout le monde,

Une autre façon de voir les choses.

J'ai volontairement testé sur 6 jours maxi. Ca se corrige facilement dans le code.
Mais ça n'empèche pas la saisie.

Une autre version pour plus tard. Et oui, il faut penser au changement d'année.

Abel.

Edit : merci Pascal.
 

Pièces jointes

Dernière édition:
Re : Macro de détection de cellules non vides consécutives

Bonjour le fil, le forum,

Vous êtes en RTT ?...

Abel.

EditBon, ben p'isque c'est ... je vais manger. Bon apétit à tout le monde.
 
Dernière édition:
Re : Macro de détection de cellules non vides consécutives

Bonjour à tous.


Un autre essai...
(Double-clic en A1 de l'onglet Cycle Planning pour lancer le contrôle.)​



ROGER2327
#6479


Samedi 7 Pédale 140 (Saint Gavroche, forain - fête Suprême Quarte)
11 Ventôse An CCXXI, 5,5584h - narcisse
2013-W09-5T13:20:24Z
 

Pièces jointes

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

Bonjour à tous,

C'est curieux que les formulistes ne se manifestent pas.

Une formule en AR1 à tirer vers le bas :

Code:
=SOMMEPROD(ESTTEXTE(B1:P1)*(GAUCHE(B1:P1;4)<>"Astr")*ESTTEXTE(C1:Q1)*(GAUCHE(C1:Q1;4)<>"Astr")*ESTTEXTE(D1:R1)*(GAUCHE(D1:R1;4)<>"Astr")*ESTTEXTE(E1:S1)*(GAUCHE(E1:S1;4)<>"Astr")*ESTTEXTE(F1:T1)*(GAUCHE(F1:T1;4)<>"Astr")*ESTTEXTE(G1:U1)*(GAUCHE(G1:U1;4)<>"Astr")*ESTTEXTE(H1:V1)*(GAUCHE(H1:V1;4)<>"Astr"))
Renvoie une valeur > 0 si 7 cellules consécutives contiennent du texte ne commençant pas par Astr.

Et pour visualiser les lignes concernées, une MFC sur les colonnes A:AR avec la formule =$AR1

Fichier joint.

A+
 

Pièces jointes

- 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…