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 :

Find, méthode
Recherche une information spécifique dans une plage et renvoie un objet Range qui représente la première cellule où cette information apparaît. Cette méthode renvoie la valeur Nothing si l'information n'est pas trouvée. N'affecte ni la sélection ni la cellule active.
Pour plus d'informations sur la fonction de feuille de calcul Find de Visual Basic, consultez Utilisation des fonctions de feuille de calcul dans Visual Basic.
Syntaxe
expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte)
expression Obligatoire. Expression qui renvoie un objet Range.
What Argument de type Variant obligatoire. L'élément à rechercher. Il peut s'agir d'une chaîne de caractères ou de tout autre type de données Microsoft Excel.
After Argument de type Variant facultatif. La cellule après laquelle vous souhaitez commencer la recherche. Cela correspond à la position de la cellule active lorsqu'une recherche est effectuée à partir de l'interface utilisateur. Notez que l'argument After doit désigner une seule cellule de la plage et que la recherche commence après cette cellule ; la recherche ne porte pas sur la cellule spécifiée avant que la méthode y revienne avoir exploré la totalité de la plage de recherche. Si vous ne spécifiez pas cet argument, la recherche commence après la cellule située dans le coin supérieur gauche de la plage.
LookIn Argument de type Variant facultatif. Il peut s'agir de l'une des constantes XlFindLookIn suivantes : xlFormulas, xlValues ou xlComments.
LookAt Argument de type Variant facultatif. Il peut s'agir de l'une des constantes XlLookAt suivantes : xlPart ou xlWhole.
SearchOrder Argument de type Variant facultatif. Il peut s'agir de l'une des constantes XlSearchOrder suivantes : xlByColumns ou xlByRows.
SearchDirection Argument de type Variant facultatif. Il peut s'agir de l'une des constantes XlSearchDirection suivantes : xlNext ou xlPrevious. La constante par défaut est xlNext.
MatchCase Argument de type Variant facultatif. Affectez-lui la valeur True pour que la recherche respecte la casse. La valeur par défaut est False.
MatchByte Argument de type Variant facultatif. Cet argument est utilisé uniquement si vous avez sélectionné ou installé la prise en charge des langues codées sur deux octets. Affectez-lui la valeur True pour que les caractères codés sur deux octets correspondent uniquement à des caractères codés sur deux octets. Affectez-lui la valeur False pour que les caractères codés sur deux octets correspondent à leurs équivalents codés sur un octet.
Remarques
Les paramètres des arguments LookIn, LookAt, SearchOrder et MatchByte sont enregistrés chaque fois que vous utilisez cette méthode. Si vous ne spécifiez aucun paramètre pour ces arguments lors du prochain appel de la méthode, les paramètres enregistrés sont utilisés. Le fait de définir les paramètres de ces arguments modifie les paramètres de la boîte de dialogue Rechercher, ce qui a pour effet de changer les paramètres enregistrés qui sont utilisés lorsque vous ne spécifiez pas les arguments. Pour éviter toute ambiguïté, définissez ces arguments de façon explicite chaque fois que vous utilisez cette méthode.
Les méthodes FindNext et FindPrevious permettent de répéter la recherche.
Lorsque la recherche atteint la fin de la plage de recherche spécifiée, elle revient au début de cette plage. Pour arrêter une recherche lorsqu'elle revient au point de départ, enregistrez l'adresse de la première cellule trouvée, puis comparez l'adresse de chaque cellule ultérieurement trouvée avec l'adresse enregistrée.
Pour effectuer des recherches plus complexes, utilisez une instruction For Each...Next avec l'opérateur Like. Par exemple, l'exemple de code suivant montre comment rechercher toutes les cellules de la plage A1:C5 qui utilisent une police dont le nom commence par les lettres ' Cour '. Lorsque Microsoft Excel trouve une cellule correspondante, il lui affecte la police Times New Roman.
For Each c In [A1:C5]
If c.Font.Name Like 'Cour*' Then
c.Font.Name = 'Times New Roman'
End If
Next
 

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) + ':p' + 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,
 
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

Statistiques des forums

Discussions
312 331
Messages
2 087 359
Membres
103 528
dernier inscrit
hplus