Macro copier une cellule en fonction d'une valeur
Bonjour,
Débutant dans l'utilisation des macros, je fais humblement appelle à l'aide de ce forum afin de résoudre un problème qui me handicape fortement.
Pour comprendre : dans mon club de sport, je gère un fichier qui donne un historique des pratiquants et de leurs passages de grade.
J'ai 2 feuilles :
- une feuille "Historique-adhérents" : je rentre les informations concernant chaque adhérent (date de naissance, club).
- une autre feuille "Passage-grades" : je liste les pratiquants ayant passés leurs grades.
Mon but est que dans la feuille "Passage-grades" : lorsque la valeur du champ "nom et prénom" correspond à la même valeur dans la feuille "Historique-adhérents" alors :
=> une macro vient rechercher et copier la valeur "date de naissance" de la feuille "Historique-adhérents" pour la coller dans la feuille "Passage-grades" dans le champs "date de naissance".
=> d'autre part je voudrais faire la même chose concernant la valeur "Club" : par contre cela se complique : en effet, un élève peut être passé par plusieurs club (d'où les 3 champs dans la feuille "Historique-adhérents" : "Club d'origine" + "Club transfert1" + "Club transfert2" => il faudrait copier la valeur "Club d'origine" ou "Club transfert1" ou "Club transfert2" en fonction de la date de passage de grade => il faudrait détecter si le pratiquant est passé par 1 ou 2 ou 3 clubs et en fonction de la date de passage de grade il faut copier la bonne valeur "Club".
Pour mieux comprendre je joins le fichier de travail. Pour info j'utilise Excel 2000.
Je vous remercie d'avance pour votre aide.
Cordialement
Salut,
Pour la colonne C, je te propose une formule en C2 incrémentée vers le bas
=SI(A2="";"";RECHERCHEV(A2;'Historique-adhérents'!$A$2:$B$14;2;FAUX))Pour la colonne B, j’ai placé la macro suivante dans le code de la feuille « Passage-grades ». Le club vient s’inscrire lorsque tu indiques la date de passage (mais il faut qu’il y ait déjà un nom d’inscrit dans la colonne A).
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer, j As Integer
If Target.Count > 1 Then Exit Sub
If Not Application.Intersect(Target, Range("E2:E" & Rows.Count)) Is Nothing Then
With Sheets("Historique-adhérents")
j = Application.WorksheetFunction.Match(Cells(Target.Row, 1), .Range("A:A"), 0)
For i = 12 To 8 Step -2
If .Cells(j, i) <> "" And .Cells(j, i) <= Target Then
Cells(Target.Row, 2) = .Cells(j, i - 1)
Exit Sub
End If
Next i
End With
End If
End SubNB : Dans le fichier ci-joint, tu dois réinscrire la date afin que le club s'affiche (ou si tu changes de date, le club va peut-être être modifié). Je n'ai prévu aucun garde-fou pour l'instant, par exemple si la date inscrite pour le grade est en dehors d'une date d'affiliation à un club. A voir si nécessaire.
Cordialement.
ça marche ! Super ! C'est exactement ce que je voulais ! Merci beaucoup !
meldryn a écrit :Bonjour Yvouille,
Je t'envoie ce message car je viens de me rendre compte en utilisant le fichier que tu avais posté que j'aimerais avoir des améliorations sur les solutions que tu m'as proposé :
- concernant la formule =SI(A2="";"";RECHERCHEV(A2;'Historique-adhérents'!$A$2:$B$14;2;FAUX))=> pour certaines personnes je n'ai pas la date de naissance => du coup j'ai la valeur "1900-01-00" qui s'écrit dans la cellule => est il possible d'avoir un champ vide : pas de valeur ?
- concernant la macro pour écrire le nom du club => je m'apperçois qu'il faut que pour chaque ligne de passage il faut que je rentre la date de passage de grade pour que le nom de club s'actualise => pour t'expliquer : sur une journée de passage de grade j'ai plusierus dizaines de participants => du coup, pour gagner du temps, je rentre une fois la date de passage et avec mon curseur je "tire" la valeur jusqu'au dernier participant => le problème c'est qu'en faisant ça la macro ne marche pas et du coup le nom du club n'apparait pas => est il possible d'activer manullement la macro pour que la mise à jour des clubs par adhérent puisse se faire (ou si tu as une autre solution pas de problème) ?
- j'ai une dernière demande : je voudrais réaliser la même opération que=SI(A2="";"";RECHERCHEV(A2;'Historique-adhérents'!$A$2:$B$14;2;FAUX))=>
mais pour coller une valeur d'une autre colonne de la feuille 'HIstorique-adhérent' => la 3ème colonne "Date d'entrée HG" => j'ai changé la formule en =SI(A2="";"";RECHERCHEV(A2;'Historique-adhérents'!$A$2:$B$14;3;FAUX))=> mais cela ne marche pas : j'ai tout le temps la valeur #REF! qui apparaît... => peux tu m'aider stp
Je te remercie grandement de ton aide !
Salut,
Merci de rester sur le Forum
J’ai placé deux formules pour les dates dans le fichier ci-joint et j’ai modifié la macro selon ta demande ; tu la déclenches maintenant sur demande, par le bouton mis en place.
Amicalement.
Merci de ta réactivité ! tu es un pro ! super boulot ! merci pour tout !