Coller uniquement la valeur du Range généré par un.find

loulou14

XLDnaute Nouveau
Bonjour à tous

J'ai un probléme avec le code ci-dessous :


Sub CRIQF() 'Compte rendu mesure
1 Dim Derlign As Long, c As Variant
2 Dim Contremarque As String
3 Do
4 Sheets("programme").Select
5 Range("T3:T65000").Select
6 Contremarque = Application.InputBox("Saisir la contremarque :")
7 If Contremarque = "" Then Exit Sub
8 Set c = Sheets("programme").Columns(20).Cells.Find(What:=Contremarque, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False)

9 If Not c Is Nothing Then
10 Else
11 MsgBox "Contremarque non trouvée": GoTo 3
12 End If

13 Union(c.Offset, c.Offset(0, -2), c.Offset(0, 29)).Select
14 Selection.Copy
15 Sheets("Mail de diffusion ").Select '
16 Derlign = Range("B65536").End(xlUp).Row + 2
17 Range("B" & Derlign).Select
18 ActiveSheet.Paste
19 Application.CutCopyMode = False

20 Loop

End Sub


Je tourne en rond avec ce code. Je souhaite en effet récupérer uniquement la valeur que renvoi .find.
Ici, je copie et je colle les cellules trouvées (valeur avec leur mise en forme).
Je pense que la méthode de recherche n'est peut être pas adequat mais je n'en connais pas d'autre.

SI résoudre mon casse tête interresse l'un d'entre vous...
 

loulou14

XLDnaute Nouveau
Re : Coller uniquement la valeur du Range généré par un.find

J'ai modifié le Type de C (Dim C as Range)

Ensuite j'ai modifié le code :
13 Union(c.Offset.Value, c.Offset(0, -2).Value, c.Offset(0, 29).Value).Select

Malheureusement, la macro me renvoi une erreur 434 "Objet requis"

Dans le code initial, j'arrive à mes fins sauf que je copie les cellules trouvées avec le format. Je pense que cela ne fonctionne pas car je passe par le presse papier qui ne gére pas les valeurs d'un Range.

L'idée serait peut être d'extraire les valeurs de C, et ensuite de les copier, mais je suis un peu sec !!
 

Pierrot93

XLDnaute Barbatruc
Re : Coller uniquement la valeur du Range généré par un.find

Bonjour,

la méthode "union" utilise comme argument des objets "range" et non des valeurs de cellule.... d'autre part l'offset de "c.Offset.Value" requier une référence de ligne et de colonne...

bon après midi
@+
 

loulou14

XLDnaute Nouveau
Re : Coller uniquement la valeur du Range généré par un.find

Re,

sans plus de détail, peut être ainsi :
Code:
Union(c, c.Offset(0, -2), c.Offset(0, 29)).Select

A noter, renverra une erreur si valeur recherchée n'est pas trouvée....

Oui Pierrot, cela fonctionne (c'était d'ailleurs mon code initial dans le premier message)

Le probléme est qu'ensuite, je copie les cellules dans le presse papier et que le collage ne gére pas uniquement les valeurs.
Je cherche donc un code pour ne coller que les valeurs du Range issu de mon .Find
 

Pierrot93

XLDnaute Barbatruc
Re : Coller uniquement la valeur du Range généré par un.find

Re,

comme précisé par jp:) pour ne récupérer que la valeur utiliser la propriété "value".... soit peut être plus explicite quand au résultat à atteindre, car en l'état nous risquons de tourner en rond longtemps....
 

flyonets44

XLDnaute Occasionnel
Re : Coller uniquement la valeur du Range généré par un.find

Bonjour
tu pourrais utiliser un tableau pour stocker tes valeurs
pour les renvoyer ensuite dans une feuille
Code:
Set C = maplage.Find(contremarque) 
x = 1 
If Not C Is Nothing Then 
firstaddress = C.Address 
Do 
ReDim Preserve tab1(x)' redimensionne  un tableau 
tab1(x) = C.Value 
x = x + 1 
Set C = maplage.FindNext(C) 
Loop While Not C Is Nothing And C.Address <> firstaddress 
End If 
For l = 1 To UBound(tab1, 1) 
Worksheets(2).Cells(l, 1) = tab1(l) 'vide le tableau en feuille 2 colonne 1 
Next
cordialement
flyonets
 

Discussions similaires

Statistiques des forums

Discussions
312 331
Messages
2 087 352
Membres
103 526
dernier inscrit
HEC