Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

RECHERCHER MOT EXACT

os_rouen

XLDnaute Junior
Bonjour,

J'ai un petit souci dans une macro que l'on m'a transmise.

Il s'agit d'une boucle qui colle les données d'un onglet 'données' dans un autre onglet en fonction de caractères trouvés sur l'onglet de destination.

Le problème est que j'ai deux onglet dont le nom est proche :

'act' et 'pact' et donc il trouve la chaîne de caractères 'act' dans les deux onglets et colle les données dans les deux onglets.

Ma connaissance de débutant de VBA me fait dire que la ligne suivante exécute la recherche :

Set c = .Find(MotRecherché, LookIn:=xlFormulas)

Comment écrire cette ligne pour qu'il ne prenne les caracère que s'il trouve l'exacte correspondance et pas une partie des caractères?

D'avance merci pour votre aide
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour l'os, le Pascal, le forum,

Grande flemme en ce lundi matin alors copier/coller de l'aide VBA avec en rouge la partie qui t'intéresse :

 

os_rouen

XLDnaute Junior
Voilà ce que j'ai

Worksheets('données04').Select 'Je me place dans la feuille où tu dois chercher la donnée à copier
ActiveSheet.Range('A1').Select
Selection.CurrentRegion.Select 'J'établis la plage complète des données dans ta feuille 'données04'
Set tbl = ActiveCell.CurrentRegion 'Plage de tes données
DernièreLigne = tbl.Rows.Count 'Dernière ligne de recherche
DernièreColonne = tbl.Columns.Count 'Dernière colonne de données (ne sert pas ici mais si tu en as besoin...)
NoColonneChercher = 'B' 'ta recherche s'effectue dans la colonne A et ...
NoLigneTrouvée = 1 '... sur la 1ère ligne... au début

'La plage de ta recherche couvre de la ligne NoLigneTrouvée à DernièreLigne
PlageRecherche = NoColonneChercher + CStr(NoLigneTrouvée) + ':' + NoColonneChercher + CStr(DernièreLigne) '... la plage de recherche s'étend de la ligne de la dernière occurrence trouvée à la dernière ligne renseignée de la colonne
With Worksheets('données04').Range(PlageRecherche)
'Je cherche la première occurence AVANT de rentrer dans la boucle de recherche des données suivantes
Set c = .Find(MotRecherché, LookIn:=xlFormulas)
If Not c Is Nothing Then 'si je trouve, je note les coordonnées de la 1ère occurence (c.adress) (il existe sans doute une autre syntaxe mais celle-ci me convient...)
Adresse = c.Address
Do 'J'ai trouvé une donnée, j'entre dans la boucle et commence par traiter la donnée avant de chercher l'occurence suivante
NoLigneCollage = NoLigneCollage + 1 'No de ligne dans la feuille où tu colles
NoLigneTrouvée = c.Row 'Nouveau No de ligne de la donnée trouvée
plage = 'C' + CStr(NoLigneTrouvée) + '' + CStr(NoLigneTrouvée)
Worksheets('données04').Range(plage).Copy _
Destination:=feuille.Cells(NoLigneCollage, 1)
Set c = .FindNext(c) 'cherche l'occurrence suivante
Loop While Not c Is Nothing And c.Address <> Adresse
'je sors de la boucle si je ne trouve plus rien ou si l'occurence trouvée est sur la dernière ligne de la plage (la plage ne couvrant alors qu'une ligne)
End If
Set c = Nothing 'réinitialise c
End With

D'avance merci,
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re

essaies de changer cette ligne avec les conseils de robert

Set c = .Find(MotRecherché, LookIn:=xlFormulas)

par

Set c = .Find(MotRecherché, LookIn:=xlFormulas,Lookat:=xlwhole)

Bon courage
 
F

flyonets

Guest
Bonjour
Essaie ce bout de code dans un fichier d'essai

Sub FindAll()
Dim AddrList(100) As String
Dim n As Long, Y As Long, C As Range, Firstaddress As String
Dim Searchvalue As String
Searchvalue = 'a'
n = 0
With Worksheets(1).Range('a1:c500')
Set C = .Find(Searchvalue, LookIn:=xlValues)
If Not C Is Nothing Then
Firstaddress = C.Address
Do
n = n + 1
' Stockage des adresses trouvées
AddrList(n) = C.Address
Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Address <> Firstaddress
End If
End With

For Y = 1 To n
MsgBox AddrList(Y)
Next Y
End Sub

ou bien ceci
Sub Cherche_Texte_dans_colonne()
Dim X, C, Col&, K, Plage As Range
Set Plage = Range('F2:F500')
With Plage
X = '=S*'
Col = 6
Set C = Plage.Find(X, LookIn:=xlFormulas)
If C Is Nothing Then
MsgBox ('ras')
Else
Range(C.Address).Select
MsgBox (X & ' trouvé à cette adresse ' & C.Address & ' ligne : ' & C.Row & ' colonne: ' & C.Column)
End If
End with
End Sub


 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…