Excel : classement selon la date

bobo8388 -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Je souhaiterais soit par VBA ou par fonctions classer des évenements selon leur date.

Sur une feuille j'ai une liste d'évenements :

en colonne A le nom de l'évenement
en colonne B la date à laquelle il a lieu.

sur une autre feuille j'ai :
en A1 Lundi 11 Avril
En B1 Mardi 12 Avril
et ainsi de suite.

Je souhaiterais qu'en fonction de leurs date les évennements viennent automatiquement se placer sous la date correspondante.

PS:Excel 2003.

Merci
A voir également:

5 réponses

lalalie3
 
Bonjour,
Il faut dans un premier temps que la colonne de date soit en A et pas en B.
ce sont des dates fixes ou pas ?
Si non une rechercheV va te convenir.
=RECHERCHEV("valeur recherchée";"zone ou plage de celulle où se trouve la valeur";"n° de la colonne où se trouve la reference recherchée;"")

Pour toi ca devrait donner ca a peu près :
=RECHERCHEV(A1;Feuil2!A:B;2;0)

cette fonction n'est capable de trouver que ce qu'il y a droite d'une reference.
0
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
Bonjour,
J'espère que les dates en Feuil1 et Feuil2 sont au même format... Le cas échéant, cette macro devrait fonctionner : [Adapter le numéro ou le nom des feuilles]
Sub CollerSousDate()    
Dim tabloDat() As Date 'EDIT : semble mieux fonctionner comme ça!    
Dim Col As Integer, Lign As Long    

With Sheets(2)   'Ici liste toutes les dates en ligne 1 de la feuille2 (à adapter) 
ReDim tabloDat(.UsedRange.Columns.Count - 1)    
    For Col = 1 To .UsedRange.Columns.Count    
        tabloDat(Col - 1) = .Cells(1, Col)    
    Next    
End With    
With Sheets(1)   'va chercher les événements adapter nom de la feuille 
    For Lign = 1 To .UsedRange.Rows.Count    
        For Col = 0 To UBound(tabloDat)    
            If tabloDat(Col) = .Cells(Lign, 2) Then    
                Sheets(2).Cells(65536, Col + 1).End(xlUp).Offset(1, 0) = .Cells(Lign, 1).Value    
            End If    
        Next    
    Next    
End With    
End Sub

Code à insérer dans un module standard.
Franck P
0
bobo8388
 
Merci lalalie3 mais une recherchev ne peut fonctionner car plusieurs evennements pour une meme date.

Merci Pijaku j'essaye ton code tout de suite et je te reviens.

Merci
0
bobo8388
 
Merci cela fonctionne parfaitement.

Si cela est possible comment modifier le code pour que il copie aussi les colonnes C et E sachant que j'ai espacé les dates en feuille deux pour pouvoir celler ces valeurs.

Est il aussi possible qu'un nouveau click sur le bouton remplace les valeurs si le tableau a été actualisé au lieu de les coller a la suite?

Merci beaucoup pour ton aide et j'espere ne pas t'en demander trop!!!
0
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
Essaye ceci :
Sub CollerSousDate()
Dim tabloDat() As Date 'EDIT : semble mieux fonctionner comme ça!
Dim Col As Integer, Lign As Long, Derlign As Long

With Sheets(2)   'Ici liste toutes les dates en ligne 1 de la feuille2 (à adapter)
ReDim tabloDat(.UsedRange.Columns.Count - 1)
    For Col = 1 To .UsedRange.Columns.Count
        If .Cells(1, Col) = "" Then
        Else
            tabloDat(Col - 1) = CDate(Right(.Cells(1, Col), Len(.Cells(1, Col)) - InStr(1, .Cells(1, Col), " ")))
        End If
    Next
End With
With Sheets(1)   'va chercher les événements adapter nom de la feuille
    For Lign = 1 To .UsedRange.Rows.Count
        For Col = 0 To UBound(tabloDat)
            If tabloDat(Col) = .Cells(Lign, 2) Then
                Derlign = Sheets(2).Cells(65536, Col + 1).End(xlUp).Offset(1, 0).Row
                Sheets(2).Cells(Derlign, Col + 1) = .Cells(Lign, 1).Value
                Sheets(2).Cells(Derlign, Col + 2) = .Cells(Lign, 3).Value
                Sheets(2).Cells(Derlign, Col + 3) = .Cells(Lign, 5).Value
                Exit For
            End If
        Next Col
    Next Lign
End With
End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bobo8388
 
Pour la partie remplacer j'ai ajouter le code.. pas besoin de perdre du temps la dessus

Merci
0