Boucle du type For Each qui recherche une valeur partiel....

CyberNeo99

XLDnaute Occasionnel
Bonjour à tous,


J'ai déjà fait la demande mais j'ai beau pioché je n'arrive à rien puisque je ne suis pas programmeur alors...Je m'en remets à vous. Je continue par contre de chercher de mon côté qui sait si un éclair ou la chance ne me sourira pas...

Ce que je veux est lors de l'ouverture du classeur, donc dans WorkBook, une recherche puisse se faire dans chaque cellule de la colonne A. Il recherchera une valeur partiel, je m'explique dans la colonne A il y a des numéros à 10 chiffres, je veux qu'il recherche par exemple 514123 qui se trouve à être une partie de la donner d'une cellule de la colonne A. Il y aura plus d'une donné comme ça à chercher. Je veux que lorsqu'il trouve cette valeur il puisse mettre dans la colonne B la valeur Toto par exemple et une fois le tout fait, qu'il a fait toute la colonne A, que la feuille soit protéger avec le mot de passe disons Toto pour les besoins de la cause.


J'imagine que le code commencera par

For Each Cell In Range ("A1:A1500")

If Cell = "la donner partiel qui se trouve être 514123" Then

Mettre le mot Toto dans la colonne B

Je ne suis pas sûr de type de code car comment lui dire de mettre le code dans la bonne cellule de la colonne B

Ou encore il y a

For i=1 To 1500

If Cell(i, 1) = "si la valeur 514123 se trouve dans la cellule" Then

Cell (i, 2) = "Toto"


C<est ce que j'ai trouvé comme idée de code mais je ne sais comment l'écrire exactement puisque je ne suis pas programmeur alors....

Merci de votre aide précieuse

Neo
 

Pièces jointes

  • Liste téléphonique.xls
    21 KB · Affichages: 56
  • Liste téléphonique.xls
    21 KB · Affichages: 63
  • Liste téléphonique.xls
    21 KB · Affichages: 68

repcheks

XLDnaute Junior
Re : Boucle du type For Each qui recherche une valeur partiel....

Il faut utiliser la fonction like, comme en SQL

Code:
Dim oVerif
Const sVerif as string = "*514123*"

oVerif = Cells(x,y).Value Like sVerif

If oVerif = True Then 
'Si la condition est verifiée...
Else
'Sinon...
End If
 

kjin

XLDnaute Barbatruc
Re : Boucle du type For Each qui recherche une valeur partiel....

Bonsoir,
Dans ThisWorkBook...
Code:
Private Sub Workbook_Open()
ziva 514123
End Sub
...et dans un module standard...
Code:
Sub ziva(x&)
Dim c As Range, Adresse$
With Sheets("Liste")
    .Unprotect "toto"
    Set c = .Columns(1).Find(x, , xlValues, xlPart)
    If Not c Is Nothing Then
        Adresse = c.Address
        Do
            c.Offset(, 1) = "toto"
            Set c = .Columns(1).FindNext(c)
        Loop While Not c Is Nothing And c.Address <> Adresse
    End If
    .Protect "toto"
End With
End Sub
A+
kjin
 
Dernière édition:

CyberNeo99

XLDnaute Occasionnel
Re : Boucle du type For Each qui recherche une valeur partiel....

Bonjour repcheks,

Merci pour l'info mais je dois t,avouer que c'est quelque peu du chinois pour moi je ne suis pas programmeur. Lorsqu'il trouve le fameux 514123 il doit mettre dans le colonne B sur la même ligne qu'il a trouvé le 514123 le mot Toto alors le code sera du genre Cells (x, y+1) = "Toto".... Et le x et y ne sont pas défini au début alors tu mets Dim x as Integer, Dim y as Integer mais comment prennent-ils leur valeurs.... en mettant x=1 et y=1 au début et à la fin du code tu mets x=x+1 y=y+1, en mettant une boucle j'imagine et mettre le x=x+1 et y=y1 en dehors de la boucle pour que le code se poursuive.

Je dois avouer que je ne suis pas trop sûr de bien suivre car là j'ai peut être écrit quelque chose et que je suis totalement hors champ.


Merci encore


Neo
 

CyberNeo99

XLDnaute Occasionnel
Re : Boucle du type For Each qui recherche une valeur partiel....

Bonjour kjin,


Gros Merci ça fonctionne nickel. Tu me sauve un temps fou là et plutôt ingénieux l'idée, il suffit de mettre le nom un espace et la valeur rechercher et ainsi il mets le terme voulu.

WOW

Par contre je voudrais qu'il ne protège les cellules où il a mis toto.


Neo
 
Dernière édition:

CyberNeo99

XLDnaute Occasionnel
Re : Boucle du type For Each qui recherche une valeur partiel....

Re-Bonjour,

J'ai trouvé, il suffit de répéter une ligne en y ajoutant .Locked = True, je l'ai ajouté en rouge

Sub ziva(x&)
Dim c As Range, Adresse$
With Sheets("Liste")
.Unprotect "toto"
Set c = .Columns(1).Find(x, , xlValues, xlPart)
If Not c Is Nothing Then
Adresse = c.Address
Do
c.Offset(, 1) = "toto"

c.Offset(, 1).Locked = True

Set c = .Columns(1).FindNext(c)


Loop While Not c Is Nothing And c.Address <> Adresse
End If
.Protect "toto"
End With
End Sub

Et le tour est joué


Neo
 

CyberNeo99

XLDnaute Occasionnel
Re : Boucle du type For Each qui recherche une valeur partiel....

Bonjour kjin, et les autres,


Pour les nombres ça fonctionne nickel. Si je veux par exemple chercher un mot ou expression par exemple ce code ne fonctionne pas. Il y a sûrement un petit changement à faire, il doit être mineur. J'ai changé Range pour String, ça ne fonctionne pas. Si par exemple c'est un texte du genre Paris à Lyon disons comme texte que je recherche et bien ou même encore Bateau il bloc sur le texte à chercher dans le Workbook.

Une idée du code à mettre....


Merci encore

Neo
 

flyonets44

XLDnaute Occasionnel
Re : Boucle du type For Each qui recherche une valeur partiel....

Bonjour
Public Sub atrouver() 'RECHERCHE DE VALEURS IDENTIQUES, SANS ERREUR SI LA RECHERCHE EST INFRUCTUEUSE
Feuil1.Activate 'ACTIVATION DE LA FEUILLE
Dim objCell As Range, PlageResult As Range, PremAdresse As String, atrouver As String
Dim Firstrow As Long, Firstcol As Long, Lastrow As Long, Lastcol As Long, Plage As Range
atrouver = "AXIOM" 'VALEUR À TROUVER
Firstrow = Cells.Find(What:="*", SearchDirection:=xlNext, SearchOrder:=xlByRows).Row
Firstcol = Cells.Find(What:="*", SearchDirection:=xlNext, SearchOrder:=xlByColumns).Column
Lastrow = Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
Lastcol = Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Column
Set Plage = Range(Cells(Firstrow, Firstcol), Cells(Lastrow, Lastcol))
Plage.Select 'ICI SELECTION OBLIGATOIRE SINON ERREUR'
With Plage

Set objCell = .Find(What:=atrouver, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext)
If Not objCell Is Nothing Then
PremAdresse = objCell.Address
Do 'CREATION DE LA COLLECTION DES VALEURS CHERCHÉES
If PlageResult Is Nothing Then
Set PlageResult = objCell
Else
Set PlageResult = Application.Union(objCell, PlageResult) 'ici se crée la collection des valeurs cherchées
End If
Set objCell = .FindNext(objCell)
Loop While Not objCell Is Nothing And objCell.Address <> PremAdresse
End If
If Not PlageResult Is Nothing Then
PlageResult.Interior.ColorIndex = 7 ' MARQUE LES VALEURS A TROUVER
'MsgBox (PremAdresse)
With Range(PremAdresse) ' MARQUE LES VALEURS A TROUVER
.Interior.ColorIndex = 6
End With
End If
End With
End Sub
Cordialement
Flyonets
 

kjin

XLDnaute Barbatruc
Re : Boucle du type For Each qui recherche une valeur partiel....

Bonjour,
Pour les nombres ça fonctionne nickel. Si je veux par exemple chercher un mot ou expression par exemple ce code ne fonctionne pas....
Normal puisque dans la procédure,la variable x est déclarée de type Long (&)
Pour rechercher des nombre ou du texte, déclares la de type String ($) comme ceci...
Code:
Sub ziva(x$)
...par contre n'oublie pas les guillemets...
Code:
Private Sub Workbook_Open()
ziva "abcd"
ziva "12345" ou 12345
End Sub
A+
kjin