Microsoft 365 Code erreur dans code Vba

NONO14

XLDnaute Occasionnel
Bonjour à toutes et à tous,

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)
 

Pièces jointes

  • Tablo_Heures.xlsm
    65.8 KB · Affichages: 4
Solution
Re,
Auparavant ça fonctionnait, et puis là, ça ne fonctionne plus...
Car vous avez surement modifié votre code . :)
Vous faites :
VB:
    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...

sylvanu

XLDnaute Barbatruc
Supporter XLD
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. :)
 

Pièces jointes

  • Tablo_Heures.xlsm
    59 KB · Affichages: 2

sylvanu

XLDnaute Barbatruc
Supporter XLD
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
 

Pièces jointes

  • Tablo_Heures (3).xlsm
    59.1 KB · Affichages: 2

NONO14

XLDnaute Occasionnel
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
 

NONO14

XLDnaute Occasionnel
Bonjour Nono,
Voir PJ avec :
VB:
Sub Clic()
Cells(ActiveCell.Row, "A") = Now
' Date donne    30/08/2024
' Now donne     30/08/2024  11:29:32
End Sub
Mettre Now ou Date suivant ce que vous voulez.
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 ?
 

NONO14

XLDnaute Occasionnel
Voici le code avec ma dernière condition et ça fonctionne

Code:
Private Sub CommandButton1_Click()
If Range("B" & ActiveCell.Row).Value = "" Then
    MsgBox " Vous devez saisir votre code agent !"
Else
ActiveCell.Formula = "=Now()"
Range("A" & ActiveCell.Row) = "=Now()"

Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=False
Application.CutCopyMode = False
End If
End Sub

Mille mercis pour votre aide à tous.
Le sujet est donc clos, jusqu'au prochain.
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Juste pour information.
VB:
Dim Jour2, Heure1, Heure2, Heure3, Heure4, Heure5, Heure6 As Date
Cette ligne déclare la variable Heure6 de type Date, et les autres variables de type Variant.

Pour que toutes ces variables soient de type Date, il faut le spécifier pour chacune d'elles :
VB:
Dim Jour2 As Date, Heure1 As Date, Heure2 As Date, Heure3 As Date, Heure4 As Date, Heure5 As Date, Heure6 As Date



Voici le code avec ma dernière condition et ça fonctionne
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.
 

NONO14

XLDnaute Occasionnel
Bonjour TootFatBoy,

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.
 
Dernière édition:

NONO14

XLDnaute Occasionnel
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".

ps : mot de passe = falaise
 

Pièces jointes

  • Tablo_Heures.xlsm
    81.8 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
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".
Peut être avec cet ajout :
VB:
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
 

NONO14

XLDnaute Occasionnel
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.
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Auparavant ça fonctionnait, et puis là, ça ne fonctionne plus...
Car vous avez surement modifié votre code . :)
Vous faites :
VB:
    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
 

TooFatBoy

XLDnaute Barbatruc
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...
Désolé. 😞 Dans ce cas, remets tes variables en type Variant.
 

Statistiques des forums

Discussions
313 866
Messages
2 103 082
Membres
108 521
dernier inscrit
manouba