Bonjour,
Je souhaiterai pouvoir rechercher un ou plusieurs mots dans ma feuille et selectionner les cellules les contenant,comment faire?
Merci
Bonjour,
Je souhaiterai pouvoir rechercher un ou plusieurs mots dans ma feuille et selectionner les cellules les contenant,comment faire?
Merci
Bonjour,
JP
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Sub chercheMot() Dim cellule1 As String Dim cellule As Range Dim reponse As String reponse = InputBox("Taper le mot à chercher", , "mardi") If reponse = "" Then Exit Sub Set cellule = Cells.Find(reponse) If Not cellule Is Nothing Then cellule1 = cellule.Address Do MsgBox reponse & " trouvé dans la cellule " & cellule.Address Set cellule = Cells.FindNext(cellule) Loop Until cellule.Address = cellule1 End If End Sub
Bonjour,
Recherche de la chaîne de caractères Marie dans la plage C2:C106 de la feuille nommée db du classeur où se trouve le code VBA
Procédure qui lance la recherche
Fonction d'union (renvoie un range avec des cellules non contiguës)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Sub TestSearch_() Dim myTable(), rng As Range, Txt As String Set rng = ThisWorkbook.Worksheets("db").Range("C2:C106") Txt = "Marie" myTable = SimpleSearch(rng, Txt) If myTable(0) Then Union(myTable()).Select Else MsgBox "Pas trouvé " & Txt End Sub
Fonction de recherche (Utilise la méthode Find)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Function Union(Ranges() As Variant) As Range Dim Elem As Long, rng As Range For Elem = LBound(Ranges) To UBound(Ranges) If TypeOf Ranges(Elem) Is Range Then If Not rng Is Nothing Then Set rng = Application.Union(rng, Ranges(Elem)) Else Set rng = Ranges(Elem) End If Next Elem Set Union = rng End Function
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Function SimpleSearch(rng As Range, What As String, Optional CaseSensitive As Boolean) As Variant Dim Table(), LookIn As Integer, count As Long, C As Range, ResAdr As String LookIn = xlValues Table = Array(False) Set C = rng.Cells(rng.Rows.count, rng.Columns.count) ' LastCell Set C = rng.Find(What, LookIn:=LookIn, After:=C, SearchFormat:=False, LookAt:=xlWhole, MatchCase:=CaseSensitive) If C Is Nothing Then SimpleSearch = Table: Exit Function Table = Array(True): ResAdr = C.Address Do count = count + 1: ReDim Preserve Table(count): Set Table(count) = C Set C = rng.FindNext(C) Loop Until C.Address = ResAdr SimpleSearch = Table End Function
Merci pour vos reponses
Philippe, une fois la recherche faites,comment puis je selectionner mes cellules pour les coller ou bon me semble?
Bonjour,
Alors une légère adaptation du code s'impose
Où rng est la variable objet représentant les cellules qui contiennent les valeurs trouvées.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Sub TestSearch_() Dim myTable(), rng As Range, Txt As String Set rng = ThisWorkbook.Worksheets("db").Range("C2:C106") Txt = "Toto" myTable = SimpleSearch(rng, Txt) If myTable(0) Then Set rng = Union(myTable()) Else MsgBox "Pas trouvé " & Txt End If rng.Select End Sub
Donc dans l'exemple rng.Select peut devenir rng.Copy etc ...
Cette variable hérite des méthodes et propriétés de l'objet Range
Je me permets de te lier un exemple de test pour cette fonction,je ne comprends pas d'ou vient l'erreur sur le copy...
Bonjour,
Pour ma part, je préfère visualiser ton code avant d'ouvrir le classeur que je ne télécharge que si vraiment il y a une incompréhension par rapport au code et à son résultat normalement attendu.
Voila mon code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 Sub TestSearch_() Dim myTable(), rng As Range, Txt As String Set rng = ThisWorkbook.Worksheets("feuil1").Range("A1:F12") Txt = "Tortue" myTable = SimpleSearch(rng, Txt) If myTable(0) Then Set rng = Union(myTable()) Else MsgBox "Pas trouvé " & Txt End If rng.Select 'rng.Copy End Sub Function Union(Ranges() As Variant) As Range Dim Elem As Long, rng As Range For Elem = LBound(Ranges) To UBound(Ranges) If TypeOf Ranges(Elem) Is Range Then If Not rng Is Nothing Then Set rng = Application.Union(rng, Ranges(Elem)) Else Set rng = Ranges(Elem) End If Next Elem Set Union = rng End Function Function SimpleSearch(rng As Range, What As String, Optional CaseSensitive As Boolean) As Variant Dim Table(), LookIn As Integer, count As Long, C As Range, ResAdr As String LookIn = xlValues Table = Array(False) Set C = rng.Cells(rng.Rows.count, rng.Columns.count) ' LastCell Set C = rng.Find(What, LookIn:=LookIn, After:=C, SearchFormat:=False, LookAt:=xlWhole, MatchCase:=CaseSensitive) If C Is Nothing Then SimpleSearch = Table: Exit Function Table = Array(True): ResAdr = C.Address Do count = count + 1: ReDim Preserve Table(count): Set Table(count) = C Set C = rng.FindNext(C) Loop Until C.Address = ResAdr SimpleSearch = Table End Function
comment ce manifeste cette erreur ?
J'ai une erreur de type "1004"
La 12, quand j'active rng.Copy
Excel ne permet pas de faire une copie d'une sélection multiple...
Je comprends pas ce que tu veux faire en copiant toutes ces cellules qui contiennent "Tortue" et surtout comment veux tu les coller ?
Pour faire simple, j'ai un planning annuel avec different valeur, une pour chaque jour.
M=Matin
AP=...
N=Nuit
WK=Weekend
CP=Congé Payé
Mon but est de n'avoir au final que un planning avec les CP affichés
Bonjour,
Le problème vient du fait que l'objet Range (la variable rng) contient sans aucun doute des cellules se trouvant sur plusieurs colonnes et sur des lignes différentes.
Il est impossible de faire une copie ainsi.
Tu peux faire une copie sur des cellules se trouvant sur des lignes différentes mais alors sur la même colonne.
Ta question initiale était : Comment faire une sélection ?
et ma réponse était faite dans ce sens.Je souhaiterai pouvoir rechercher un ou plusieurs mots dans ma feuille et selectionner les cellules les contenant,comment faire?
Peut-être changer de procédure :
Tout copier puis effacer tout ce qui n'est pas "CP"
Ou bien jouer avec la mise en forme conditionnelle , ce qui pourrais te permettre de masquer ce qui n'est pas égal à CP ....
Bonjour,
Si tu souhaites copier toutes les lignes contenant le mot cherché, voici une variante au code
Recherche sur la plage complète (A2:L102) du mot par exemple Tortue et ensuite copie des lignes contenant ce mot vers la feuille3 (CodeName) à partir de la cellule A1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 With rng .EntireRow.Copy Feuil3.Range("A1") End With
Pour faire cela avec une mise en forme conditionnelle
sélectionne ta zone A1:F12 puis ajoute une règle : Mise en forme conditionnelle/Utiliser une formule ...
avec comme formule :
choisi une écriture blanche sur fond blanc ( pour "masquer" tes caratères)
Code : Sélectionner tout - Visualiser dans une fenêtre à part =NON(OU(A1=$A$21;$A$21="*"))
et voilà l'affichage dépend du contenu de la cellule A21
s'il y as une étoile: tous tes codes sont affichés CP, WK, ....
si tu met CP en A21 , seul les CP sont visibles ...
et cela sans code VBA...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager