Selection et compte dans excel

Résolu
Bonjour,

A B C D E F G H I J
1 RU RP RP M M M M M RP RP
2 RP N N N N M RP RP RP N
3 RU RP RP M M M M RP RP RP
4 RU RP RP M M M M RP RP RP

1) Ma question est comment faire pour sélectionner en automatique chaque série de 3 R* et pas +. Ne pas sélectionner ni compter si + de 3 R* a la suite.
2) les comptabiliser et mettre le résultat dans une cellule à coté du tableau.

Merci beaucoup.
Configuration: Windows XP Internet Explorer 6.0

14 réponses

  1. Contributeur
    Bonjour

    il faut compter ligne par ligne ?
    si oui ligne1 on aurait 1 (1 serie de 3 R* à la suite) ? j'ai compté 1 par ligne de 1 à 3 et 2 pour la ligne 4...?

    OU.... tout le tableau y compris à cheval sur 2 lignes: j'ai alors compté 6 series...?
    OU....

    Une solution par VBA te conviendrait elle ?
    0
    1. Bonjour Michel,

      Le résultat est 1 série ligne 1; 2 série ligne de 1 à 2; 1 série ligne 3; 1 série ligne 4 => Donc 5 série

      C'est un tableau mais on peut imaginer que tout se trouve sur une seule ligne....

      Il ne faut pas compter ni selectionner si + de 3 r*...

      La soluce VB me convient..

      merci pour votre aide.....
      0
  2. Contributeur
    Bonsoir
    une solution peut être pas trop compliquée, si il faut compter les 3R successifs en ligne
    http://www.cijoint.fr/cjlink.php?file=cj200910/cij5eYoSUC.xls
    Ca doit pouvoir s'adapter aussi à un calcul en colonne, mais on aura du mal avec les diagonales!
    :-)
    Cordialement
    0
    1. Salut tout le monde,

      Quelques propositions, formules et mise en forme conditionnelle
      peut s'adapter en colonne, mais comme le dit notre ami Vaucluse en diagonale bonjour les maux de tête et le poids du fichier, à voir la proposition de Michel_m en VBA

      https://www.cjoint.com/?knxjdz3NRG

      A+
      Mike-31

      Un problème sans solution est un problème mal posé  (Einstein)
      0
      1. Contributeur
        Re,
        Excusez-moi, mais j'avais à faire...

        J'ai essayé vainement par une formule matricielle (ma question pour une solution VBA était une précaution car des demandeurs ne veulent pas de VBA et j'en ai marre d'avoir une réponse sèche...)

        donc proposition avec une fonction personnalisée:

        Function trois_R(plage As Range) As Byte
        'initialisation
        lig = plage.Row
        nbre_R = Application.CountIf(plage, "R*")
        col = 256
        suite = 1
        
        'parcours les colonnes ayant un "R*"
        For cptr = 1 To nbre_R
            anc_col = col
            col = Rows(1).Find("R*", Cells(lig, col), xlValues, xlWhole).Column
        
            'si les les R* ne sont pas jointifs
            If col <> anc_col + 1 Then
                suite = 1
            End If
            'si les R* sont jointifs on additionne le nombre de jointifs
            If col = anc_col + 1 Then
                suite = suite + 1
            End If
            ' si le nombre de jointifs est inf à 4
            If suite < 4 Then
                trois_R = trois_R + Int(suite / 3)  'int(suite/3)=0 tant que suite est <3
            End If
        Next
        End Function
        0
        1. Bonsoir, Michel

          Je suis désolé mais je ne sais pas comment utiliser la fonction. Pourrais tu me donner la marche a suivre.

          Je suis beaucoup plus alaise avec Access...

          Je te joins une page de mon fichier pour que tu comprennes mon problème.

          https://www.cjoint.com/?kotEvhUZhs

          Ce serait bien de pouvoir repérer tous ces R* par 3 avec une couleur de fond, si c'est facile à intégrer dans la fonction.....

          Merci
          0
      2. Contributeur
        re,

        Je viens de regarder ton classeur; il y a beaucoup de choses à améliorer notamment de le rendre perpétuel avec les jours de la semaine calculés par formule (il suffit de mettre des formules pour le 1° du mois...)
        dis moi si ca t'intéresse, j' attends ta réponse avant de commencer
        Pour les couleurs, il faut que je regarde mais on devrait pouvoir...
        0
        1. Bonjour Michel,

          En faite se n'est qu’une copie de la première feuille d'un gros classeur ou tout se fait automatiquement.

          Si tu veux je te fais parvenir le classeur complet mais il fait 1.03 Mo.

          C’est un fichier qui permet de calculer les roulements de 5 équipes en 3x8.

          Donc se que je désir apporter comme amélioration c'est de faire ressortir les périodes de trois repos et de les comptabiliser (car c'est réglementé) afin de pouvoir les modifier si nécessaire.
          (Ne pas comptabiliser les périodes de plus de trois repos).

          Merci pour ton aide sur se projet
          0
      3. Contributeur
        Bonjour,
        Pour colorier les troisR* j'ai été obligé de passer d'une fonction à une procédure...
        ci joint proposition
        https://www.cjoint.com/?kpldy7XGW1

        pour installer
        1/sur mon classeur, tu vas dans VBE ( c'est le m^me qu'avec Access) par alt+F11
        dans la partie code: ctrl+A puis Ctrl+C (on sélectionne tout puis on demande copier)

        2/dans ton classeur
        tu vas dans VBE
        insertion-module
        Ctrl=V (coller)

        3/pour le bouton
        outils-personnaliser-formulaire
        tu choisis le bouton et dessine le avec la petite croix
        tu l'affecte à la macro "compter_troisR"

        0
        1. Merci de répondre aussi vite, mais je ne pourrais consulter ton classeur que ce soir car je suis au boulot et je n'ai pas accès a cjoint.com. Je te donnerais des nouvelles une fois les manips faites.

          Merci encore et bonne journée.......
          0
          1. Contributeur
            au cas où:
            voila ce qui 'il y a à coller dans ton classeur

            Sub compter_troisR()
            Dim col As Byte, suite As Byte, lig As Byte, derlig As Byte
            Dim nbre_R As Byte, cptr As Byte, anc_col As Byte, trois_R As Byte
            
            'initialisation
            col = 255
            suite = 1
            lig = 5
            derlig = Range("B65536").End(3).Row
            Application.ScreenUpdating = False
            'Nettoie le tableau
            reinitialiser
            
            'parcourt les lignes
            For lig = 5 To derlig Step 3
                nbre_R = Application.CountIf(Range(Cells(lig, 2), Cells(lig, 32)), "R*")
                'parcours les colonnes ayant un "R*"
                    For cptr = 1 To nbre_R
                        anc_col = col
                        col = Rows(lig).Find("R*", Cells(lig, col), xlValues, xlWhole).Column
                         'si les les R* ne sont pas jointifs
                         If col <> anc_col + 1 Then
                            suite = 1
                        End If
                        'si les R* sont jointifs on additionne le nombre de jointifs
                         If col = anc_col + 1 Then
                            suite = suite + 1
                        End If
                        'si le nomre de jointif est = 3
                        If suite = 3 Then
                            Range(Cells(lig, col - 2), Cells(lig, col)).Interior.ColorIndex = 35
                        End If
                '        si le nombre de jointifs est inf à 4
                         If suite < 4 Then
                            trois_R = trois_R + Int(suite / 3)  'int(suite/3)=0 tant que suite est <3
                        End If
                    Next cptr
            Cells(lig, 33) = trois_R
            trois_R = 0
            Next lig
            End Sub
            
            Sub reinitialiser()
            Range(Cells(5, 2), Cells(255, 32)).Interior.ColorIndex = xlNone
            Range("AG5:AG255").ClearContents
            End Sub
            
            0
            1. Super, Michel ça prend forme.

              Je ne voudrais pas paraître trop exigent, mais il ya des modifs à apporter. Je ne me suis pas assez bien exprimé depuis le début.

              Ex: les deux deniers jours de janvier et le premier de février doivent aussi être comptés dans les 3 R*, ça va peut-être corser le programme et aussi les périodes supérieur à 3 R* comme celle du 13 février au 19, doivent être ignorés.

              sinon j'ai réussi a faire fonctionner....

              Encore Merci pour ton investissement....
              0
              1. Contributeur
                Bonjour,

                Je ne voudrais pas paraître trop exigent, mais il ya des modifs à apporter. Je ne me suis pas assez bien exprimé depuis le début.
                ce qui me fait un travail bénévole de 3-4 heures pour nada, merci.

                les deux deniers jours de janvier et le premier de février doivent aussi être comptés dans les 3 R*, ça va peut-être corser le programme
                ca va pas corser le programme mais tout refaire... avec une variable-tableau de dimension 366 x 4 et mise en forme conditionnelle sur la feuille excel, soit encore environ 3 à 4 heures de boulot bénévole avec certainement des heures en plus car la demande est incomplète et/ou floue:

                1/sur quel mois compte t on la période à cheval sur 2 mois ?
                2/ les périodes supérieur à 3 R* comme celle du 13 février au 19, doivent être ignorés.
                : si cela veut dire on ignore passé 3 jours c'est fait. Sinon ???

                Voilà, imagine que tu es donné cela à faire à titre onéreux à un professionnel, bonjour la chorale dans le bureau de la Direction.

                Désolé
                0
                1. Bonsoir Michel,

                  Je suis désolé de t'avoir fait perdre ton temps, mais j'avais déjà dit plus haut qu'il fallait considérer que tout se trouvai sur une seule ligne. Les périodes à cheval sont aléatoires, c'est la continuité du roulement de l'année précédente qui fait qu'une période de trois repos tombe à cheval ou pas sur deux mois.
                  Quand à la période supérieure à 3 jours, je vais l'appeler vacance, elle n'est pas une période de repos. Donc je ne la compte pas.

                  Encore une fois désolé, j'essaierais à l'avenir d'être plus clair.

                  Tan-pis.
                  0
                  1. Contributeur
                    Comme le problème m'a branché...
                    ci joint proposition
                    https://www.cjoint.com/?ksv3RaqD3P

                    On ne prend en compte qu'une série de 3 jours R* (pas plus, pas moins)
                    la série est comptabilisée dans le mois qui termine la série
                    0
                    1. Bonjour Michel,

                      Je téléchargerais le ficher ce soir en rentrant, merci et bonne journée.
                      0
                      1. Bonsoir Michel,

                        Alors là moi je dis BRAVO, c'est génial. En manipulant les modules sur Access j'avais toujours réussi à me débrouiller, mais là CHAPEAU. Je vais essayer de comprendre ton raisonnement ainsi que l'écriture dans le module, mais vraisemblablement c'est d'un autre niveau sur Excel. Je crois que j'ai encore beaucoup à apprendre malgré mes 47 ans. Est-ce que "VBA pour Excel pour les nuls" permet de bien s'en sortir dans les modules ?

                        Encore X fois Bravo, je t'envie de maitriser ce langage et la programmation.
                        0