J'ai essayé de mettre en place un code qui devait me permettre de copier coller des données d'une feuille de calcul vers un autre feuille du même classeur.
Dans mon cas, ce sont les données de la feuilles "Saisie" qui doivent être copiées dans la feuille "Recap", et ensuite effacer les données de la feuille "Saisie", sauf les colonnes A et B.
Mais j'ai une alerte d'erreur "Erreur d'exécution 1004" - Erreur définie par l'application ou par l'objet, et je n'arrive pas à trouver l'origine du problème.
Pouvez-vous m'éclairer s'il vous plait ?
Je vous en remercie par avance
(voir fichier joint)
If Heure1 <> "00:00:00" Then
.Range("D" & DerLigne2).Value = Heure1 'Colle l'heure d'arrivée du matin en colonne D
.Range("D" & DerLigne2).Value = Format(Now(), "hh:mm")
Else
.Range("D" & DerLigne2).Value = ""
End If
If Heure2 <> "00:00:00" Then
.Range("E" & DerLigne2).Value = Heure2 'Colle l'heure de départ du matin en colonne E
.Range("E" & DerLigne2).Value = Format(Now(), "hh:mm")
Else
.Range("E" & DerLigne2).Value = ""
End If
Donc vous écrivez "now" en colonne D puis E jusqu'au bout. Donc la même heure...
Bonjour Nono,
1- La dernière cellule de Saisie est en ligne 7, or vous faites "For Ctrl = 8 To L".
2- Il y a beaucoup de ligne de type .Range("A:A" & L_ES).Value au lieu de .Range("A" & L_ES).Value
3- "DerLig" n'est pas calculée.
Un essai en PJ mais sans garantie que tous les bugs soient corrigés. Mais ça ne plante plus.
Merci pour aide et votre code. Déjà ça ne bug plus.
Par contre ça ne copie que la dernière ligne du tableau non pas la totalité.
Je regarde de mon côté pour procéder d'une autre façon.
Encore merci
Re,
Normal, la boucle se termine trop tôt.
Positionnez "Next Ctrl" après "End With".
VB:
.Range("L" & L_ES).Value = ("I-H")
End With
Next Ctrl <------ A repositionner ici.
Sheets("Saisie").Select
DerLig = Sheets("Saisie").Range("A1048576").End(xlUp).Row
If DerLig <> 8 Then
Re,
Normal, la boucle se termine trop tôt.
Positionnez "Next Ctrl" après "End With".
VB:
.Range("L" & L_ES).Value = ("I-H")
End With
Next Ctrl <------ A repositionner ici.
Sheets("Saisie").Select
DerLig = Sheets("Saisie").Range("A1048576").End(xlUp).Row
If DerLig <> 8 Then
Bonjour à toutes et à tous,
sylvanu merci pour votre correction du code, pour le moment ça à l'air de fonctionner correctement.
J'aurai une autre petite question concernant le code ci-dessous. J'aimerai y ajouter ceci : lorsque je clique sur le bouton, que la date soit inscrite dans la cellule de la colonne A, par exemple je clique en D5 alors A5 = date du jour, toujours avec le même principe qu'elle ne bouge plus lors des prochaines saisies.
Je souhaite ajouter cela car si la sauvegarde n'est pas faite tous les jours, que l'on puisse garder une trace des jours de pointages précédents.
J'espère avoir été clair, sinon n'hésitez pas à me reprendre.
Merci pour votre aide
VB:
Private Sub CommandButton1_Click()
ActiveCell.Formula = "=Now()"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=False
Application.CutCopyMode = False
End Sub
Merci beaucoup pour votre aide. Je venais juste de trouver cette solution.
Apparemment cela fait la même chose, à moins que je me trompe.
Toujours est-il merci beaucoup.
VB:
Private Sub CommandButton1_Click()
ActiveCell.Formula = "=Now()"
Range("A" & ActiveCell.Row) = "=Now()"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=False
Application.CutCopyMode = False
End Sub
Par contre, je souhaiterai ajouter une autre condition. Si la cellule de la colonne B sur la même ligne est vide alors MsgBox "Vous devez saisir votre code". Je pense que l'on doit procéder de la même façon. Qu'en pensez-vous ?
Ca fonctionne, sauf si la cellule active n'est pas celle qui devrait l'être.
Par exemple, si on sélectionne la cellule C6 puis que l'on clique sur le bouton rouge, ça écrit la date et l'heure à la place du nom de l'agent.
Il faudrait ajouter une vérification de la cellule active, ou utiliser un autre système.
Merci pour vos suggestions, j'ai fait les modifications dans mon fichier.
Je vais protéger la colonne C pour interdire toutes modifications, à moins que vous ayez une meilleure idée.
J'ai interdit l'accès à la colonne en verrouillant la colonne. C'est ce qui m'a semblé être le plus simple.
Bonjour à toutes et à tous,
J'ai donc modifié les variables comme préconisé par TootFatBoy, cependant je rencontre un problème de taille que je ne comprends pas. En effet, lorsque je clique sur le bouton de sauvegarde des données, seule la première donnée (Heure arrivée du matin) est copiée. Auparavant ça fonctionnait, et puis là, ça ne fonctionne plus... Pouvez-vous éclairer ma lanterne s'il vous plait ?
Je vous en remercie par avance.
De plus, je souhaiterai ajouter un petit plus au code : Si l'on clique sur le bouton est que le tableau est vide, alors petit message : "Il n'y a rien à sauvegarder".
De plus, je souhaiterai ajouter un petit plus au code : Si l'on clique sur le bouton est que le tableau est vide, alors petit message : "Il n'y a rien à sauvegarder".
Private Sub But_Pointage_Click()
' Verification si le tableau est non vide'
If [A1000].End(xlUp).Row = 4 Then
MsgBox "Il n'y a rien à sauvegarder."
Exit Sub
End If
' Suite'
If Range("B" & ActiveCell.Row).Value = "" Then
Bonjour sylvanu,
Merci pour votre réponse, mais ce n'est pas sur ce bouton qu'il faudrait mettre cette condition mais sur le bouton de sauvegarde, pas celui du pointage.
Cependant, merci pour l'idée.
J'ai modifié le code avec votre suggestion et ça fonctionne pour cette partie. Reste à résoudre celle de la copie des données qui ne fonctionne pas.
If Heure1 <> "00:00:00" Then
.Range("D" & DerLigne2).Value = Heure1 'Colle l'heure d'arrivée du matin en colonne D
.Range("D" & DerLigne2).Value = Format(Now(), "hh:mm")
Else
.Range("D" & DerLigne2).Value = ""
End If
If Heure2 <> "00:00:00" Then
.Range("E" & DerLigne2).Value = Heure2 'Colle l'heure de départ du matin en colonne E
.Range("E" & DerLigne2).Value = Format(Now(), "hh:mm")
Else
.Range("E" & DerLigne2).Value = ""
End If
Donc vous écrivez "now" en colonne D puis E jusqu'au bout. Donc la même heure courante partout.
Remplacez par :
Code:
If Heure1 <> "00:00:00" Then
.Range("D" & DerLigne2).Value = Format(Heure1, "hh:mm") 'Colle l'heure d'arrivée du matin en colonne D
Else
.Range("D" & DerLigne2).Value = ""
End If
If Heure2 <> "00:00:00" Then
.Range("E" & DerLigne2).Value = Format(Heure2, "hh:mm") 'Colle l'heure de départ du matin en colonne E
Else
.Range("E" & DerLigne2).Value = ""
End If
If Heure3 <> "00:00:00" Then
.Range("F" & DerLigne2).Value = Format(Heure3, "hh:mm") 'Colle l'heure d'arrivée après-midi en colonne F
Else
.Range("F" & DerLigne2).Value = ""
End If
... ainsi de suite pour toutes les colonnes
J'ai donc modifié les variables comme préconisé par TootFatBoy, cependant je rencontre un problème de taille que je ne comprends pas. En effet, lorsque je clique sur le bouton de sauvegarde des données, seule la première donnée (Heure arrivée du matin) est copiée. Auparavant ça fonctionnait, et puis là, ça ne fonctionne plus...