[résolu] Modifier macro pour faire l inverse

klorane

XLDnaute Occasionnel
Bonjour,

j'ai une macro qui va rechercher une valeur dans une colonne. (voir fichier joint).

Dim quoi As Range: Set quoi = Range("B2")
Dim ou As Range: Set ou = Range("$E$1:$F$6")
If IsError([B7]) Or IsEmpty([B2]) Then
MsgBox "Cellule B2 vide ou valeur non trouvée !", vbCritical, "ERREUR"
[B7:C7] = Empty
Else
[B7] = Application.VLookup(quoi, ou, 1, 0): [C7] = Application.VLookup(quoi, ou, 2, 0)
End If

Quand on clique sur le bouton la valeur 804 est recherchée dans la colonne E et affiche la valeur correspondant trouvée en F.

Je voudrais modifier la macro pour quelle fasse l'inverse.

A la place de rechercher 804 on recherche par exemple : pierre.

Que faut il modifier pour que ça puisse se faire dans ce sens?
et eventuellement si il y a plusieurs Pierre, que la valeur trouvée en premier s'affiche et quelle soit ensuite ecrasée par la suivante.

ex : rechercher "Pierre" resultat : "Pierre" et "101" -> ecrasement -> affichage de "Pierre" et "804".

(Vous allez me dire quel est l'interet d effacer la valeur trouvée? : j'insererai entre les 2 recherches une macro)
Peut etre utiliser NEXT ainsi je pourrais insérer ma macro d'analyse juste avant.

Merci.

Klorane
 

Pièces jointes

  • rech.xlsm
    17.6 KB · Affichages: 36
  • rech.xlsm
    17.6 KB · Affichages: 38
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Modifier macro pour faire l inverse

Bonsoir klorane,

Un essai dans le fichier joint. Le code :
VB:
Sub Bouton1_Clic()
Dim quoi As Range, ou As Range, tablo, i&, nb&, res()
Static Indice&


  Set quoi = Range("B2")
  If IsEmpty(quoi) Then
  ' il n'y a rien à chercher
    [B7:C7] = Empty
    MsgBox "Cellule B2 vide", vbCritical
    Indice = 0
  Else
    'Construction du tableau des correspondances
    tablo = Range("$e$1:$f$6").Value
    For i = 1 To UBound(tablo)
      If StrComp(tablo(i, 2), quoi, vbTextCompare) = 0 Then
        [B7] = tablo(i, 2)
        nb = nb + 1
        ReDim Preserve res(1 To nb)
        res(nb) = tablo(i, 1)
      End If
    Next i
    If nb = 0 Then
      [B7:C7] = Empty
      Indice = 0
      MsgBox "Cellule B2 non trouvée", vbCritical
    Else
      'si l'ancien indice est possible et correspondait au critère de recherche actuel
      If Indice > 0 And Indice <= nb Then If res(Indice) = [c7] Then Indice = Indice Else Indice = 0
      Indice = Indice + 1
      If Indice > nb Then Indice = 1
      [c7] = res(Indice)
      If Indice = nb Then Beep
    End If
  End If
  quoi.Activate
End Sub

Edit: Version v2 (la v1 boguait en cas de présence de plusieurs couples identiques dans la liste de recherche). Un beep signale quand on a atteint le dernier des enregistrements correspondant au critère de recherche..
 

Pièces jointes

  • rech v2.xlsm
    23 KB · Affichages: 59
Dernière édition:

klorane

XLDnaute Occasionnel
Re : Modifier macro pour faire l inverse

Bonsoir Mapomme,

je travaille sur ta macro, je cherche à la faire evoluer (c'est le but), si je souhaite que la recherche s'effectue dans plusieures colonnes. Les valeurs colonne E ne changent pas mais g'ai des prénoms en plus dans les colonne G et H.

Pour lui dire : 1 cherche dans la colonne F, ensuite cherche dans la colonne G et enfin dans la colonne H.

La pour m'ensortir j'ai mis 3 macros bout à bout , 1 qui cherche en F, une autre en G etc... ça fait une tartine^^

Klorane
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Modifier macro pour faire l inverse

Bonsoir klorane,

(...) je souhaite que la recherche s'effectue dans plusieures colonnes. Les valeurs colonne E ne changent pas mais g'ai des prénoms en plus dans les colonne G et H.
Pour lui dire : 1 cherche dans la colonne F, ensuite cherche dans la colonne G et enfin dans la colonne H (...)

Voir le fichier joint. Les modifications sont peu nombreuses. Le principe est d'adapter la zone de recherche qu'on parcourt avec non plus une boucle mais à l'aide de deux boucles imbriquées: une boucle (indice j) sur les colonnes du tableau, l'autre sur les lignes du tableau (indice i).

Une constante maZone permet d'indiquer la zone à considérer; pour l'exemple, maZone ="e1:h8".

Une ligne de code dans le module de la feuille "Feuil1" pour effacer les cellules B7:C7 quand on change de nom en B2.
 

Pièces jointes

  • rech zone v1.xlsm
    24.9 KB · Affichages: 44

klorane

XLDnaute Occasionnel
Re : Modifier macro pour faire l inverse

Merci!!!!!Merci!!!

Quand je vois que j'avais mis bout à bout 3 macros pour faire travail...Là je reconnais que ça condense ^^


Je vais peut etre arrêter de t'embeter avec les "recherches"

Pour ce soir ça va etre bon...On jouera demain avec ça.

Encore merci et bonne nuit.

Klorane
 

Discussions similaires

Réponses
7
Affichages
361
Réponses
1
Affichages
197

Statistiques des forums

Discussions
312 514
Messages
2 089 223
Membres
104 069
dernier inscrit
kit.survie