XL 2021 trouver date anniversaire dans calendrier pour recopie

  • Initiateur de la discussion Initiateur de la discussion Bruce68
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Bruce68

XLDnaute Impliqué
Bonsoir à tous
Dans le fichier ci-joint la macro ne trouve pas date anniversaire de l'année en cours dans le calendrier et je ne pas recopier les infos de l'userform dans la feuil2.
Je vous remercie pour toute votre aide.
 

Pièces jointes

Bonjour Bruce,
Une TextBox renvoie ... un texte, pas un nombre.
Utilisez cette notation pour transformer un texte en date :
VB:
If Cells(u, 1) = CDate(Tex_Anni) Then
Cependant ensuite encore pas mal de souci, dont un mélange, je pense, entre les variables k et u.
Mais au moins ce point ne bloque plus.

De plus cette notation n'est pas correcte : W2.Range("A" & u, 2)
Que vouliez vous faire ? que veut dire le ",2" ?
 
Bonjour,

De plus cette notation n'est pas correcte : W2.Range("A" & u, 2)
Sans oublier W1.Range(Tex_Datenaiss) = W2.Range("A" & u, 2) et suivantes.

Que sont W1 et W2 ???
Et en supposant que W1 soit définie, où est censé pointer W1.Range(Tex_Datenaiss), sachant que Tex_Datenaiss est un texte censé représenter une date (genre "04/02/2026") ?
Même remarque pour les trois ligne de code suivantes.
En supposant que W1 et W2 soit définies et que les paramètres soient corrects, n'est-ce pas l'inverse qu'il faudrait faire ? Autrement dit, est-ce vraiment dans Feuil1 qu'il faut chercher la date, puis écrire dans Feuil2 ???

Bref, sans données, devant tant d'incohérences du code VBA, et sans explications, pas facile de savoir ce que le code est censé faire. 🙁
 
Dernière édition:
Re,
Cette ligne ne veut rien dire :
VB:
ws_1.Range CDate(Tex_Anni) = ws_1.Range("A" & i).Value
Que voulez vous faire ?
Ranger dans Tex_Anni la valeur trouver en colonne A ?

De plus "i" n'est pas initialisé. Ne serait pas plutot "k" à utiliser ?
Et Range(k, 3) ne veut rien dire. Si c'est la k_iéme ligne de la colonne 3 alors c'est Cells(k,3) et non range. Ou encore Range("C" & k )

Dites nous ce que vous voulez faire, ce sera plus compréhensible.
 
Bonsoir sylvanu
ce que je veux faire est marqué au bout de la macro,
1) trouver la ligne de la date anniversaire dans le calendrier de la feuil1 col A
2) quand celle ci est trouvée Recopier la date de Naissance dans la col B feuil1
3)recopier la date anniversaire dans la col C de la feuil1
4) Recopier le Nom dans col D feuil1
5) Recopier le Prénom dans col E feuil1.
Encore un grand merci pour l'aide
 

Pièces jointes

Maintenant on n'a plus qu'une seule feuille, mais ws_1.Range CDate(Tex_Anni) = ws_1.Range(k, 2).Value n'a toujours aucun sens. 🙁

Ceci dit, ton problème est trop compliqué pour moi, donc je ne saurais t'aider. Désolé.
 
Dernière édition:
Bonjour le forum,

On peut se passer d'UserForm :
VB:
Private Sub CommandButton1_Click()
Dim i As Variant
If Not IsDate([A2]) Then [A2].Select: MsgBox "Entrez une date valide !", , "Date anniversaire": Exit Sub
i = Application.Match(CLng(CDate([A2])), Range("A3:A" & Rows.Count), 0)
If IsError(i) Then [A2].Select: MsgBox "Date introuvable !", , "Date anniversaire": Exit Sub
If Not IsDate([B2]) Then [B2].Select: MsgBox "Entrez une date valide !", , "Date de naissance": Exit Sub
If DateAdd("yyyy", Year([A2]) - Year([B2]), [B2]) <> [A2] Then MsgBox "Les dates ne concordent pas !": Exit Sub
If Trim([C2]) = "" Then [C2].Select: MsgBox "Entrez le nom !", , "Nom": Exit Sub
If Trim([D2]) = "" Then [D2].Select: MsgBox "Entrez le prénom !", , "Prénom": Exit Sub
Cells(i + 2, 1).Resize(, 4) = [A2:D2].Value 'copie les valeurs
ActiveWindow.ScrollRow = i + 2 'cadrage
End Sub
A+
 

Pièces jointes

Si la ligne est déjà utilisée (même date anniversaire) ET si les noms OU les prénoms sont différents il suffit d'insérer une ligne :
VB:
Private Sub CommandButton1_Click()
Dim i As Variant
If Not IsDate([A2]) Then [A2].Select: MsgBox "Entrez une date valide !", , "Date anniversaire": Exit Sub
i = Application.Match(CLng(CDate([A2])), Range("A3:A" & Rows.Count), 0)
If IsError(i) Then [A2].Select: MsgBox "Date introuvable !", , "Date anniversaire": Exit Sub
If Not IsDate([B2]) Then [B2].Select: MsgBox "Entrez une date valide !", , "Date de naissance": Exit Sub
If DateAdd("yyyy", Year([A2]) - Year([B2]), [B2]) <> [A2] Then MsgBox "Les dates ne concordent pas !": Exit Sub
If Trim([C2]) = "" Then [C2].Select: MsgBox "Entrez le nom !", , "Nom": Exit Sub
If Trim([D2]) = "" Then [D2].Select: MsgBox "Entrez le prénom !", , "Prénom": Exit Sub
If Cells(i + 2, 1) = [A2] And Cells(i + 2, 2) <> "" _
    And (LCase(Cells(i + 2, 3)) <> LCase([C2]) Or LCase(Cells(i + 2, 4)) <> LCase([D2])) Then Rows(i + 2).Insert 'insère une ligne
Cells(i + 2, 1).Resize(, 4) = [A2:D2].Value 'copie les valeurs
ActiveWindow.ScrollRow = i + 2 'cadrage
End Sub
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
415
Réponses
14
Affichages
687
  • Question Question
Microsoft 365 Rechercher date
Réponses
5
Affichages
209
Réponses
18
Affichages
551
Réponses
7
Affichages
428
Retour