XL 2010 gérer le passage des adhérents.

yveslam

XLDnaute Nouveau
Je recherche la fonction suivante:
un adhérents (B5) passe la première semaine à 14h(C5),la deuxième semaine à 14h30(C5), la troisième semaine à 15h(C5), la quatrième semaine à 14h(C5) et ainsi de suite
Le changement de l'heure doit se faire chaque fois que l'on mets un chiffre en B5
la case B5 est remise à zéro toutes les semaines
 

Pièces jointes

  • Classeur a.xlsx
    12.7 KB · Affichages: 8

yveslam

XLDnaute Nouveau
Ce n'est pas ce que je recherche.(voir nouveau fichier)
Quand on scanne la carte adhérents, "OK" viens s'inscrire dans A12, l'heure de passage est à 14h
En fin de journée, on supprime toute les données de la colonne A.
je voudrais que chaque scan sur le même adhérents fasse changer l'heure de passage 14h puis 14h30,puis 15h et on recommence. Cela me permet de voir combien d'adhérents j'ai à 14h, 14h30,15h(ce sont des chiffres)
vous pouvez effacé "ok" si vous voulez
 

Pièces jointes

  • Essais.xlsx
    26 KB · Affichages: 7
E

Exl-Noob

Guest
Salut,

J'ai un peu de mal à saisir la demande.
  1. Le scan se contente de placer OK dans le colonne A et inscrit le numéro de l'adhérent dans la colonne B ?
  2. Comment se détermine l'heure de passage ?
  3. Pourquoi un chiffre et pas un traitement horaire pour l'heure de passage ?
Ensuite je ne comprends pas l'intérêt de tout le pavé J1:K9, j'ai l'impression qu'un simple NBVAL(J12:J14) pourrait le remplacer.

@+
 

yveslam

XLDnaute Nouveau
Bonjour
le scan se contente de placer "ok" dans la colonne A, le N° adhérent est déjà inscrit.
Nous faisons de la distribution alimentaire sur 3 plage horaire bien définie(14h, 14h30, 15h)
L'adhérents X passe la premier semaine à 14h la deuxième semaine à14h30, la troisième semaine à 15h et on recommence à 14h. Le changement ce fait à chaque scan.
 
E

Exl-Noob

Guest
Ok. Ce que j'ai compris et mes questions :
  1. A chaque passage vous scannez la carte de l'adhérent.
  2. L'heure de passage prévue de l'adhérent est connue de ce dernier, vous ne faites pas passer l'adhérent sur un créneau sur lequel il n'a pas été prévu (vs. j'inscris l'heure de passage réelle de l'adhérent).
  3. Du coup, à chaque lecture de la carte faut-il ?
    1. Inscrire dans la cellule K12 une nouvelle information
    2. garder une trace des 2 précédents passages en inscrivant le résultat dans les cellules K12:K14
  4. Comment se détermine l'heure du premier passage (nouvel adhérent) ?
  5. Pourquoi a-t-on des valeurs différentes dans la colonne E, on a une ligne par adhérent ou on a un onglet par adhérent ?
  6. Lors du passage, il faut tenir compte du jour pour inscrire la somme due dans les colonnes M à Q ?
  7. Que faire si l'adhérent présente une carte échue ?
Merci de tes précisions.
 

yveslam

XLDnaute Nouveau
Réponse en gras
  1. A chaque passage vous scannez la carte de l'adhérent. oui
  2. L'heure de passage prévue de l'adhérent est connue de ce dernier, vous ne faites pas passer l'adhérent sur un créneau sur lequel il n'a pas été prévu oui (vs. j'inscris l'heure de passage réelle de l'adhérent). Chaque adhérent doit passer à l'heure prévue
  3. Du coup, à chaque lecture de la carte faut-il ?
    1. Inscrire dans la cellule K12 une nouvelle information oui
    2. garder une trace des 2 précédents passages en inscrivant le résultat dans les cellules K12:K14 non, K12;K14 sont des lignes d'adhérents.
  4. Comment se détermine l'heure du premier passage (nouvel adhérent) ? c'est nous qui déterminons l'heure de passage( 14h, ou 14h30, ou 15h) Dans le tableau "décompte" nous savons combien de personnes sont de passage à 14h.14h,30.15h et nous équilibrons pour les nouveaux adhérents
  5. Pourquoi a-t-on des valeurs différentes dans la colonne E, on a une ligne par adhérent ou on a un onglet par adhérent ? il y a une ligne par adhérents
  6. Lors du passage, il faut tenir compte du jour pour inscrire la somme due dans les colonnes M à Q ? non oubliez ces cellules
  7. Que faire si l'adhérent présente une carte échue ? rien, la date apparait dans une case rouge cela fonctionne bien a ce jour
Merci de votre patiente
Yves
 
E

Exl-Noob

Guest
Réponse en gras
  1. Comment se détermine l'heure du premier passage (nouvel adhérent) ? c'est nous qui déterminons l'heure de passage( 14h, ou 14h30, ou 15h) Dans le tableau "décompte" nous savons combien de personnes sont de passage à 14h.14h,30.15h et nous équilibrons pour les nouveaux adhérents
Cela pose un problème évident.
Pour pouvoir déterminer la prochaine valeur du tableau, il faut connaître la valeur précédente.
Il faut donc préciser quelque part quelle est l'heure de départ d'origine.
Et ensuite on peut compter le nombre de fois que OK s'est affiché pour déterminer l'heure du passage (ou du prochain passage) (macro vba inévitable).
Ensuite on affiche l'heure du créneau en fonction du nombre de passages précédents.
Comme ça je vois bien une solution.
 

yveslam

XLDnaute Nouveau
Réponse en gras
Cela pose un problème évident.
Pour pouvoir déterminer la prochaine valeur du tableau, il faut connaître la valeur précédente.
Il faut donc préciser quelque part quelle est l'heure de départ d'origine. Cette heure de départ va être affichée dans une case.
Cette case est t'elle commune à tout les adhérents ?(si oui pourquoi ne pas utiliser la case B9)
Ou faut il créer une case par adhérents.(dans ce cas je pense qu'il faut créer un colonne ,vous pouvez insérer une colonne après la colonne K)cette colonne peut elle être masquée? ou créer l'heure de départ dans une autre feuille

Et ensuite on peut compter le nombre de fois que OK s'est affiché pour déterminer l'heure du passage (ou du prochain passage) (macro vba inévitable).
Ensuite on affiche l'heure du créneau en fonction du nombre de passages précédents.
Comme ça je vois bien une solution. Ok si cela est possible
 
E

Exl-Noob

Guest
Bonjour yveslam,

Alors j'arrive à la solution demandée en insérant deux colonnes supplémentaires.
La colonne K qui contient l'heure de passage initiale. Elle se rentre à la main, mais on pourrait même la déterminer automatiquement pour un nouvel adhérent en prenant la créneau le moins fréquenté si on souhaitait pousser l'optimisation au bout.
La colonne L qui contient le nombre de passages depuis la première fois.
Et j'ai renommé la colonne M "Prochaines heure de passage".

A chaque fois que tu scannes un code barre, le nombre de passage est incrémenté par la macro :
VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 1 And Target.Value = "ok" Then Range("L" & Target.Row) = Range("L" & Target.Row) + 1
End Sub
Elle vérifie si elle voit "ok" dans la colonne A et augmente de +1 le chiffre déjà présent dans la colonne L.
Quand tu effaces les "ok" rien ne se passe. Quand tu rajoute un "ok" le nombre de passages augmente à nouveau, automagiquement.

Si tu ajoutes ou effaces plusieurs cellules/formules à la fois, tu vas avoir un message d'erreur, mais tu peux l'ignorer et continuer à travailler. Je cherche une solution auprès des gourous de vb et je te dirai quoi modifier pour supprimer tout ça, si la solution existe.

En colonne L on définit la prochaine heure de passage en fonction du nombre de pointages avec la formule :
Code:
=SI(ESTVIDE(L14);"";CHOISIR(SI(MOD(L14;3)=0;3;MOD(L14;3));"14:00";"14:30";"15:00"))
Ah oui, j'ai basculé toutes ces données en heures, parce que ça m'irritait de les traiter en chiffre ;)

J'en ai profité pour changer les formules en D5:D7, tu peux dénombrer 88 adhérents, à ajuster au besoin. La formule compte le nombre d'adhérents prévus par créneau horaire pour leur prochain passage, mais tu ne sais pas s'ils vont venir si j'ai bien compris...
Code:
=NB.SI(M$12:M$100;C5)

J'ai laissé le tableau en J1:K9 mais j'ai modifié les formules, notamment celle présente en J9, parce que je n'étais pas certain que tu aies besoin de tout ce qui est au dessus pour arriver à ce résultat auquel j'arrive par un autre moyen.
Code:
=NB.SI(J$12:J$100;">0")

Tu peux masquer les colonnes ajoutées bien entendu.

Bonne journée,
 

Pièces jointes

  • Essais.xlsb
    32.4 KB · Affichages: 8

yveslam

XLDnaute Nouveau
Bonjour yveslam,

Alors j'arrive à la solution demandée en insérant deux colonnes supplémentaires.
La colonne K qui contient l'heure de passage initiale. Elle se rentre à la main, mais on pourrait même la déterminer automatiquement pour un nouvel adhérent en prenant la créneau le moins fréquenté si on souhaitait pousser l'optimisation au bout.
La colonne L qui contient le nombre de passages depuis la première fois.
Et j'ai renommé la colonne M "Prochaines heure de passage".

A chaque fois que tu scannes un code barre, le nombre de passage est incrémenté par la macro :
VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 1 And Target.Value = "ok" Then Range("L" & Target.Row) = Range("L" & Target.Row) + 1
End Sub
Elle vérifie si elle voit "ok" dans la colonne A et augmente de +1 le chiffre déjà présent dans la colonne L.
Quand tu effaces les "ok" rien ne se passe. Quand tu rajoute un "ok" le nombre de passages augmente à nouveau, automagiquement.

Si tu ajoutes ou effaces plusieurs cellules/formules à la fois, tu vas avoir un message d'erreur, mais tu peux l'ignorer et continuer à travailler. Je cherche une solution auprès des gourous de vb et je te dirai quoi modifier pour supprimer tout ça, si la solution existe.

En colonne L on définit la prochaine heure de passage en fonction du nombre de pointages avec la formule :
Code:
=SI(ESTVIDE(L14);"";CHOISIR(SI(MOD(L14;3)=0;3;MOD(L14;3));"14:00";"14:30";"15:00"))
Ah oui, j'ai basculé toutes ces données en heures, parce que ça m'irritait de les traiter en chiffre ;)

J'en ai profité pour changer les formules en D5:D7, tu peux dénombrer 88 adhérents, à ajuster au besoin. La formule compte le nombre d'adhérents prévus par créneau horaire pour leur prochain passage, mais tu ne sais pas s'ils vont venir si j'ai bien compris...
Code:
=NB.SI(M$12:M$100;C5)

J'ai laissé le tableau en J1:K9 mais j'ai modifié les formules, notamment celle présente en J9, parce que je n'étais pas certain que tu aies besoin de tout ce qui est au dessus pour arriver à ce résultat auquel j'arrive par un autre moyen.
Code:
=NB.SI(J$12:J$100;">0")

Tu peux masquer les colonnes ajoutées bien entendu.

Bonne journée,

Ca y est j'ai la réponse. Il suffit d'ajouter à la macro existante.
VB:
If Target.Cells.Count > 1 Then Exit Sub
 

yveslam

XLDnaute Nouveau
Bonjour Exl-Noob

Super merci,
Tout semble bien fonctionner, cependant
sur L 12 la formule est différente c’est normal ?=SI(ESTVIDE(L14);"";CHOISIR(SI(MOD(L14;3)=0;3;MOD(L14;3));"14:00";"14:30";"15:00"))
=CHOISIR(SI(MOD(L13;3)=0;3;MOD(L13;3));"14:00";"14:30";"15:00")
=CHOISIR(SI(MOD(L14;3)=0;3;MOD(L14;3));"14:00";"14:30";"15:00")
 
E

Exl-Noob

Guest
Ah oui bien vu. J'ai oublié de recopier la formule vers le bas, et j'avais gardé les références de test.

J'ai ajouté en ligne 12 une vérification pour que tu puisses insérer la formule sur les cellules en dessous sans que ça déclenche l'apparition d'une heure de prochain passage. Du coup je conditionne l'apparition de l'heure du prochain passage au fait qu'il y ai au moins un passage de l'adhérent. Pour son premier passage c'est inscrit en dur dans la colonne K.

Et je viens de voir que j'avais laissé une typo en C7, 15:30 eu lieu de 15:00.

Ci-joint le fichier rectifié.
 

Pièces jointes

  • Essais (1).xlsb
    32.4 KB · Affichages: 6

yveslam

XLDnaute Nouveau
Ah oui bien vu. J'ai oublié de recopier la formule vers le bas, et j'avais gardé les références de test.

J'ai ajouté en ligne 12 une vérification pour que tu puisses insérer la formule sur les cellules en dessous sans que ça déclenche l'apparition d'une heure de prochain passage. Du coup je conditionne l'apparition de l'heure du prochain passage au fait qu'il y ai au moins un passage de l'adhérent. Pour son premier passage c'est inscrit en dur dans la colonne K.

Et je viens de voir que j'avais laissé une typo en C7, 15:30 eu lieu de 15:00.

Ci-joint le fichier rectifié.

Tout fonctionne bien mais quand je recopie les données dans le fichier de base dans VBA j'ai l'erreur suivante.
1608739093727.png
 

Discussions similaires

Réponses
58
Affichages
10 K

Statistiques des forums

Discussions
312 229
Messages
2 086 422
Membres
103 206
dernier inscrit
diambote