Re : Trouver des noms par rapport a une date, date qui se trouve dans une multitude d
Bonjour,
la solution de Lolote me paraissant bonne, je n'étais pas intervenu sur tes demandes complémentaires partant du principe qu'il appartenait plutôt à Lolote de te fournir les explications.
Ce qu'il a fait :
1) Nommer les plages sur ta feuille 1
Une plage MOD1 couvrant les cellules E6:F67 correspondant aux deux colonnes sur lesquelles figurent les formations du MOD1
Une plage MOD2 couvrant les cellules G6:J67 correspondant aux 4 colonnes sur lesquelles figurent les formations du MOD2
Une plage MOD3 couvrant les cellules K6
67 correspondant aux 6 colonnes sur lesquelles figurent les formations du MOD3
Ces plages étant figées : cela peut poser problème (si par exemple tu avais 3 colonnes pour MOD1)
2) un programme qui exploite la date de formation cherchée (Feuille 2: B17) sur chacune des plages ci-dessus.
Le Programme : je vais mettre les commentaires en gras dan le programme (imprime le : plus facile à suivre)
Sub RechercheDate()
Application.ScreenUpdating = False '
bloque l'écran pour éviter des A/R entre Feuille 1 et Feuille 2
xDat = [B17]
' Met la date présente dans la feuille 2 dans une variable xDat
For F = 0 To 11 '
Cette boucle remet au préalable à blanc les zones dans lesquelles on inscrit les noms
Range("B" & 30 + F) = Empty '
trouvés
Range("J" & 30 + F) = Empty '
30+F =30 au 1er tour, 31 au 2ème tour donc B30,B31,... sont remis à blanc
Range("R" & 30 + F) = Empty '
Idem en colonne J et R
Next F
For F = 1 To 3 '
Cette boucle va analyser les 3 zones nommées ci-dessus
xMod = "MOD" & F '
1er passage avec F=1, zone analysée MOD1 placée dans variable xMod
Select Case F
Case Is = 1 '
Case is 1 : si F=1 , la colonne alimentée sera la colonne B (Variable xCol="B")
xCol = "B"
Case Is = 2 '
Même explication mais la colonne alimentée sera J (variable xCol="J"
xCol = "J"
Case Is = 3 '
Même explication mais la colonne alimentée sera R (variable xCol="R"
xCol = "R"
End Select
xCpt = 0 '
Pour les explications ci-dessous :si F=1, xMod=MOD1 ,colonne="B"
For Each xCell In Sheets("Feuil1").Range(xMod) '
Analyse de chaque cellule de la zone nommée MOD1
If xCell = xDat Then '
Si la date de la cellule est égale à xDat(B17)
Range(xCol & 30 + xCpt) = Sheets("Feuil1").Range("A" & xCell.Row) '
copie dans B30 et suivante de la valeur contenue en colonne A de la même ligne que celle de la cellule analysée
xCpt = xCpt + 1
'incrémentation du compteur pour écrire sur la ligne suivante le nom suivant
If xCpt = 12 Then Exit For ' Nombre d'enregistrement limité à 11
End If '
les 3 lignes ci-dessus ne sont exécutées que si date cellule=xDat
Next '
F prend la valeur 2 puis 3 et on recommence avec Zone 2(MOD2) et zone 3 (MOD3)
Next F
Application.ScreenUpdating = True
End Sub
Bon courage
a+