Excel : classement selon la date

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

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. 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.
    1. Modérateur
      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
      1. 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
        1. 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!!!
          1. Modérateur
            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
        2. Pour la partie remplacer j'ai ajouter le code.. pas besoin de perdre du temps la dessus

          Merci