OVH Cloud OVH Cloud

VBA: Date et condition

1 réponse
Avatar
Patrick Dupin
Bonjour,

Dans le but d'organiser une épreuve sportive chronométrée par équipe de 2,
j'ai créé un mini programme EXCEL pour engager les concurrents et faire les
classements.

Mais je rencontre quelques difficultés et serais heureux de trouver une aide
sur ce forum.

Voilà le problème :

J'ai construit un UserForm2 avec un CommandButon1 sur lequel j'ai placé la
procédure ci-dessous et qui en validant les renseignements les enserre dans
la feuille « equipe ! ».

Cet UserForm2 possède un TexBox7 et un TextBox11 dans lequel je dois saisir
les dates de naissance des concurrents (une sécurité date de naissance
JJ/MM/AA serait en plus excellente) qui alors inséreraient dans la feuille
« equipe ! » dans les colonnes respectivement 5 et 9 l'âge des concurrents
au jour de l'épreuve (date inscrite dans un Texbox1 de l'UserForm1).

Et pour compliquer l'ensemble, je souhaiterais que dans la colonne 11, la
catégorie s'inscrive selon les critères suivants

- 2 hommes, si l'âge est > à 40 ans : Vétéran

- 2 hommes, si l'âge est <+ à 40 ans : Homme

- 2 femmes : Femme

- 1 homme et 1 femme : Mixte.

Les sexes sont aussi dans l'UserForm2 sur des OptionButton1 (Homme) et
OptionButton2 (Femme) pour le 1er concurrent et OptionButton3 (Homme) et
OptionButton4 (Femme) pour le 2ème concurrent.

Comme vous le voyez dans la procédure qui suit, je saisissais l'âge des
concurrents avec un test.

J'aimerais donc changer tout ceci et je remercie très sincèrement tous ceux
qui m'apporteront une aide.

Merci à tous

Patrick



-------------------------------------------------------

Private Sub CommandButton1_Click()

'test type valeur age (si nombre ou pas)

On Error GoTo finproc

A1 = UserForm2.TextBox7.Value

a2 = UserForm2.TextBox11.Value

A1 = A1 + 1

a2 = a2 + 1

'fin test



Sheets("equipes").Activate



doss = Cells(1, 21).Value

Cells(1, 21).Value = doss + 1

Cells(doss + 1, 1).Value = doss

Cells(doss + 1, 2).Value = UserForm2.TextBox2.Value

Cells(doss + 1, 17).Value = UserForm2.TextBox3.Value

Cells(doss + 1, 16).Value = UserForm2.TextBox4.Value

Cells(doss + 1, 3).Value = UserForm2.TextBox5.Value

Cells(doss + 1, 4).Value = UserForm2.TextBox6.Value

Cells(doss + 1, 5).Value = UserForm2.TextBox7.Value 'âge du raider 1

Cells(doss + 1, 13).Value = UserForm2.TB_club_CM1.Value

Cells(doss + 1, 7).Value = UserForm2.TextBox9.Value

Cells(doss + 1, 8).Value = UserForm2.TextBox10.Value 'âge du raider 2

Cells(doss + 1, 9).Value = UserForm2.TextBox11.Value

Cells(doss + 1, 15).Value = UserForm2.TB_club_CM2.Value

Cells(doss + 1, 18).Value = UserForm2.TextBox13.Value

Cells(doss + 1, 19).Value = UserForm2.TextBox14.Value

Cells(doss + 1, 25).Value = UserForm2.NBrepas.Value



'If Cells(doss + 1, 5).Value < Cells(doss + 1, 9).Value Then

'agemini = Cells(doss + 1, 5).Value

'Else

'agemini = Cells(doss + 1, 9).Value

'End If

'Cells(doss + 1, 10).Value = "0"

'If agemini >= 40 Then

'Cells(doss + 1, 10).Value = "veteran1"

'End If

'If agemini >= 50 Then

'Cells(doss + 1, 10).Value = "veteran2"

'End If



'Détermine le sexe de l'équipier 1 dans la colonne 6

If OptionButton1.Value = True Then

Cells(doss + 1, 6).Value = "H"

s1 = 1

Else

Cells(doss + 1, 6).Value = "F"

s1 = 2

End If



'Détermine le sexe de l'équipier 1 dans la colonne 6

If OptionButton3.Value = True Then

Cells(doss + 1, 10).Value = "H"

s2 = 1

Else

Cells(doss + 1, 10).Value = "F"

s2 = 2

End If



If s1 = 1 Then

If s2 = 1 Then

Cells(doss + 1, 11).Value = "Homme"

Else

Cells(doss + 1, 11).Value = "Mixte"

End If

Else

If s2 = 2 Then

Cells(doss + 1, 11).Value = "Femme"

Else

Cells(doss + 1, 11).Value = "Mixte"

End If

End If



'Détermine Licencié ou non licencié pour équipier 1 dans la colonne 12

If OB_L1.Value = True Then

Cells(doss + 1, 12).Value = "L"

s1 = 1

Else

Cells(doss + 1, 12).Value = "NL"

s1 = 2

End If



'Détermine Licencié ou Non licencié pour équipier 2 dans la colonne 14

If OB_L2.Value = True Then

Cells(doss + 1, 14).Value = "L"

s2 = 1

Else

Cells(doss + 1, 14).Value = "NL"

s2 = 2

End If



Unload UserForm2

finproc:

On Error Resume Next

End Sub

---------------------------------------------------------

1 réponse

Avatar
abcd
Je n'ai pas vraimetn le courage d'étudier toutes ces lignes, mais je
peux dire:


qu'il est facile de convertir une chaîne en date
avec CDate( chaine )

si tu utilises le format DATE pour dimensionner certaines variables
(un nombre à virgule flottante comptant un nombre de jours depuis une
date de référence vers les années 1900)

donc 1/24 représente une heure de plus
1 représente 1 jour de plus

le plus simple et rapide est donc de faire la différence entre Date()
(la date d'aujourd'hui) et sa date de naissance obtenue dans le
formulaire. Alors, diviser par 365,25

ce qui donnerait un truc du genre
(Date() - CDate( LaDateDeNaissance )) / 365.25

Ceci dit, as-tu besoin de la date de naissance, entrer leur âge dans
ta base ne suffit-il pas ?
à toi de voir...