Recherchev cellule précédente

Bonjour à tous, après plusieurs heures de recherche, je bloque....

Merci donc à ceux qui pourrons trouvez la solution à mon problème :

Dans une colonne A1, je recherche une fonction qui me recherche les mêmes valeurs et me copie dans une autre colonne la cellule B1 précédent cette valeur. ex: chercher la valeur 2 en A1 et me recopier en B1 la cellule précedente soit les valeurs 5,20,8 dans cet exemple

5

2

9

6

7

20

2

9

8

2

9

Bonjour,

Un classeur serait plus utile que des chiffres et de longues explications

Bonjour le fil, bonjour le forum,

Par formule je ne sais pas faire mais si une solution VBA t'intéresse voici une proposition. Les valeur identiques sont en rouge gras, les valeurs cherchées sont en-dessous. Une ligne vide sépare chaque bloc de valeur identique...

Le code :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)

Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
O.Columns(2).Clear 'efface d'éventuelles anciennes valeurs en colonne 2 (=B) de l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    D(TV(I, 1)) = "" 'alimente le dictionnaire D
Next I 'prochaine ligne de la boucle
TMP = D.keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
For J = 0 To UBound(TMP) 'boucle 1 : sur tous les éléments du tableau temporaire TMP
    'condition : si le nombre de fois que l'élément TMP(J) apparaît dans la colonne 1 (=A) est supérieur à 1
    If Application.WorksheetFunction.CountIf(O.Columns(1), TMP(J)) > 1 Then
        K = 1 'initialise la variable K
        For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
            If TV(I, 1) = TMP(J) Then 'si la donnée ligne I, colonne 1 de TV est égale à l'élément TMP(J)
                ReDim Preserve TL(1 To K) 'redimensionne le tableau des lignes TL
                TL(K) = TV(I - 1, 1) 'récupère dans la ligne K de TL la données en ligne I-1 de TV
                K = K + 1 'incrémente K
            End If 'fin de la condition
        Next I 'prochaine ligne de la boucle 2
        'définit la cellule de destination DEST (B1 si B1 est vide, sinon, la seconde cellule vide de la colonne B de l'onglet O)
        Set DEST = IIf(O.Range("B1").Value = "", O.Range("B1"), O.Cells(Application.Rows.Count, "B").End(xlUp).Offset(2, 0))
        DEST.Value = TMP(J) 'renvoie dans DEST l'élément TMP(J)
        DEST.Font.Bold = True 'Police [Gras] dans DEST
        DEST.Font.ColorIndex = 3 'couleur rouge dans DEST
        'renvoie dans la cellule, en-dessous de DEST le tableau TL transposé
        DEST.Offset(1, 0).Resize(UBound(TL), 1).Value = Application.Transpose(TL)
        Erase TL 'efface le tableau TL
    End If 'fin de la condition
Next J 'prochain élément de la boucle 1
End Sub

Bonjour à tous

Un grand merci à Thau Thème d'avoir pris de son temps pour mon problème, c'est super sympa.

J'ai fait un premier essai et ça marche super ! Il va vraiment falloir que je m'y mette au VBA.

J'avais essayé avec La fonction "décaler" et "recherchev" Mais sans résultat.

Encore un grand merci

A bientôt

Rechercher des sujets similaires à "recherchev precedente"