Selection et compte dans excel

Résolu
toufmang -  
toufmang Messages postés 8 Statut Membre -
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. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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. toufmang Messages postés 8 Statut Membre
       
      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. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
     
    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
  3. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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
  4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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. toufmang Messages postés 8 Statut Membre
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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. toufmang Messages postés 8 Statut Membre
       
      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
  7. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  8. toufmang Messages postés 8 Statut Membre
     
    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
  9. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  10. toufmang Messages postés 8 Statut Membre
     
    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
  11. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  12. toufmang Messages postés 8 Statut Membre
     
    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
  13. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  14. toufmang Messages postés 8 Statut Membre
     
    Bonjour Michel,

    Je téléchargerais le ficher ce soir en rentrant, merci et bonne journée.
    0
  15. toufmang Messages postés 8 Statut Membre
     
    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