VBA chercher date avec cbox dans plusieurs feuilles

Résolu/Fermé
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 - 10 mars 2013 à 21:25
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 17 mars 2013 à 09:20
Bonjour,

ça fait déjà plusieurs heures que je regarde mon projet et étant débutante, je ne sais vraiment pas vers quel code me tourner! Vous verrai que j'ai commencé des choses mais à chaque fois je n'étais pas certaine de partir dasn la bonne direction.. Vos conseils seraient grandement appréciés..
- Voilà je vais essayer d'être clair :
Chaque employé à une feuille à son nom
Chaque semaine les heures travaillées sont calculées, de même que les bonis dans un autre classeur, mon document (copie de salaires 2013) récupère ces infos.
Parfois mes employés veulent mettre des heures en banque ou se font avancer des heures.. ce fichier me sert à tenir un registre de tout ça..

J'ai créer un usf (entrée) ce que je souhaite réaliser est ceci :
à l'ouverture du usf, quand je vais choisir la date de fin de période dans ma combobox, je voudrais que les heures travaillées ainsi que le boni de cette semaine là s'affiche dans mes textbox correspondantes. (elles sont déjà inscrites dans les colonnes H et L)

pour ce faire, je ne sais pas si je dois y aller feuille par feuille..créer un tableau? dans le cas d'un tableau, dois-je en créer plusieurs pour chaque feuille vu que mes données dans les feuilles sont par mois et donc pas en continu.. sinon au départ je pensais qu'une formule type cherche aurait fonctionné mais ça ne marchait pas.. peut-être à cause que ce sont des dates que je cherche?

Ensuite, une fois que ce sera fait, je veux pouvoir cocher les checkbox en haut des colonnes si je n'ai pas de changement à faire ou peu..(mon code est déjè fait pour ça)..si j'ai trop de changement je les complèterai manuellement... il y a une case en format heure et l'autre en nombre avec 2 décimales..

les Textbox IP et IF, je devrai obligatoirement les entrer à la main chaque fois, de même que les autres..Alors il n'y a pas de code à faire pour ceux là

Ensuite en cliquant sur ok, je veux aller porter les données de certaines textbox dans les feuilles correspondant à chaque employé sur la ligne correpondante à la date de fin de période..
Exemple : les textbox hrspayées dans la colonne I, les boni payés dasn la colonne M
hrsfête dans la colonne G, $fête dasn la colonneK, IF dasn la colonne S et IP dans la colonne T

J'essaie de voue en dire plus que pas assez pour pas faire travailler personne pour rien, dès fois que ça changerait la méthode du premier code..

Je joint mon fichier afin que ce soit plus clair.. j'espère l'avoir été..

merci beaucoup à l'avance, votre aide est TRÈS appréciée
Mélanie

https://www.cjoint.com/c/CCkvgVMaizJ



7 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 701
13 mars 2013 à 22:35
Bonjour,

Conformément à ce que tu voulais, je t'ai fait une plage de paramètres, avec les noms des feuilles qui sont affichés par fonction. Il suffit d'y associer le nom d'employé correspondant et son statut.

Le formulaire n'affiche que les employés actifs et leurs heures quand la date est choisie. Cela permet de rajouter ou supprimer des employés sans toucher au formulaire et même de changer les noms des feuilles. ;-)

https://www.cjoint.com/c/CCnwBLYKXW5

J'espère que mon code assez basique ne va pas t'effrayer.
Le format de tes heures n'étant pas homogène le formatage d'affichage est un peu complexe...

Bon test.
1
eriiic Messages postés 24597 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 22 septembre 2024 7 235
Modifié par eriiic le 10/03/2013 à 23:05
Bonsoir,

Pas sûr que tu aies fait un bon choix en mettant tous les noms dans le userbox.
Si demain tu as 3 personnes de plus tu redessines tout et tu rallonges le code partout où ça sera nécessaire ?
Moi je me créerai une liste dans une feuille Paramètres avec les noms à afficher et les noms des feuilles correspondantes.
Elle servirait à initialiser une listbox ou une combobox pour choisir dans le formulaire.

Sinon :
Dim date1 As Date, c As Range 
date1 = DateValue("19/01/2013") 
Set c = Columns(2).Find(date1, LookIn:=xlValues)

Ensuite si tu veux la colonne M utilises :
Dim shEmp as worksheet
set shEmp = worksheets("PATC")
shEmp .cells(c.row,"M") = xxx ' ou var1= shEmp .cells(c.row,"M")

eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 701
10 mars 2013 à 23:46
Bonjour,

Comme Éric (un petit coucou), je pense que ton formulaire va te faire galérer.

Tout d'abord tes noms d'objets du formulaire ne sont pas rigoureux (espaces, majuscules,etc) et différents parfois des feuilles.

D'autre part, ton classeur est en 1904 pour les heures négatives mais la recherche avec le formulaire se décale de 4 ans sur les dates.

Tes heures sont tantôt au format heure tantôt au format décimal.

Je t'ai fait un petit bout de code en corrigeant un peu pour te faire voir ce que l'on peut faire mais cela ne va pas être simple avec ce classeur :

https://www.cjoint.com/?3CkxMag0Opg
0
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
12 mars 2013 à 01:33
Bonjour à vous deux

merci beaucoup de vos réponses.. Désolé de ne pas avoir répondu avant, j'ai eu une grosse journée.. J'avoue que vous avez tous les 2 raisons et je veux suivre vos conseils.. Seulement juste pour me partir j'aurais besoin de quelques infos :

ok pour faire une feuille paramètre.. dans cette feuille je pensais y mettre 3 colonnes
A = le nom d'employé
B = nom de la feuille correspondant au nom de l'employé de la colonne A
C = statut de l'employé : actif ou inactif

C'est dans mon usf que je suis pas certaine.. Si je fais un listbox, je peux pas rajouter mes textbox à emplir manuellement? Dans le genre que j'avais prévu au départ?
si je mets des Cbox..est il possible de les faire s'emplir toute seule en demandant de ne prendre que la liste des employé actifs de la feuille paramètre ?
Ensuite je pourrais mettre que si la cbox >"" les textbox apparaissent..

Aussi je sais pas si c'est moi mais j'ai regardé ton fichier gbinforme et j'ai pas vu les changements..

merci encore, votre aide est très appréciée
Mélanie
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 701
Modifié par gbinforme le 12/03/2013 à 08:35
Bonjour lanetmel,

j'ai pas vu les changements..

Quand tu choisis ta date les 2 premières colonnes du formulaire sont documentées...
pas très bien certes car les formats de données sont assez disparates.

Au lieu de passer ton temps à créer tes textbox et labels de manière figée, tu peux très bien avoir l'apparition des seuls objets utiles en fonction de tes paramètres.
Si tu veux, je peux te faire un départ pour te permettre de voir ce que cela donne.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
13 mars 2013 à 00:02
Bonjour Gbinforme

Excuse moi, j'ai dû regarder avec mes oreilles! J'ai vraiment regardé pour travailler sur l'option que vous m'avez proposé pour une version long terme mais ça semble trop compliqué pour moi.. je vois pas comment y arriver alors je vais continuer avec mon idée du départ.. Quand je serai meilleure, je le retravaillerai (si jamais ça arrive..je trouve que je ne progresse pas vite..)

Déjà j'ai regardé attentivement ton code et je n'en comprend que très peu.. J'ai vu que ça fonctionnais :) ... Je suis aller dans mes feuilles et j'ai mis toutes mes cellules en format heure : [h]:mm:ss

par contre quand j'ouvre le usf, les données heures et date s'affiche dans un autre format... J'ai essayé de mettre ce code :

Private Sub UserForm_Initialize()
Dim c() As Variant, i As Byte
c = Array("Tbox_hrsRMiguel", "Tbox_hrsRPatC", "Tbox_hrsRDany", "Tbox_hrsRMad")
For i = LBound(c) To UBound(c)
With Me.Controls(c(i)).Value = Format(Me.Controls(c(i)), "hh:mm:ss")

End With
Next i
End Sub

Bien sûr il vient pas de moi.. je l'ai trouvé sur internet.. c'étais pour mettre une couleur de fond dans certaines textbox d'un usf mais pas toutes.. Alors je l'ai modifié un peu.. (j'ai pas mis le nom de toutes les textbox que je veux mettre tout de suite.. je le complètrerai quand ça fonctionnera)

As-tu une idée par hasard comment faire pour changer le format?

encore un énorme merci
Mélanie
0
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
14 mars 2013 à 21:04
Bonjour Gbinforme,

Ayoye! C'est vraiment bien fait! Avec cette méthode je vais pouvoir tout changer en 3 petites secondes s'il y lieu..
MERCI BEAUCOUP!!!!!

J'ai rapidement regarder ton code.. je vais l'imprimer pour essayer de le comprendre et te reviendrai avec des questions si je comprends pas..

Ensuite il me restera à ajouter un code pour le bouton ok.. Je veux que ça aille porter dans les feuilles correspondantes, aux lignes correspondantes les données entrées manuellement dans les textbox.. Je vais essayer de le faire moi-même et reviendrai sur le forum si cela ne fonctionne pas.. Je pense pas Être capable d'y arriver mais je veux au moins essayer :)

encore merci beaucoup pour te temps que tu m'as consacré c'est très apprécié
Mélanie
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 701
14 mars 2013 à 22:14
Bonjour Mélanie,

Merci du retour et de ta gentille appréciation qui me fait bien plaisir.

Je pense pas Être capable d'y arriver mais je veux au moins essayer

Il ne faut pas être trop pessimiste, tu vas y arriver !
Lors de l'affichage, il faudrait conserver le numéro de ligne et ensuite l'enregistrement des données entrées manuellement est très facile à mettre en place, par exemple :

en réservation globale
Dim ligs()          ' lignes choisies
et
après                If .Cells(Lig, 2).Value = choix Then
                    ReDim Preserve ligs(idx)
                    ligs(idx) = Lig

Ensuite la validation connait la feuille dans le label .tag et la ligne dans ligs(idx)

Bon courage et surtout n'hésites pas à revenir nous dire ton succès !
0
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
16 mars 2013 à 23:00
Bonjour Gbinforme

J'ai regardé ton code durant plusieurs heures et je n'y comprend pas grand chose.. Quand j'essaie de continuer et que je regarde le code que tu m'as gentiment donné pour me partir..Je suis dans le désert.. peu importe ou je met
If .Cells(Lig, 2).Value = choix Then
ReDim Preserve ligs(idx)
ligs(idx) = Lig
ça me donne une erreur à cause du cells.. et comme je ne comprends pas grand chose a presque l'ensemble du code.. je suis perdue..

encore un coup de main? svp
Mélanie
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 701
16 mars 2013 à 23:57
Bonjour Mélanie,

Si j'ai bien compris, tu veux enregistrer les 6 textbox suivant les 2 affichées dans la même ligne que tu as récupéré les deux premières mais sur d'autres colonnes.

Si c'est bien cela, je t'ai codé le bouton OK mais j'ai choisi les colonnes inutilisées à droite et j'ai fait l'essai sur Miguel.

Il te suffit de remplacer la colonne BQ et suivantes par celles que tu as choisi car je n'ai pas du tout analysé tes tableaux qui ne me concernent pas pour leur contenu.

https://www.cjoint.com/c/CCqx2nFY5x1

Je t'ai mis des commentaires plus précis dans le code afin que tu comprennes le fonctionnement. N'hésites pas à préciser ce qui n'est pas clair.
0
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
17 mars 2013 à 00:42
bonjour Gbinforme,

c'est merveilleux! ça fait exactement tout ce dont j'ai besoin.. Grâce à ton aide je vais sauver un temps précieux à chaque semaine tout en minimisant le risque d'erreur..
merci aussi pour les précisions dans ton code.. c'est plus clair comme ça, je dis pas que je comprends tout mais ça va beaucoup m'aider .. je ferai des recherche sur certaines fonctions que tu as utilisés que je ne connaissais pas.. Si j'ai besoin de précision, je te reviendrai mais je pense que les notes ont déjà répondu à quelques unes de mes interrogations

encore merci pour ton aide :)
Mélanie
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 701
17 mars 2013 à 09:20
Bonjour Mélanie,

Merci du retour sympathique qui commence bien ma journée.

je ferai des recherche sur certaines fonctions
La recherche la plus simple et la plus efficace est de sélectionner la fonction et de faire F1 : l'aide excel te donne le principe et son paramétrage, avec éventuellement des exemples.

Je n'ai utilisé que des fonctions assez basiques sauf peut-être la gestion des contrôles textbox qui en standardisant leur nomination permet de les gérer facilement avec très peu de code et moins il y a de code, moins il y a de risque d'erreur !
Il faudrait sans doute rajouter un contrôle des saisies textbox pour ne pas recopier dans la feuille si absence de saisie.

Bonne utilisation et au plaisir de te revoir.
0