Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

boucle recherche array

8 réponses
Avatar
maud s
Bonjour
voici mon probleme
j aimerais que ce soit en vba
dans la feuille1
en celulle e1 jusqu Exxxx j ai des noms
avec
M.
MME
MADAME
etc...

je voulais que dans la feuil2
en colonne A
quelque soit la liste de mots "cles" que je mets en Colonne A

une boucle balayant la colonne E de la feuille1 en supprimant les mots
"cles" trouvé dans la colonne de feuille2.

exemple en feuille 1 celulle
E2 M. TOTO
E3 MME TATA
E4 CABINET DFG

en feuille 2
A1 MME
A2 M.
A3 CABINET

le resultat de la macro donnera
exemple en feuille 1 celulle
E2 TOTO
E3 TATA
E4 DFG

merci d avance
stefane

8 réponses

Avatar
FFO
Salut à toi

Avec les données implantées telles que tu l'as décrit
Je te propose ce code :

i = 1
Do While i < Sheets("Feuil2").Range("A65535").End(xlUp).Row + 1
For Each c In Worksheets("Feuil1").Range("E2", "E" & Sheets
("Feuil1").Range("E65535").End(xlUp).Row)
If c Like Sheets("Feuil2").Range("A" & i) & "*" Then
c.Value = Replace(c, Sheets("Feuil2").Range("A" & i), "")
c.Value = Replace(c, " ", "")
End If
Next
i = i + 1
Loop

Fais des essais et dis moi !!!!!!!
Avatar
Hervé
Bonjour,
Une autre façon parmis tant d'autres :

Sub Chercher()

Dim Fe1 As Worksheet
Dim Fe2 As Worksheet
Dim Plage_Fe1 As Range
Dim Plage_Fe2 As Range
Dim Cel_Fe1 As Range
Dim Cel_Fe2 As Range
Dim Adr As String
Dim Texte As String

Set Fe1 = Worksheets("Feuil1")
Set Fe2 = Worksheets("Feuil2")

With Fe1
Set Plage_Fe1 = .Range(.[E1], .[E65536].End(xlUp))
End With

With Fe2
Set Plage_Fe2 = .Range(.[A1], .[A65536].End(xlUp))
End With

For Each Cel_Fe2 In Plage_Fe2

Set Cel_Fe1 = Plage_Fe1.Find(Cel_Fe2, , xlValues)

If Not Cel_Fe1 Is Nothing Then
Adr = Cel_Fe1.Address
Do
Set Cel_Fe1 = Plage_Fe1.FindNext(Cel_Fe1)
Cel_Fe1 = Replace(Cel_Fe1, Cel_Fe2 & " ", "")
Loop While Cel_Fe1.Address <> Adr
End If

Next Cel_Fe2

Set Cel_Fe1 = Nothing
Set Cel_Fe2 = Nothing
Set Plage_Fe1 = Nothing
Set Plage_Fe2 = Nothing
Set Fe1 = Nothing
Set Fe2 = Nothing

End Sub


Hervé.

"maud s" a écrit dans le message de
news:
Bonjour
voici mon probleme
j aimerais que ce soit en vba
dans la feuille1
en celulle e1 jusqu Exxxx j ai des noms
avec
M.
MME
MADAME
etc...

je voulais que dans la feuil2
en colonne A
quelque soit la liste de mots "cles" que je mets en Colonne A

une boucle balayant la colonne E de la feuille1 en supprimant les mots
"cles" trouvé dans la colonne de feuille2.

exemple en feuille 1 celulle
E2 M. TOTO
E3 MME TATA
E4 CABINET DFG

en feuille 2
A1 MME
A2 M.
A3 CABINET

le resultat de la macro donnera
exemple en feuille 1 celulle
E2 TOTO
E3 TATA
E4 DFG

merci d avance
stefane



Avatar
michdenis
Bonjour,

Il y a aussi cette approche :

'--------------------------------------
Sub Essaie()

Dim Arr As Variant, Rg As Range
Dim A As Long, B As Long

With Worksheets("Feuil2")
Arr = .Range("A1:A" & .Range("A65536").End(xlUp).Row).Value
End With

With Worksheets("Feuil1")
Set Rg = .Range("E1:E" & .Range("E65536").End(xlUp).Row)
End With

Application.ScreenUpdating = False
Application.EnableEvents = False
For A = 1 To UBound(Arr, 1)
For b = 1 To UBound(Arr, 2)
Rg.Replace Arr(A, b), ""
Next
Next
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
'--------------------------------------



"maud s" a écrit dans le message de groupe de discussion :

Bonjour
voici mon probleme
j aimerais que ce soit en vba
dans la feuille1
en celulle e1 jusqu Exxxx j ai des noms
avec
M.
MME
MADAME
etc...

je voulais que dans la feuil2
en colonne A
quelque soit la liste de mots "cles" que je mets en Colonne A

une boucle balayant la colonne E de la feuille1 en supprimant les mots
"cles" trouvé dans la colonne de feuille2.

exemple en feuille 1 celulle
E2 M. TOTO
E3 MME TATA
E4 CABINET DFG

en feuille 2
A1 MME
A2 M.
A3 CABINET

le resultat de la macro donnera
exemple en feuille 1 celulle
E2 TOTO
E3 TATA
E4 DFG

merci d avance
stefane
Avatar
maud s
cette proposition marche aussi

merci


"Hervé" a écrit dans le message de news:

Bonjour,
Une autre façon parmis tant d'autres :

Sub Chercher()

Dim Fe1 As Worksheet
Dim Fe2 As Worksheet
Dim Plage_Fe1 As Range
Dim Plage_Fe2 As Range
Dim Cel_Fe1 As Range
Dim Cel_Fe2 As Range
Dim Adr As String
Dim Texte As String

Set Fe1 = Worksheets("Feuil1")
Set Fe2 = Worksheets("Feuil2")

With Fe1
Set Plage_Fe1 = .Range(.[E1], .[E65536].End(xlUp))
End With

With Fe2
Set Plage_Fe2 = .Range(.[A1], .[A65536].End(xlUp))
End With

For Each Cel_Fe2 In Plage_Fe2

Set Cel_Fe1 = Plage_Fe1.Find(Cel_Fe2, , xlValues)

If Not Cel_Fe1 Is Nothing Then
Adr = Cel_Fe1.Address
Do
Set Cel_Fe1 = Plage_Fe1.FindNext(Cel_Fe1)
Cel_Fe1 = Replace(Cel_Fe1, Cel_Fe2 & " ", "")
Loop While Cel_Fe1.Address <> Adr
End If

Next Cel_Fe2

Set Cel_Fe1 = Nothing
Set Cel_Fe2 = Nothing
Set Plage_Fe1 = Nothing
Set Plage_Fe2 = Nothing
Set Fe1 = Nothing
Set Fe2 = Nothing

End Sub


Hervé.

"maud s" a écrit dans le message de
news:
Bonjour
voici mon probleme
j aimerais que ce soit en vba
dans la feuille1
en celulle e1 jusqu Exxxx j ai des noms
avec
M.
MME
MADAME
etc...

je voulais que dans la feuil2
en colonne A
quelque soit la liste de mots "cles" que je mets en Colonne A

une boucle balayant la colonne E de la feuille1 en supprimant les mots
"cles" trouvé dans la colonne de feuille2.

exemple en feuille 1 celulle
E2 M. TOTO
E3 MME TATA
E4 CABINET DFG

en feuille 2
A1 MME
A2 M.
A3 CABINET

le resultat de la macro donnera
exemple en feuille 1 celulle
E2 TOTO
E3 TATA
E4 DFG

merci d avance
stefane






Avatar
maud s
cette solution laisse un espace avant le résultat
mais rien de grave

merci beaucoup à vous

"michdenis" a écrit dans le message de news:
OB%
Bonjour,

Il y a aussi cette approche :

'--------------------------------------
Sub Essaie()

Dim Arr As Variant, Rg As Range
Dim A As Long, B As Long

With Worksheets("Feuil2")
Arr = .Range("A1:A" & .Range("A65536").End(xlUp).Row).Value
End With

With Worksheets("Feuil1")
Set Rg = .Range("E1:E" & .Range("E65536").End(xlUp).Row)
End With

Application.ScreenUpdating = False
Application.EnableEvents = False
For A = 1 To UBound(Arr, 1)
For b = 1 To UBound(Arr, 2)
Rg.Replace Arr(A, b), ""
Next
Next
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
'--------------------------------------



"maud s" a écrit dans le message de groupe de
discussion :

Bonjour
voici mon probleme
j aimerais que ce soit en vba
dans la feuille1
en celulle e1 jusqu Exxxx j ai des noms
avec
M.
MME
MADAME
etc...

je voulais que dans la feuil2
en colonne A
quelque soit la liste de mots "cles" que je mets en Colonne A

une boucle balayant la colonne E de la feuille1 en supprimant les mots
"cles" trouvé dans la colonne de feuille2.

exemple en feuille 1 celulle
E2 M. TOTO
E3 MME TATA
E4 CABINET DFG

en feuille 2
A1 MME
A2 M.
A3 CABINET

le resultat de la macro donnera
exemple en feuille 1 celulle
E2 TOTO
E3 TATA
E4 DFG

merci d avance
stefane



Avatar
maud s
la premiere version marche super bien aussi
QUELLE LA DIFFERENCE DE TRAITEMENT ENTRE LES 3?

ET VUE DE NEZ AVANTAGE ET DESAVANTAGES DE CHACUNE, car j arrive au même
résultat.
(excusez moi pour le debut du message en majuscule).. sauf pour la troisième
qui laisse un espace avant chaque résultat.

merci

"FFO" a écrit dans le message de news:

Salut à toi

Avec les données implantées telles que tu l'as décrit
Je te propose ce code :

i = 1
Do While i < Sheets("Feuil2").Range("A65535").End(xlUp).Row + 1
For Each c In Worksheets("Feuil1").Range("E2", "E" & Sheets
("Feuil1").Range("E65535").End(xlUp).Row)
If c Like Sheets("Feuil2").Range("A" & i) & "*" Then
c.Value = Replace(c, Sheets("Feuil2").Range("A" & i), "")
c.Value = Replace(c, " ", "")
End If
Next
i = i + 1
Loop

Fais des essais et dis moi !!!!!!!
Avatar
michdenis
| cette solution laisse un espace avant le résultat
| mais rien de grave

Tu veux bien préciser ta pensée s.v.p ?
Avatar
michdenis
Ok. Si ton objectif est de remplacer tout le contenu
de la colonne E1:Ex dès qu'il y a un mot contenu dans
une cellule de la colonne A:A de la feuil2, tu modifies
cette ligne de code de la procédure soumise :
Rg.Replace Arr(A, b), ""
par celle-ci
Rg.Replace "*" & Arr(A, B) & "*", ""

Et tes cellules seront totalement vides.

La procédure suivante telle qu'elle est écrite supprimait
seulement la chaîne de caractères spécifiées dans la plage
A:A de la feuille2, Sans plus.

'------------------------------------------
Sub Essaie()

Dim Arr As Variant, Rg As Range
Dim A As Long, B As Long

With Worksheets("Feuil2")
Arr = .Range("A1:A" & .Range("A65536").End(xlUp).Row).Value
End With

With Worksheets("Feuil1")
Set Rg = .Range("E1:E" & .Range("E65536").End(xlUp).Row)
End With

Application.ScreenUpdating = False
Application.EnableEvents = False
For A = 1 To UBound(Arr, 1)
For b = 1 To UBound(Arr, 2)
Rg.Replace Arr(A, b), ""
Next
Next
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
'--------------------------------------