Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

formule pour recherche...très vaste...

0 views
Skip to first unread message

Domi

unread,
Feb 10, 2003, 2:02:00 PM2/10/03
to
Bonsoir à tous,

Une requête assez délicate (enfin je crois).
J'ai sur la feuille "Base" dans la colonne A des refs. Je voudrais mettre
dans la colonne B une formule qui :
1°) recherchera la ref de la colonne A sur la feuille "Planning", 1er pb :
la ref sur Planning peut être dans presque n'importe quelle colonne...
2°) Si la ref est trouvée sur planning, renvoie de la valeur qui se trouve
sur la même ligne, 4 colonnes à gauche, si non message "pas trouvé".

C'est grave Docteur ? ;o)
Merci
Domi


fpracht

unread,
Feb 10, 2003, 3:55:38 PM2/10/03
to
salut ou plutôt bonsoir
je pense que dans ton cas il serai pas mal( car ton classeur a l'air bien
personnel)
que tu T'enregistres, car tu l'explique trés bien ,tu sais ce que tu veux il
ne te manque les mots clé
pour exécuter ton code. Je te rassure mais moi c'est pareil
Alors je fais un cp d'enregistreur Outils/Macro/Nouvellemacro
puis ensuite je trifouille
bred c'est la débrouille sur que le code n'est pas obtimiser mais ce ne sont
que des petite procédure
bon je m'eternise pas .

voici pour toi

Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 10/02/03 par Frédéric Pracht
Dim Reference As String

Reference = ActiveCell
'Range("A2").Select
Selection.Copy
Sheets("Planning").Select
Cells.FindNext(After:=ActiveCell).Activate
Cells.Find(What:=Reference, After:=ActiveCell, LookIn:=xlFormulas,
LookAt _
:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
True).Activate
Cells.FindNext(After:=ActiveCell).Activate
ActiveCell.Offset(0, -4).Activate 'ajouter pour decaler de 4 colonne
vers la gauche
Application.CutCopyMode = False ' si tu veux decaler des ligne ce
serai
Selection.Copy 'a la place du zéro
Sheets("Base").Select
'Range("B2").Select 'Cette ligne est a supprimer ancienne trace de
l'enregistreur qui a éte
'remplacer par c'elle de dessous
ActiveCell.Offset(0, 1).Activate 'ajouter pour venir en colonne B
ActiveSheet.Paste
End Sub


michdenis

unread,
Feb 10, 2003, 4:00:31 PM2/10/03
to
Bonjour Domi,

Essaie ceci : à copier dans un module standard:
La présence de doublons ....la première occcurence sort !

'--------------------------------
Function ChercheRef(Rg As Range)

If Rg.Cells.Count > 1 Then Exit Function
Dim NbColumns As Integer, A As Integer, Plage As Range

Set Plage = Worksheets("Planning").UsedRange
NbColumns = Plage.Columns.Count
For A = 1 To NbColumns
If Not IsError(Application.Match(Rg.Value, Plage(A), 0)) Then
ChercheRef = Plage(A, A + 4).Value
Exit For
End If
Next
If ChercheRef = "" Then ChercheRef = "Pas Trouvé"
Set Plage = Nothing

End Function
'--------------------------------


Dans ta feuille base
Et dans ta cellule tu écris : = ChercheRef(A1_


Salutations!


"Domi" <scr...@free.fr> a écrit dans le message de news: eu3v9aT0CHA.1780@TK2MSFTNGP11...

ChrisV

unread,
Feb 10, 2003, 4:05:31 PM2/10/03
to
Bonjour Domi,

A lancer à partir de la feuille "Base"

Sub reC()
Application.ScreenUpdating = False
On Error Resume Next
derL = [A65536].End(xlUp).Row
For i = 1 To derL
With Sheets("Planning").UsedRange
Set c = .Find(Cells(i, 1), , xlValues)
adR = c.Address
If Not c Is Nothing Then _
Cells(i, 2).Value = c.Offset(, -4).Value
End With
Next i
Range("B1:B" & derL).SpecialCells(xlCellTypeBlanks) _
.Value = "pas trouvé"
End Sub


ChrisV


"Domi" <scr...@free.fr> a écrit dans le message de news:
eu3v9aT0CHA.1780@TK2MSFTNGP11...

Domi

unread,
Feb 10, 2003, 4:55:38 PM2/10/03
to
Ca marche impeccable.
Merci beaucoup
Domi

"ChrisV" <chr...@wanadoo.fr> a écrit dans le message de news:
eYUKMgU0CHA.2696@TK2MSFTNGP11...

Domi

unread,
Feb 10, 2003, 5:02:12 PM2/10/03
to
Merci beaucoup,
LA fonction semble bien fonctionner, je n'ai aucun message d'erreur, mais
j'ai toujours un "pas trouvé" retourné mêm quand la ref est bien présente
dans planning... Là où la macro de Chris me retourne la bonne valeur, la
fonction me renvoie un "pas trouvé" il doit y avoir un petit hic...?

Bonne soirée
Domi

"michdenis" <mich...@hotmail.com> a écrit dans le message de news:
#kOpLdU0CHA.2904@TK2MSFTNGP09...

michdenis

unread,
Feb 10, 2003, 6:07:34 PM2/10/03
to
Bonsoir Domi,

Je crois que ceci est un peu mieux !!!!!!!

Dans ta cellule, tu appelles la fonction comme suit :

=ChercheRef(A1)

'---------------------------------------
Function ChercheRef(Rg As Range)
Application.Volatile

Dim A As Integer, NbColumns As Integer
Dim Plage As Range, trouve As Range

If Rg.Cells.Count > 1 Then Exit Function

If IsEmpty(Rg.Value) Then ChercheRef = ""

Set Plage = Worksheets("Planning").UsedRange
NbColumns = Plage.Columns.Count
For A = 1 To NbColumns

If Not IsError(Application.Match(Rg.Value, Plage.Columns(A), 0)) Then
Set trouve = Plage(Application.Match(Rg.Value, Plage.Columns(A), 0), 5)


Exit For
End If
Next

If Not trouve Is Nothing Then
ChercheRef = trouve
Else
ChercheRef = "Pas trouvé"
End If
End Function
'---------------------------------------


Salutations!

"Domi" <scr...@free.fr> a écrit dans le message de news: u$j#$$U0CHA.2668@TK2MSFTNGP12...

michdenis

unread,
Feb 10, 2003, 6:12:15 PM2/10/03
to
Bonjour Domi,

Ta demande était à l'effet :

" Je voudrais mettre dans la colonne B une formule qui ..."

Tu veux bien m'expliquer comme tu fais pour faire référence
dans ta cellule à la procédure soumise par ChrisV ?

Comment il dit AV...? Bof ! Pfitttttt..... il y en aura d'autres.


;-))))))))


Salutations!

"Domi" <scr...@free.fr> a écrit dans le message de news: Opi7c8U0CHA.1900@TK2MSFTNGP10...

ChrisV

unread,
Feb 10, 2003, 6:14:25 PM2/10/03
to
De rien Domi.
(tu peux d'ailleurs supprimer la ligne adR = c.Address, utilisée lors des
tests, mais plus nécessaire ici.)

ChrisV


"Domi" <scr...@free.fr> a écrit dans le message de news:

Opi7c8U0CHA.1900@TK2MSFTNGP10...

ChrisV

unread,
Feb 10, 2003, 6:48:49 PM2/10/03
to
;-)

ChrisV

nb: pas de meilleurs résultats cependant avec la deuxième version...
Arrgggggrrr!#%!
;-)


"michdenis" <mich...@hotmail.com> a écrit dans le message de news:
eP9rymV0CHA.1288@TK2MSFTNGP11...

michdenis

unread,
Feb 10, 2003, 7:35:33 PM2/10/03
to
Une légère correction :

Remplacer la ligne de code suivante de la procédure :

Set trouve = Plage(Application.Match(Rg.Value, Plage.Columns(A), 0), 5)

Par

Set trouve = Plage(Application.Match(Rg.Value, Plage.Columns(A), 0), 4 + A)


Salutations!


"michdenis" <mich...@hotmail.com> a écrit dans le message de news: uHnNLkV0CHA.2904@TK2MSFTNGP09...

michdenis

unread,
Feb 10, 2003, 8:15:02 PM2/10/03
to
nb: pas de meilleurs résultats cependant avec la deuxième version...

Tu es difficile...;-)

C'est pas de ma faute si l'élément recherché n'est pas toujours situé
en Colonne A ;-)

Tu modifies le chiffre 5 de la procédure par 4 + A si tu tiens à rechercher
dans toutes les colonnes ................


Faut bien que Domi mette la main dans la pâte ,
Lé'pôle dans la roue... si tu vois ce que je veux dire ! ;-))


Salutations!

AV

unread,
Feb 10, 2003, 10:48:11 PM2/10/03
to
Pffffffff... Tu demandes une formule, on te répond par du vba et ça te convient
??

Une formule :
Dans la feuille "Planning", nommer "plg" la plage dans laquelle est susceptible
de se trouver la réf à chercher
Ex : "plg" = A1:M50
En A1:Ax de la feuille "Base", les réfs dont tu veux chercher l'équivalence (4
colonnes à G) dans "Planning"
En B1 => recopie --> Bx - Matricielle


=SI(OU(A1=plg);INDIRECT("Planning!"&ADRESSE(MAX(SI(plg=A1;LIGNE(plg);0));MAX(SI(
plg=A1;COLONNE(plg);0))-4));"Pas trouvé")

PS : Attention à ne pas nommer une plage "plg" de taille monstreuse => le temps
de calcul sera proportionnel à la taille de la plage !
AV

"Domi" <scr...@free.fr> a écrit dans le message news:
eu3v9aT0CHA.1780@TK2MSFTNGP11...

ChrisV

unread,
Feb 11, 2003, 3:52:30 AM2/11/03
to
Salut Alain,

> Pffffffff...

Ok, ok...
mais faudrait quand même prévoir dans le test un truc du style...

{=SI(OU(A1=plg)*MAX(SI(plg=A1;COLONNE(plg);0))-4>0;INDIRECT...)}

dans le cas où les valeurs trouvées sur "Planning" se situeraient en [A:C]
et toc ! ;-P

;-)

ChrisV


"AV" <alain....@wanadoo.fr> a écrit dans le message de news:
u2BXmBY0CHA.1780@TK2MSFTNGP11...

ChrisV

unread,
Feb 11, 2003, 3:57:58 AM2/11/03
to
> Lé'pôle dans la roue...
Curieuse expression...

>...si tu vois ce que je veux dire !
Bein... non ! :-(

;-)
ChrisV


"michdenis" <mich...@hotmail.com> a écrit dans le message de news:

OtzEarW0CHA.1628@TK2MSFTNGP10...

AV

unread,
Feb 11, 2003, 6:10:51 AM2/11/03
to
> mais faudrait quand même prévoir dans le test un truc du style...
> {=SI(OU(A1=plg)*MAX(SI(plg=A1;COLONNE(plg);0))-4>0;INDIRECT...)}

Pfff... là tu causes pour causer !
Demander une recherche 4 colonnes à gauche des valeurs alors que la plage
pourrait être A:C, équivaut à peu près à chercher derrière l'écran la formule
qui renvoie une valeur !

;-)
AV


ChrisV

unread,
Feb 11, 2003, 7:10:58 AM2/11/03
to
Ce n'est pas ce que j'ai dit Alain...

Tu envisageais d'ailleurs toi-même:


> Dans la feuille "Planning", nommer "plg" la plage dans laquelle
> est susceptible de se trouver la réf à chercher
> Ex : "plg" = A1:M50

Certaines, voir toutes les références à chercher peuvent donc se trouver en
[A:C]
Ma remarque n'avait d'autre but que de préciser qu'avec ta formule,
l'ensemble des résultats renvoyés pouvaient être: #VALEUR!
En aucun cas je cherchais à polémiquer; mais juste à "peaufiner" dans
l'esprit MPFE, cette très belle formule.


ChrisV


"AV" <alain....@wanadoo.fr> a écrit dans le message de news:

#mPt94b0CHA.2204@TK2MSFTNGP09...

michdenis

unread,
Feb 11, 2003, 7:53:35 AM2/11/03
to
L'épaule à la roue... ça te dit quelque chose ? ;-)

Ou

Les Poles dans la roue ...une adaptation perso... ne pas
faciliter trop la tâche ....

;-)


Salutations!


"ChrisV" <chr...@wanadoo.fr> a écrit dans le message de news: eIhkRua0CHA.1736@TK2MSFTNGP10...

AV

unread,
Feb 11, 2003, 8:53:41 AM2/11/03
to
Holà Chris ! Je suis pas du tout fâché moi ! C'est vrai que, à la relecture, pas
très clair le truc et manquait la ;-) au bon endroit !
Je "m'adressais " au questionneur en me disant : "il va quand même pas demander
un décalage de 4 col vers la gauche si la réf à trouver peut se trouver en A
=>D"
Et même que, le demandeur à l'air de se f.....e complétement de nos
préoccupations ! ;-)

>".... mais juste à "peaufiner" dans l'esprit MPFE..."
Tu sais bien je qu'adhère complètement à cette démarche

>"..., cette très belle formule."
... et j'adhère totalement à cette remarque ! ;-)))

AV


ChrisV

unread,
Feb 11, 2003, 9:26:01 AM2/11/03
to
Re...

Ce forum devient très obscur parfois... ;-)


ChrisV


"michdenis" <mich...@hotmail.com> a écrit dans le message de news:

OgcFvxc0CHA.2816@TK2MSFTNGP09...

ChrisV

unread,
Feb 11, 2003, 9:39:47 AM2/11/03
to
No problemo Alain ! ;-)


ChrisV


"AV" <alain....@wanadoo.fr> a écrit dans le message de news:

#2dz8Td0CHA.2584@TK2MSFTNGP11...

0 new messages