Rechercher : dans
Par :

Selection et compte dans excel

Dernière réponse le 19 oct 2009 à 20:56:30 toufmang, le 13 oct 2009 à 15:45:30 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « Selection et compte dans excel » dans :
[VBA] Détection de modification de cellule VoirExemple pour une MFC avec plus de 3 conditions. Private Sub Worksheet_Change(ByVal Target As Range) Dim Cel As Range For Each Cel In Target 'Adapter la/les plages. If Not Intersect(Cel, Range("B1:B30,D1:D30")) Is Nothing...
Tableur - La sélection des cellules VoirSélection de cellules Le tableur est un formidable outil pour manipuler des données. Ainsi, pour pouvoir manipuler les données il est nécessaire de disposer d'outils permettant de sélectionner rapidement toutes les cellules dont on a...

1

michel_m, le 13 oct 2009 à 17:13:52

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 ? Cordialement, Michel

Répondre à michel_m

4

toufmang, le 14 oct 2009 à 08:23:53

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

Répondre à toufmang

2

Vaucluse, le 13 oct 2009 à 19:00:02

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.xl­s
Ca doit pouvoir s'adapter aussi à un calcul en colonne, mais on aura du mal avec les diagonales!
:-)
Cordialement Demandons nous si nous ne sommes pas seuls à comprendre ce q­ue l'on explique?

Répondre à Vaucluse

3

Mike-31, le 13 oct 2009 à 23:14:12

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

http://cjoint.com/?knxjdz3NRG

A+
Mike-31

Un problème sans solution est un problème mal posé  (Einstei­n)

Répondre à Mike-31

5

michel_m, le 14 oct 2009 à 17:21:48

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
Cordialement, Michel

Répondre à michel_m

6

toufmang, le 14 oct 2009 à 19:43:25

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.

http://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

Répondre à toufmang

7

michel_m, le 14 oct 2009 à 23:25:52

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... Cordialement, Michel

Répondre à michel_m

8

toufmang, le 15 oct 2009 à 08:08:12

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

Répondre à toufmang

9

michel_m, le 15 oct 2009 à 11:04:34

Bonjour,
Pour colorier les troisR* j'ai été obligé de passer d'une fonction à une procédure...
ci joint proposition
http://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"

Cordialement, Michel

Répondre à michel_m

10

toufmang, le 15 oct 2009 à 11:54:41

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

Répondre à toufmang

11

michel_m, le 15 oct 2009 à 12:13:53

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
Cordialement, Michel

Répondre à michel_m

12

toufmang, le 15 oct 2009 à 14:08:36

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

Répondre à toufmang

13

michel_m, le 16 oct 2009 à 17:15:18

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é
Cordialement, Michel

Répondre à michel_m

14

toufmang, le 17 oct 2009 à 20:40:43

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.

Répondre à toufmang

15

michel_m, le 18 oct 2009 à 22:00:28

Comme le problème m'a branché...
ci joint proposition
http://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 Cordialement, Michel

Répondre à michel_m

16

toufmang, le 19 oct 2009 à 07:48:53

Bonjour Michel,

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

Répondre à toufmang

17

 toufmang, le 19 oct 2009 à 20:56:30

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.

Répondre à toufmang