Recherche date la + récente

Faithful

XLDnaute Nouveau
Bonjour à toutes et tous ; suis totalement novice en VBA et après avoir pratiquement 2 jours durant exploré vos archives, je me résous à solliciter votre aide . Sur un millier de lignes : colonne A des dates au format jj/mm/aaaa ; colonnes B, C, D, E et F, des nombres (1 à 60). Comment obtenir, pour chacun des nombres, la date la plus récente, puis celle qui vient immédiatement avant ?
A B C D E F
13/10/1979 12 01 59 40 37
15/01/1981 27 33 42 36 40
26/09/2005 40 03 04 29 14
date la date
pour + récente précédente

1 ? ?
2 ? ?
etc ...
Je vous remercie et vous souhaite un excellent dimanche.
 

Monique

Nous a quitté
Repose en paix
Bonjour,

Par formule
Les dates de A2 à A10
Les nombres en B2:F20
Le nombre recherché en H2
En I2 :
=SI(NB.SI($B$2:$F$10;$H2)<1;'';GRANDE.VALEUR(SI($B$2:$F$10=$H2;$A$2:$A$10);1))
En J2 :
=SI(NB.SI($B$2:$F$10;$H2)<2;'';GRANDE.VALEUR(SI($B$2:$F$10=$H2;$A$2:$A$10);2))
Formules matricielles, à valider par ctrl, maj et entrée

Si tu veux que le 1 devienne 2 en passant de I2 à J2 sans modifier la formule :
en I2 :
=SI(NB.SI($B$2:$F$10;$H2)<COLONNES($I2:I2);'';GRANDE.VALEUR(SI($B$2:$F$10=$H2;$A$2:$A$10);COLONNES($I2:I2)))
 

myDearFriend!

XLDnaute Barbatruc
Bonjour Faithful, Monique,

Par VBA cette fois, une solution possible :
Les données doivent être en Feuil1 (colonnes A à F) et le classeur possède une Feuil2 vierge...
Sub Traitement()
Dim TabTemp As Variant
Dim
Result(1 To 60, 1 To 3) As Variant
Dim
C As Byte, L As Long
      'Charge les données dans un tableau variant temporaire
      With Sheets('Feuil1')
            L = .Range('A65536').End(xlUp).Row
            TabTemp = .Range(.Cells(1, 1), .Cells(L, 6)).Value
      End With
      With Sheets('Feuil2')
            'Trie les données par date (tri décroissant)
            .Cells.Delete
            .Range(.Cells(1, 1), .Cells(L, 6)).Value = TabTemp
            .Range(.Cells(1, 1), .Cells(L, 6)).Sort Key1:=.Cells(1, 1), Order1:=xlDescending, _
                  Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
            TabTemp = .Range(.Cells(1, 1), .Cells(L, 6)).Value
            .Cells.Delete
            'Détermine les résultats
            For L = 1 To UBound(TabTemp, 1)
                  For C = 2 To 6
                        If Result(TabTemp(L, C), 2) = '' Then
                              Result(TabTemp(L, C), 2) = TabTemp(L, 1)
                        ElseIf Result(TabTemp(L, C), 3) = '' Then
                              Result(TabTemp(L, C), 3) = TabTemp(L, 1)
                        End If
                  Next C
            Next L
            'Affiche les résultats
            For L = 1 To 60
                  Result(L, 1) = L
            Next L
            .Range('A1:C60').Value = Result
      End With
End Sub
Cordialement,

Message édité par: myDearFriend!, à: 01/10/2005 15:00
 

Faithful

XLDnaute Nouveau
Bonjour Monique, mDF (Didier ,)
Avant de partir exécuter une petite corvée pré-dominicale, me suis branché sur le forum sans trop y croire tout en espérant ... et là miracle, 2 réponses (formule et VBA) par deux ténors (enfin deux personnes dont j'ai très souvent vu les pseudos en parcourant les archives et qui semblent faire autorité (dans le bon sens du terme) sur ce site ; je n'aurai pas la possibilité de tester vos solutions avant demain après-midi mais je ne manquerai pas de vous tenir informé du (des) résultat (s).
Je vous prie de croire tous deux en ma gratitude.
 

Faithful

XLDnaute Nouveau
Bonjour Monique, mDF (Didier ,)
Avant de partir exécuter une petite corvée pré-dominicale, me suis branché sur le forum sans trop y croire tout en espérant ... et là miracle, 2 réponses (formule et VBA) par deux ténors (enfin deux personnes dont j'ai très souvent vu les pseudos en parcourant les archives et qui semblent faire autorité (dans le bon sens du terme) sur ce site ; je n'aurai pas la possibilité de tester vos solutions avant demain après-midi mais je ne manquerai pas de vous tenir informé du (des) résultat (s).
Je vous prie de croire tous deux en ma gratitude.

Il ne m'a pas été possible de résister à l'essai ...
Cela fonctionne avec les formules ; un grand merci Monique
Cordialement ...
 

Faithful

XLDnaute Nouveau
Bonsoir Didier,
Avant de partir exécuter une petite corvée pré-dominicale, me suis branché sur le forum sans trop y croire tout en espérant ... et là miracle, 2 réponses (formule et VBA) par deux ténors (enfin deux personnes dont j'ai très souvent vu les pseudos en parcourant les archives et qui semblent faire autorité (dans le bon sens du terme) sur ce site ; je n'aurai pas la possibilité de tester vos solutions avant demain après-midi mais je ne manquerai pas de vous tenir informé du (des) résultat (s).
Je vous prie de croire tous deux en ma gratitude.
Après essai : OK avec les formules - Avec la macro, lèger pb de syntaxe mais je suis incapable d'apporter la moindre correction
Les 4 lignes incriminées sont les suivantes :
.Range(.Cells1,1),.Cells(L,6)).Value = TabTemp
.Range(.Cells1,1),.Cells(L,6)).Sort Key1 = .Cells(1,1),Order1:=xlDescending,_Header:=xlGuess,OrderCustom:=1,MatchCase:=False,Orientation:xlTopToBottom
TabTemp = .Range(.Cells(1, 1), .Cells(L, 6)).Value
If result(TabTemp(L,C),2) ='' Then Result(TabTemp(L,C),2=TabTemp(L,1)
Elself Result(TabTemp(L,C),3) = '' Then Result(TabTemp(L,C),3=TabTemp(L,1)
Encore une fois, merci Didier
 

myDearFriend!

XLDnaute Barbatruc
Re,

Heu... Faithful visiblement tu connais le copier-coller ;)   mais saches que ça fonctionne aussi avec les morceaux de code VBA pour les copier de la page Web à l'éditeur VBE et inversement... Si je dis ça, c'est que je dénombre pas moins de 10 différences entre les lignes que tu indiques là et les miennes plus haut : des parenthèses manquantes, des retours à la ligne manquants, d'autres là où il n'y en avait pas, et un ElseLf à la place d'un ElseIf... tout ça évidemment, ça ne peut que donner des erreurs de syntaxe.

Cordialement,

PS : Monique, tu m'épateras toujours... :)
 
F

Faithful

Guest
Re...
Désolé, j'ignorais possible le 'copier-coller' du web --> excel. Je te prie de m'excuser.
Copier-coller donc, et petit pb. quand même : Erreur d'exécution '13', incompatibilité de type (???) appui du debog et surlignage en jaune de 'If Result etc ...'
Bon, j'ai la désagréable impression de jouer les emm...
Je te souhaite une excellente soirée, loin de ce genre de chose.
 

myDearFriend!

XLDnaute Barbatruc
Re,

Pas de problème Faithful,

Cela dit, je suis désolé mais sans un fichier joint avec au minimum la feuille contenant tes données (ou une partie), je ne peux pas faire grand chose... la seule chose que je peux imaginer pour le moment compte tenu du type d'erreur que tu indiques, c'est que tu aies une ou plusieurs lignes de titres en entête de tes données (ce que tu ne précises d'ailleurs pas dans ton premier post)...

Par ailleurs, la solution de Monique semblait te convenir alors peut-être serait-il plus sage d'abandonner cette usine à gaz VBA au profit d'une solution déjà fonctionnelle et pour le moins efficace !

Cordialement,
 

Faithful

XLDnaute Nouveau
Bonjour Didier, ta macro fonctionne parfaitement (j'avais effectivement la colonne A nommée 'date' et cela suffisait à créer le pb. Bien sûr, la solution avec formules de Monique (à qui je me permets de lancer un petit coucou) fonctionne parfaitement mais à titre personnel, je n'avancerai pas tellement si je ne cherche pas à étudier le VB (autrefois -cela se passait en des temps forts anciens- j'utilisais énormément excel (version 4.0 !!!) mais la programmation des macros se faisait en langue française et la syntaxe était différente : tout à refaire donc ...)
Un grand merci donc.
Si j'osais abuser : dans ta macro, quelles sont les valeurs à changer (coordonnées de cellules, je suppose) pour passer de 5 colonnes de nombres comme actuellement à 7 colonnes ?
Je te souhaite un excellent dimanche.
 

Faithful

XLDnaute Nouveau
Re...
Inutile de perdre ton temps ; j'y suis parvenu par décomposition successive - ce n'est pas très intelligent comme méthode mais je parviens de cette façon à appréhender le mode opératoire. Vais essayer maintenant de trouver la façon de faire varier les deux dates.
Encore une fois bon dimanche.
Gabriel
 

Discussions similaires

Réponses
5
Affichages
407
Réponses
7
Affichages
723

Statistiques des forums

Discussions
312 305
Messages
2 087 078
Membres
103 455
dernier inscrit
saramachado