Macro VBA "rechercher une cellule contenant ..."

ademay

XLDnaute Nouveau
Bonjour,

Je souhaite créer une macro en utilisant la fonction "Rechercher" (Ctrl + F), car les données recherchées entre deux plages ne sont pas tout à fait identiques (rechercheV impossible). En fait je cherche une cellule dans la Feuill2 contenant le texte d'une cellule de la Feuill1.

Je voudrais que la valeur recherchée corresponde au contenu d'une cellule et pas un texte en dur. Dans mon exemple ci-dessous, je voudrais que "jardin" soit remplacé par la référence de la cellule [ActiveCell.Offset(0, -1).Range("A1")].

Je voudrais également que le résultat renvoyé depuis la Feuill2 soit celui de la igne trouvée (résultat relatif et non un résultat absolu)

Voici le code généré:

ActiveCell.Offset(0, -1).Range("A1").Select
Selection.Copy
Sheets("Feuil2").Select
Cells.Find(What:="Jardin", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Sheets("Feuil1").Select
ActiveCell.Offset(0, 1).Range("A1").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=Feuil2!R[2]C[2]"
ActiveCell.Offset(1, 0).Range("A1").Select

J'espère que c'est suffisament clair ...

Merci pour votre aide !
 

Pièces jointes

  • Macro.xlsx
    8.5 KB · Affichages: 521
  • Macro.xlsx
    8.5 KB · Affichages: 574
  • Macro.xlsx
    8.5 KB · Affichages: 651

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro VBA "rechercher une cellule contenant ..."

Bonjour Ademay et bienvenue bonjour le forum,

Désolé mais, malgré tes explications et le fichier exemple, je n'ai pas compris ce que tu voulais exactement. Le mieux serait de mettre dans le fichier exemple ce qu'il y a avant et ce que tu voudrais après la macro. Il serait bon de savoir aussi comment elle se déclenche. Macro événementielle Change ou à l'aide d'un bouton ?
 

JNP

XLDnaute Barbatruc
Re : Macro VBA "rechercher une cellule contenant ..."

Bonjour Ademay et bienvenue :),
J'espère que c'est suffisament clair ...
Pas totalement :rolleyes:...
Et quand tu mets du code, pense à utiliser le # à cliquer dans le mode avancer pour entourer ton code (plus lisible et évite les smileys intempestifs...)
Bon, à tester :p
Code:
Sub Test()
Dim I As Integer, Cellule As Range
With Sheets("Feuil1")
For I = 2 To .Range("A" & Rows.Count).End(xlUp).Row
Set Cellule = Sheets("Feuil2").Cells.Find(What:=Range("A" & I), LookAt:=xlPart)
If Not Cellule Is Nothing Then .Range("C" & I) = Replace(Cellule.Address, "$", "")
Next I
End With
End Sub
N'oublie pas d'enregistrer en XLSM, sinon, la macro sera perdue :rolleyes:...
Bonne journée :cool:
Ajout : Salut Robert :)
 
Dernière édition:

ademay

XLDnaute Nouveau
Re : Macro VBA "rechercher une cellule contenant ..."

Merci pour vos réponses.

vous trouverez en PJ le fichier source avec un onglet "AVANT" et un onglet "APRES", ce qui éclaircira peut-être mes explications confuses.

En ce qui concerne la macro, elle sera exécutée manuellement, avec un bouton que je devrais pouvoir faire, ce n'est pas la priorité.

Je pousse peut-être un peu mais est-ce qu'il sera également possible de m'expliquer un peu le fonctionnement pour que je puisse transposer la macro dans le fichier source initial (que je vous éparge car il contient beaucoup de lignes et de colonnes ...)

Merci,
 

Pièces jointes

  • Macro.xlsx
    8.6 KB · Affichages: 551
  • Macro.xlsx
    8.6 KB · Affichages: 576
  • Macro.xlsx
    8.6 KB · Affichages: 638

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro VBA "rechercher une cellule contenant ..."

Bonjour le fil, bonjour le forum,

En pièce jointe ton fichier modifié avec le code ci-dessous :
Code:
Sub Macro1()
Dim cel As Range 'déclare la variable cel (CELlule)
Dim r As Range 'déclare la variable r (Recherche
 
With Sheets("AVANT") 'prend en compte l'onglet "AVANT" (à adapter à ton cas)
    'boucle sur toutes les cellules éditées cel de la colonne A (en partant de la ligne 2)
    For Each cel In .Range("A2:A" & .Cells(Application.Rows.Count, 1).End(xlUp).Row)
        'définit la recherche r (recherche la valeur de la cellule en partie dans la colonne A de l'onglet "BASE")
        Set r = Sheets("BASE").Columns(1).Find(cel.Value, , xlValues, xlPart)
        'si il existe au moins une occurrence trouvée, place dals la colonne I de cel la valeur de la colonne C de r
        If Not r Is Nothing Then cel.Offset(0, 8).Value = r.Offset(0, 3).Value
    Next cel 'prochaine cellule de la boucle
End With 'fin de la prise en compte de l'onglet "AVANT"
End Sub
Le problème va apparaître si tu retrouves par exemple Jardin plusieurs fois dans la base...
 

Pièces jointes

  • Ademay_v01.xls
    39.5 KB · Affichages: 1 229

JNP

XLDnaute Barbatruc
Re : Macro VBA "rechercher une cellule contenant ..."

Re :),
Bon, Robert est passé devant :p...
Je mets quand même mon code commenté
Code:
Sub Test()
Dim I As Integer, Cellule As Range
'déclare une variable pour les lignes et une variable cellule
With Sheets("AVANT")
' Avec la feuille AVANT, ça permet de s'y référer avec un simple .
For I = 2 To .Range("A" & Rows.Count).End(xlUp).Row
' De I = 2 à la dernière cellule de A utilisée
' Rows.Count permet de prendre le nombre de ligne du document (65 536 en 2003, 1 048 576 depuis 2007
' End(xlUp) trouve la première cellule non vide en remontant
' Row donne la ligne
Set Cellule = Sheets("BASE").Range("A:A").Find(What:=Range("A" & I), LookAt:=xlPart)
' Mets dans Cellule le résultat de la recherche
If Not Cellule Is Nothing Then .Range("I" & I) = Cellule.Offset(0, 3)
' Si Cellule n'est pas rien (donc qu'il a trouvé), on ramène le résultat
Set Cellule = Nothing
Next I
' I suivant
End With
' Fin de la référence à la feuille
End Sub
J'ai limité la recherche à la colonne A, sinon l'OffSet ne veux plus rien dire :rolleyes:...
Et même remarque que l'ami (ou ennemi, que sais-je :p) Robert concernant les autres occurences :eek:...
Il me semble que la boucle en For I est plus rapide que For Cel, mais ce n'est sensible que sur du très gros fichier :p...
Bonne soirée :cool:
 

Discussions similaires

  • Question
Microsoft 365 Code VBA
Réponses
2
Affichages
312

Statistiques des forums

Discussions
312 177
Messages
2 085 976
Membres
103 077
dernier inscrit
kamel26asus