Prob USF qui modifie des données

Petronie

XLDnaute Occasionnel
Salut le Forum.
Je ne comprends pas mon erreur. J'ai un code: (voir ci-dessous)

Private Sub CmdValider_Click()

Dim i As Integer
For i = 1 To 3
If NAF = '' Or NomAf = '' Or PrenAF = '' _
Or DateDeb = '' Or DateFin = '' Then

MsgBox 'Il manque des données!'
Exit Sub
End If
Next i

ActiveCell.Offset(0, 0) = Val(NAF)
ActiveCell.Offset(0, 1) = (NomAf)
ActiveCell.Offset(0, 2) = (PrenAF)
ActiveCell.Offset(0, 3) = CDate(DateDeb)
ActiveCell.Offset(0, 4) = CDate(DateFin)

If ActiveCell.Offset(0, 3).Value > ActiveCell.Offset(0, 4).Value Then
MsgBox 'Attention la date de fin doit se située après la date de début!', _
vbExclamation
DateFin.SetFocus
Else
Unload Formulaire
End If
End Sub

J'explique mon cas:
J'ai une USF qui permet d'ajouter des travailleurs avec des données ou de modifier les données existantes.
Mon USF reprend le N° de travailleur, le nom, le prénom, la date de début et la date de fin.
Quand on introduit une date de fin plus petite que la date de début, je fais apparaitre un MsgBox qui dit que la date de début doit être plus petite que la date de fin. Mon problème est que quand je commence à entrer des données et que je change d'avis, et que je clic sur 'annuler', il modifie quand même des données. Alors que moi, je veux qu'il ne modifie rien du tout puisque j'ai changé d'avis.
Est-ce que c'est claire?
Je pense que l'erreur doit venir du code ci-dessus mais je ne sais pas d'où.
Au secour!

Pétronie.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir Petronie, le Forum

Euf sauf erreur ou mauvaise interprétation de ma part, tu ne nous montres que le code concernant le click sur le bouton Validation : CmdValider

Alors soit il te faut un bouton Annulation... soit ta question est hors de ma compréhension ?

NAF c'est quoi ? (tes Contrôles ActivesX ont des noms à coucher dehors)

Sinon ton code d'export de données vers la feuille, ne devrait entrer en jeu qu'en fin de procédure... Une fois que toutes les conditions sont remplies...

Bon courage et bonne soirée
[ol]@+Thierry[/ol]
 

Petronie

XLDnaute Occasionnel
Ha oui, oups, pardon.
Alors, pour situer le contexte (et les noms à coucher dehors). Je tente de faire un truc pour le boulot. Chez nous, les travailleurs sont des 'Aides familiales' que l'on nomme 'AF' et donc, NAF, signifie N comme N° de travailleur et AF comme Aide familiale.
Ben oui, je sais mais bon... on fait se qu'on peut! :whistle:
Pour ce qui est du code du bouton annuler, il est le suivant:

Private Sub CmdQuitter_Click()
Unload Formulaire
End Sub

Ce code se situe AVANT le code dont j'ai parlé précédemment. Et tout ceci se trouve dans le code de mon USF qui s'appelle 'FORMULAIRE'

Je pense que ce doit être l'ordre des codes qui pose problème mais je nage et je ne comprends pas grand chose au VBA. J'essais des tas de choses et j'apprends en essayant mais c'est pas simple.
Voilà, Merci à toi _Thierry.

Pétronie.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re bonsoir Petronie, le Forum

Etant momentanément handicapé d'une main, je n'ai pas reconstruit un UserForm avec tes contrôles.

Cependant, voici grosso modo ce que donnerait un ordre logique de tests avant d'envoyer les données sur la feuilles :

NB = Non testé et sujet à des bugs éventuels

Private Sub CmdValider_Click()
Dim i As Integer
   
'    For i = 1 To 3 'Je ne comprends pas la nécessité de cette boucle ???
       
If NAF = '' Or NomAf = '' Or PrenAF = '' _
           
Or dateDeb = '' Or dateFin = '' Then
            MsgBox 'Il manque des données!'
           
Exit Sub
       
End If
'    Next i
   
       
If Not IsDate(dateDeb) Or Not IsDate(dateFin) Then
            MsgBox 'Attention date saisie incorrecte'
           
Exit Sub
       
End If

   
If CDate(dateDeb) > CDate(dateFin) Then
        MsgBox 'Attention la date de fin doit se située après la date de début!', _
        vbExclamation
        dateFin.SetFocus
       
Exit Sub
   
End If
   
    ActiveCell.Offset(0, 0) = Val(NAF)
    ActiveCell.Offset(0, 1) = (NomAf)
    ActiveCell.Offset(0, 2) = (PrenAF)
    ActiveCell.Offset(0, 3) = CDate(dateDeb)
    ActiveCell.Offset(0, 4) = CDate(dateFin)
    Unload Formulaire

End Sub

Bonne Soirée
[ol]@+Thierry[/ol]
 

Petronie

XLDnaute Occasionnel
Oufti,
merci Thierry, ça marche du tonner!
La vache, je me sens vraiment ridicule à côté de toutes vos têtes pensantes!!
Merci, merci, merci!

Quand tu dis que tu ne comprends pas l'intérêt de la boucle, je te réponds que moi non plus. Enfin, c'est pas que je ne vois pas l'intérêt, c'est surtout que je ne comprends pas grand chose.

J'aurais voulu, juste pour comprendre un minimum, savoir à quoi est censé correspondre le chiffre '3' de 'For i = 1 To 3'.
Ben oui, je patauge complètement. En faite, les macros que j'ai, ce sont des vieilles macros que j'ai récupéré d'autre trucs que j'avais essayé de faire avant et que j'avais déjà récupéré sur ce forum et adapté. Donc, il y a certainement plein de lignes inutiles et incorrectes mais tant que ça fonctionne, c'est le principal. (En tous cas, pour le moment.) Après, dans pas trop longtemps, j'espère, :huh: quand j'aurai compris le principe et le fonctionnement de VBA, je rirai de mes boulettes et je pourrai rectifier.
Positivons!!! On y croit!!

Aller, je vais me coucher. Bonne soirée à tous et encore merci.

Pétronie.
 

Discussions similaires

Réponses
21
Affichages
1 K

Statistiques des forums

Discussions
312 305
Messages
2 087 088
Membres
103 461
dernier inscrit
dams94