Programmation fonction

Résolu
Bonjour,

Je suis dans l'impasse vis à vis de mon fichier...

Je fais partie d'une association sportive qui souhaite s'assurer du respect des règles d'inscription. Pour faire simple, nous pointons tous nos cours, 14 au total sur la semaine et nous avons 3 formules d'abonnement (1 cour/semaine, 2 cours/semaine et 3 cours et +/semaine).

Je souhaiterais faire un tableau qui calcul tout seul le nombre de venue par semaine de chaque adhérent.

J'ai donc mon fichier récapitulatif et 14 listes de pointage.

en gros la formule serait littérairement parlant : combien de fois "N° d'adhérent" est venu pendant la S37 (sachant qu'il faut que la formule prenne les données dans 14 listes de pointage).

J'espère que quelqu'un pourra d'aider. Si besoin de ferais des captures d'écran de mes fichiers.

Mélanie

18 réponses

  1. J'ai juste oublier. Il faudrait aussi que la réponse soit en noir si respect des règles et en rouge si non respect (sachant que j'ai fait un code couleur pour les règles d'inscription (N° d'adhérent en rose pour 1 cour, en bleu pour 2 cours et en vert pour 3 cours et +
    0
    1. Contributeur
      Non, Mélanie ; pas de captures d'écran ; il nous faut les fichiers Excel (quitte à ce que tu utilises une copie avec modification des noms propres).
      Va dans https://www.cjoint.com/ pour créer le lien, que tu reviendras coller ici.
      0
      1. voilà le lien : http://cjoint.com/data/0Jtt1Uz4P0x.htm

        pour la confidentialité, j'ai changer les noms de famille, j'ai mis dupont pour tous. De toute façon, c'est le numéro d'adhérent qui est propre à chaque personne.

        seul bémol, pour l'instant certaine personne n'ont pas encore de numéro, que je rajouterais dès que je les auraient !
        0
        1. Bonsoir

          Un essai via vba
          https://www.cjoint.com/?3JtvK7AQPxl
          ... à tester bien sûr

          Et salut à Raymond en passant

          Cdlmnt
          0
          1. Bonsoir,

            j'ai eu du mal à comprendre car il y avait des erreurs dans les tableaux mais c'était à cause des noms (personnes non inscrites n=et qui figuraient dans les listing).

            J'ai donc supprimé ces personnes là mais j'ai fait une bétise sur 2 listes de pointage : lundi 9H15 et mardi 19H25 qui n'ont plus la formule et donc font tout beuger.....

            Voici le lien du nouveau fichier : http://cjoint.com/data3/3JtwSqJ6cPp.htm

            J'ai par contre une dernière question, je n'ai pas encore fait les listings pour les prochains trimestres, il faudra refaire une programmation pour le reste ?
            0
        2. Contributeur
          Salut à toi, ccm81. Je vais devoir me retirer, à cause de mon incurie en VBA.
          -------------------------------------------------------
          Bonsoir, Mélanie. Tu constates qu'il est impossible de travailler sur des bases inexactes ou incomplètes : c'est la toute première démarche, quand on veut manipuler une base de données et faire des tris, des filtres, des recherches, des regroupements, des sous-totaux ... il faut que les données soient fiables.
          Chez toi, tout repose sur le N° d'adhérent ; on ne pouvait donc rien tant que la colonne B n'était pas renseignée. Dans la pratique, quand ce N° n'est pas encore attribué, tu mets un N° provisoire, par exemple commençant par un P.

          Tu as un onglet par jour, donc 14 par semaine ; mais ta feuille récapitulative prévoit 3 tableaux pour des périodes diverses ; tu as donc l'intention de créer combien d'onglets dans un fichier ?
          0
          1. Bonjour,

            Je travaille aujourd'hui et je n'aurais malheureusement pas le temps de me pencher sur le fichier avant ce soir. Je vais créer tous les onglets pour chaque fichier, ce qui sera plus simple (car en réalité, il y a un onglet par semaine sur toute l'année sportive).

            Pour les numéros provisoires, c'est ce que j'ai fait en commançant à 25000.

            En tout cas merci de votre aide. Je vous envoi le fichier ce soir.
            0
        3. 1. J'ai donc supprimé ces personnes là mais j'ai fait une bêtise sur 2 listes de pointage : lundi 9H15 et mardi 19H25 qui n'ont plus la formule et donc font tout beuger.....
          Il suffisait de mettre à jour la formule en colonne C
          https://www.cjoint.com/?3Jul7zp6llF

          2. J'ai par contre une dernière question, je n'ai pas encore fait les listings pour les prochains trimestres, il faudra refaire une programmation pour le reste ?
          Il faut voir comment ça va se présenter

          RQ. empruntée à Raymond
          il est impossible de travailler sur des bases inexactes ou incomplètes : c'est la toute première démarche, quand on veut manipuler une base de données et faire des tris, des filtres, des recherches, des regroupements, des sous-totaux ... il faut que les données soient fiables.

          Bonne journée
          0
          1. J'ai mis à jour le fichier mais les calculs ne se font pas...

            Voici le lien : http://cjoint.com/data3/3JutCbavCWI.htm

            Je suis perdue... Est-ce que le fait de changer d'ordinateur peut faire beuger le fichier ?

            Je voulais aussi avoir votre avis pour la suite de l'année, est-ce que je créé 2 nouveau onglet pour chaque jour (1 onglet par trimestre) ou je fais mes 3 tableaux dans le même onglet ?

            Et si je fais dans le même onglet, il faut que je colle le nouveau tableau sur le côté du 1er ou en dessous ?

            Merci
            0
            1. 1. J'ai mis à jour le fichier mais les calculs ne se font pas...
              Si
              https://www.cjoint.com/?3JuujRaNP5o
              As tu tiré la formule dans toute la plage concernée
              RQ. Le calcul simultané les 3000 formules prend un peu de temps

              2. Est-ce que le fait de changer d'ordinateur peut faire beuger le fichier
              Non
              As tu accepté l'ouverture/l'exécution des macros (pour excel 2003 Outils/Macros/Securité et choisir niveau moyen puis quitter Excel et le relancer - pour autre version, je ne sais pas)

              3. Et si je fais dans le mêe onglet, il faut que je colle le nouveau tableau sur le côté du 1er ou en dessous ?
              Sur le côté et à y être toujours à partir de la même colonne dans toutes les feuilles. Les entêtes Sxx doivent être toutes différentes en ligne 3 pour les 3 trimestres comme dans la feuille Recap. Il faudra quand même modifier la macro

              Cdlmnt
              0
              1. Bonsoir,

                Après avoir passé plusieurs heures j'ai enfin fini mon fichier pour l'année complète ! Je vous laisse le lien car je ne sais pas comment modifier la macro... Et la formule ne marche pas... Je ne suis vraiment pas douée...

                Le voilà : http://cjoint.com/data3/3JuxdAF9RCg.htm

                J'ai aussi une petite demande. Est-il possible de figer les colonnes A, B, C et D sur tous les onglets sauf BABY 14H15, BABY 15H05 et ZUMBA KIDS (sur ces 3 onglets, il ne faut rien faire, le total est simple car un seul cours/Semaine), comme vous l'avez fait sur l'onglet RECAP 2014-2015.

                Merci de votre aide. Cdlt.
                0
                1. Comme tu as décalé la ligne des n° de semaine de la ligne 3 à la ligne 4, il te suffisait de changer la valeur de la constante lis en début de code
                  Les volets sont figés
                  A tester bien sûr!
                  https://www.cjoint.com/?3Jvs40TAhFm

                  Cordialement
                  0
                  1. Merci pour tout !!!

                    Le fichier marche très bien !!

                    pouvez-vous juste me "traduire" le module 1. Au cas où j'ai un soucis, je pourrais peut-être me débrouiller si celui-ci est traduit !

                    cordialement
                    0
                    1. Option Explicit
                      
                      Public Const shdeb = 2    ' premier numero feuilles détail
                      Public Const shfin = 18   ' dernier numéro feuilles détail
                      Public Const conum = 2    ' colonne n° feuilles détail
                      Public Const lis = 4      ' ligne de tête feuilles détail
                      
                      ' num = numero, s = semaine
                      Public Function TotS(num, s)
                      Dim sh As Long, ts As Long, ob As Object, li As Long, co As Long, plage As Range
                      ' initialisation de ts (total cumulé)
                      ts = 0
                      ' pour chaque numéro de feuille depuis shdeb jusqu'à shfin
                      For sh = shdeb To shfin
                        'MsgBox sh & "-" & Sheets(sh).Name
                        ' plage où on va rechercher le numero (colonne conum)
                        Set plage = Sheets(sh).Columns(conum)
                        ' recherche du numero dans la plage
                        Set ob = plage.Find(num, , , xlWhole)
                        ' si num trouvé
                        If Not ob Is Nothing Then
                          ' ligne où num à été trouvé
                          li = ob.Row
                          ' plage ^ù on va rechercher recherche la semaine
                          Set plage = Sheets(sh).Rows(lis)
                          ' recherche de la semaine
                          Set ob = plage.Find(s, , , xlWhole)
                          ' si semaine trouvée
                          If Not ob Is Nothing Then
                            ' colonne où s à été trouvée
                            co = ob.Column
                            ' si La cellule (li,co) est numérique on l'ajoute au total
                            If IsNumeric(Sheets(sh).Cells(li, co)) Then ts = ts + Sheets(sh).Cells(li, co)
                            'MsgBox ts
                          End If
                        End If
                      Next sh
                      ' si ts=0 on renvoie "" sinon on renvoie ts
                      If ts = 0 Then
                        TotS = ""
                      Else
                        TotS = ts
                      End If
                      End Function


                      Bonne journée
                      0
                      1. Merci pour votre aide sur ce fichier. Il marchait super jusqu'à aujourd'hui.

                        Explication : J'ai supprimé3 feuilles de calcul qui ne servait pas pour mon fichier et depuis, les calculs ne se font plus...

                        Nous avons la réunion demain et j'aurais besoin du fichier le plus rapidement possible... si quelqu'un peut m'aider !!!

                        voici le lien du fichier : http://www.cjoint.com/data3/3KBtWIlUgFi.htm

                        Merci
                        0
                        1. Difficile de se remettre dans le contexte
                          A première vue, tu as supprimé des feuilles, donc leur nombre a changé
                          Dans Module 1 essaies de changer la valeur de shfin (remplaces 18 par 15)
                          puis dans la feuille Recap tu vas en E12, tu valides la formule
                          Public Const shdeb = 2    ' premier numero feuilles détail
                          Public Const shfin = 15 ' dernier numéro feuilles détail
                          Public Const conum = 2 ' colonne n° feuilles détail
                          Public Const lis = 4 ' ligne de tête feuilles détail


                          Bon courage
                          0
                          1. Fichier essayé ce matin même après avoir changé le nombre de pages. Cela fonctionne. Merci pour votre rapidité, je suis "sauvée" pour ma réunion !
                            0
                        2. De rien
                          Il faut faire très attention, la macro est prévue pour une configuration, si tu la modifies, il faudra certainement agir sur le code
                          Une modification à apporter au cas où voudrais à nouveau ajouter/supprimer une feuille (SAUF la feuille Recap) : lignes soulignées

                          Public Const shdeb = 2    ' premier numero feuilles détail
                          ' Public Const shfin = 15 ' dernier numéro feuilles détail
                          Public Const conum = 2 ' colonne n° feuilles détail
                          Public Const lis = 4 ' ligne de tête feuilles détail

                          Public Function TotS(num, s)
                          Dim sh As Long, ts As Long, ob As Object, li As Long, co As Long, plage As Range
                          Dim shfin As Long
                          ts = 0
                          shfin = Sheets.Count
                          For sh = shdeb To shfin

                          Bonne réunion
                          0
                          1. Bonsoir,

                            J'ai un problème toujours avec mon fichier, j'ai vérifier chacune des feuilles de calcul mais je ne trouve pas l'erreur...

                            Certaine valeur pour la S2 à S3 ne veulent pas s'afficher dans le récapitulatif...

                            Quelqu'un pourrait-il m'aider ?

                            Voici le lien pour le fichier : http://www.cjoint.com/data/0Dtw01lLAB7.htm

                            Merci d'avance
                            0
                            1. Tes en têtes (S2 et S3 en Y4 et Z4) dans toutes tes feuilles, sont suivies d'un espace, essaies en le supprimant.
                              RQ. la constante shfin vaut 13 alors qu'il y a 14 feuilles, est ce normal. A ce sujet, tu n'as pas tenu compte de la dernière remarque qui permet de définir la valeur de shfin dans la procedure TotS

                              Bonne journée
                              0
                              1. Merci, j'ai supprimé tous les espaces après les S...

                                Par contre, je ne comprend pas votre remarque par rapport à la valeur de shfin dans la procédure TotS...

                                Merci pour votre aide !
                                0
                            2. Tu reprends le post #19
                              1. Tu supprimes la ligne souligcée dans les constantes
                              2. Tu ajoutes les deux lignes soulignées dans le corps de la fonction
                              A l'avenir, si tu ajoutes une feuille date, tu n'auras plus besoin de mettre la constante shfin à jour

                              Bonne fin de journée
                              0