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
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
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...
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...
"ChrisV" <chr...@wanadoo.fr> a écrit dans le message de news:
eYUKMgU0CHA.2696@TK2MSFTNGP11...
Bonne soirée
Domi
"michdenis" <mich...@hotmail.com> a écrit dans le message de news:
#kOpLdU0CHA.2904@TK2MSFTNGP09...
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...
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
"Domi" <scr...@free.fr> a écrit dans le message de news:
Opi7c8U0CHA.1900@TK2MSFTNGP10...
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...
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...
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!
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...
> 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...
>...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...
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
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...
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...
>".... 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
Ce forum devient très obscur parfois... ;-)
ChrisV
"michdenis" <mich...@hotmail.com> a écrit dans le message de news:
OgcFvxc0CHA.2816@TK2MSFTNGP09...
ChrisV
"AV" <alain....@wanadoo.fr> a écrit dans le message de news:
#2dz8Td0CHA.2584@TK2MSFTNGP11...