Vba insertion ligne et garder formules

herve62

XLDnaute Barbatruc
Supporter XLD
Bonjour
Je fais appel à vous car j'ai l'impréssion de "tourner bourrique" ?
C'est principalement au niveau de l'insertion de la ligne du Jour ( en 6) j'ai du :
fonctionne OU met le jour mais garde un pointage OU encore laisse l'ancien jour et les horaires ( l'USF indique la bonne date ?) ; En Pas à Pas mes variables sont OK c'est juste lorsque j'exécute normal
l'insertion ligne vient de l'enregistrement macro avec copie/collé de formules en +
Le principe : si Date du jour > on regarde quel est le dernier pointage on demande le N+1 puis calcul via excel
sinon INSERTION > mise de la date en A6 , effacer heures et select du 1er pointage
Je suis sûr de passer à côté de qq chose gros comme une maison , mais quoi ??
Merci

Pour l'instant je n'ai traité que les 3 1ere personnes ( pwd=1234)
 

Pièces jointes

  • pointage_HD1011.xlsm
    53.9 KB · Affichages: 43

jecherche

XLDnaute Occasionnel
Bonjour,

J'ai lu plusieurs fois pour tenter de comprendre. Puis, j'ai saisi des données, ce qui m'a soulevé deux interrogations.
- A6 ... j'aurai tendance à insérer la date et non la formule pour aujourd'hui.
- Dans les quatre textbox des heures, on ne peut pas saisir des heures à la main, elles sont ignorées ... Est-ce spécifiquement voulu ?

@+



Jecherche
 

jecherche

XLDnaute Occasionnel
Bonjour,

Je me reprends, en A6, tu fais inscrire la formule aujourd’hui .
Code:
Range("A6").Select
    ActiveCell.FormulaR1C1 = "=TODAY()"
Demain, A6 contiendra encore la du jour, mais la ligne 6 aura les heures d'hier.
La personne n'aura pas une nouvelle ligne pour y saisir ses nouvelles heures.

Ou j'ai zappé un bout :confused:



Jecherche
 

herve62

XLDnaute Barbatruc
Supporter XLD
Demain, A6 contiendra encore la du jour, mais la ligne 6 aura les heures d'hier.
Il commence à se faire tard pour moi ! pourras tu m'expliquer pour demain ta phrase ? et SURtout ta proposition de Modif , pour mon fichier ( qui est joint , réclamé par les BARBATRUCS et Indispensable pour que l'on ai une réponse concrète d'après leurs dire !! ) qui ne m'est pas retournée changée ??
 
Dernière édition:

jecherche

XLDnaute Occasionnel
Bonjour,

Dans la macro "Sub ListBox1_Clic" vers le milieu ... au lieu de :
Code:
Range("A6").Select
  ActiveCell.FormulaR1C1 = "=TODAY()"
Changer pour :
Code:
Range("A6").Value = Format(Date, "dd/mm/yyyy")

Car, si on met la formule "=TODAY()", dans la cellule A6, à chaque jour, cette cellule contiendra la date de jour .
Nous somme le 9 novembre, je saisis des heures d'entrée et de sortie qui s'inscrivent sur la ligne 6.
Demain, nous serons le 10 novembre et A6 contiendra la date du 10 novembre. Mais le reste de la linge 6 aura encore mes heures ... celles d'hier.
L'ajout d'une ligne ( If .Cells(6, 1) <> Date Then ) ne se fera pas ... à chaque jour A6 sera toujours = à Date.



Jecherche
 

jecherche

XLDnaute Occasionnel
Bonjour,

On peut forcer le format ainsi :
Code:
    Range("A6").Value = Format(Date, "yyyy/mm/dd")  'incription de la date
    Range("A6").NumberFormat = "dd/mm/yyyy"  ''format Jour, mois, année (au choix)
'''    Range("A6").NumberFormat = "yyyy/mm/dd"  '' format année, mois, jour  (au choix)



Jecherche
 

herve62

XLDnaute Barbatruc
Supporter XLD
Donc met ton code dans mon fichier , teste et retourne le moi ce sera plus simple
Généralement si il n'y a qu'une petite modif de ce genre c'est la méthode de ce forum !
(là cela ne fonctionne pas et de + , bizarre en pas à pas > insertion , et en normal selon l'employé > rien ???)
merci
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Moi je conseille de mettre simplement Range("A6").Value = Date, parce que c'est ce qui est retenu en définitive comme vraie valeur de la cellule si tout se passe bien: un Variant/Date
Mais il y a eu des version Excel qui même dans ce cas, ou tout au moins des cas voisins de celui là, inversaient quand même le jour et le mois, à la façon américaine.
Si c'est le cas de la votre essayez carrément Range("A6").Value = Format(Date, "dd mmm yyyy"), comme ça, s'il est obligé de convertir lui même ce texte en date, là au moins il est mis dans l'impossibilité de se tromper puisque le mois est littéral.
 
Dernière édition:

jecherche

XLDnaute Occasionnel
Bonjour,

Je m'excuse de mon préjugé.
Dû à ton nombre de posts et au code relativement élaboré, j'ai trop présumé et je n'ai pas regardé le code en profondeur ... désolé.
Je suis moi même en apprentissage et je n'ai pas encore l'oeil avisé.
Ceci dit ... quand on utilise un "With Sheets(Mat_emp)", sur les lignes qui suivent, il faut mettre un point devant les objets si on veut que ces objets soient ceux de la feuille concernée par le "With...." ... ex.: If .Cells(6, 1) . Sinon, les objets seront ceux de la feuille à l'écran.
Tel que tu l'as conçu, on ne peut saisir qu'une seule heure à la fois (entrée/sortie.....). Si on complète plus d'un champ (car on peut saisir manuellement même si le double clique insère l'heure en cours de l'ordinateur), seul le dernier est inscrit dans la feuille de la personne. Par contre, je saisis un champ, je clique sur Valider, je peux effectuer une 2e saisi manuelle sur un autre champ, clique sur Valider, etc. Je ne sais pas si c'est voulu ou pas. Sinon, il faudrait empêcher la saisie manuelle.
Si une personne saisit une heure et clique sur valider, sans fermer le Userform, une 2e personne peut sélectionner son nom et son matricule et la saisie de l'heure sera bien comptabilisée à son nom.
Si on utilise des "select", il faut impérativement afficher la feuille concernée à l'écran. Mais on peut éviter, j'ai modifié le code en conséquence pour éviter les select.



Jecherche
 

Pièces jointes

  • Herve62___pointage_HD1011.xlsm
    48.4 KB · Affichages: 49

herve62

XLDnaute Barbatruc
Supporter XLD
Bonjour
Voilà jour férié mais étrange on est le 11/11/2016 donc pour tester la véracité :confused:??
Bon de toute façon j'avais trouvé juste après la réponse de Dranreb ; Merci à vous 2 ,
Dranreb > c'est comme ça qu'était code mon au début et donc tu as conforté l'idée que c'était ailleurs
je ne suis pas "Barba..." mais j'ai de la route quand même et donc j'étais sûr de passer à coté d'un truc simple
le With j'en mets à toutes les sauces je me sens plus à l'aise que Range pour triturer et d'instinct je mets .cells
là j'ai omis .Range car j''ai recopié des bouts de macro enregistrées ( module 2)
JeCherche >
Dû à ton nombre de posts
bin oui mais tu aurais pris mon 1er fichier et faire ce que tu viens de faire l'affaire serait bouclée depuis longtemps et Toi comme Moi aurions passé moins de temps
Je pourrais poursuivre la sem proch.
Bon long WE

PS : j'ai re modifié une ligne , là je suis sûr > .Range("A6").Value = TextBox21.Value car la box est déjà formatée
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Alors pour la bonne forme moi je mets :
VB:
.Range("A6").Value = CDate(TextBox21.Value)
Car elle a beau être formatée, la TextBox, c'est un String, pas une Date.
Et si la version d'Excel devait avoir le toc nerveux américain sur les dates :
VB:
.Range("A6").Value = Format(CDate(TextBox21.Value), "dd mmm yyyy")
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa