condition cells.find si trouves pas alors ???

lebarbo

XLDnaute Occasionnel
Bonjour à vous tous,
je cherche à mettre en place une application en VBA et malgré plusieurs essais tous ont été infructueux. J'en appelle donc à vous ; )

Je recherche dans une feuille un mot, si il ne le trouve pas alors il fait rien sinon il copie la ligne où la cellule est activée, la colle dans une autre feuille et continue la recherche avec ce mot si il trouve rien alors il fait rien sinon il copie...

C'est surtout le fait de ne pas trouver le mot et de répéter l'action si il trouve le mot plusieurs fois que je n'arrive pas à faire.

Merci à vous tous
 

lebarbo

XLDnaute Occasionnel
Re : condition cells.find si trouves pas alors ???

Merci robert, c'est bien cool
J'ai commencé à l'adapter mais déjà je bloque puisqu'en fait c'est un peu plus compliqué. Je dois pas recopier le mot à chercher mais celui qui se trouve sur la même ligne mais pas la même colonne je te met le code que j'ai commencé à adapter :

Sub Macrosss()
Dim c As Range 'dçlare la variable c
Dim pa As String 'déclare la variable pa
Dim dest As Range 'déclare la variable dest

TexteATrouver = Range("B7").Value
Sheets("310106").Select

With Range("A1:A" & Range("A65536").End(xlUp).Row) 'prend en compte toutes les cellules éditées de la colonne A (à adapter à ton cas
'définit la variable C
Set c = .Find(TexteATrouver, , xlValues, xlWhole) 'recherche le mot (options: cellules / Mot entier)
If Not c Is Nothing Then 'condition : si le mot est trouvé
pa = c.Address 'définit la variable pa (première adresse du mot trouvé)
Do 'exécute
'définit la variable dest
Set dest = Sheets("310106 (2)").Range("E65536").End(xlUp).Offset(1, 0)
c.Copy Destination:=dest 'copy le mot dans dest

Sheets("310106").Select
Set c = .FindNext(c) 'redéfinit la variable c (prochaine occurence du mot)
Loop While Not c Is Nothing And c.Address <> pa 'boucle sur l'action tant que le mot est trouvé avec une adresse différente de pa
End If 'fin de la condition
End With 'fin de la prise en compte de la colonne A
End Sub
------------------------
c.Copy Destination:=dest 'copy le mot dans dest
ça serait plutot :
NoLigne = ActiveCell.Row
Range("D" & NoLigne & "," & "G" & NoLigne).Select
Selection.Copy

un truc dans le genre

Merciiiiiiii d'avance
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : condition cells.find si trouves pas alors ???

Bonjour Lebarbo, bonjour le forum,

Je pense que ce code devrait aller :
Code:
Sub Macrosss()
Dim tat As String 'déclare la variable tat
Dim c As Range 'déclare la variable c
Dim pa As String 'déclare la variable pa
Dim dest As Range 'déclare la variable dest
 
tat = Range("B7").Value
 
With Sheets("310106").Range("A1:A" & Range("A65536").End(xlUp).Row) 'prend en compte toutes les cellules éditées de la colonne A (à adapter à ton cas
    'définit la variable C
    Set c = .Find(tat, , xlValues, xlWhole) 'recherche le mot (options: cellules / Mot entier)
 
    If Not c Is Nothing Then 'condition : si le mot est trouvé
        pa = c.Address 'définit la variable pa (première adresse du mot trouvé)
        Do 'exécute
            'définit la variable dest
            Set dest = Sheets("310106 (2)").Range("E65536").End(xlUp).Offset(1, 0)
            Application.Union(c.Offset(0, 3), c.Offset(0, 6)).Copy Destination:=dest 'copy le mot dans dest
            Set c = .FindNext(c) 'redéfinit la variable c (prochaine occurence du mot)
        Loop While Not c Is Nothing And c.Address <> pa 'boucle sur l'action tant que le mot est trouvé avec une adresse différente de pa
 
    End If 'fin de la condition
 
End With 'fin de la prise en compte de la colonne A
End Sub
 

lebarbo

XLDnaute Occasionnel
Re : condition cells.find si trouves pas alors ???

MERCIIII ça marche

C'est fou il y a tellement de vocabulaire dans VBA que tout ce que tu me sorts c'est nouveau pour moi, c'est vrai que je suis novice lol

Alors maintenant j'aimerai faire cette boucle non pas pour un seul mot à chercher mais pour une colonne dans la feuille "bilan".
J'ai pensé trouver le nombre de cellule dans la colonne comme ça :

Sheets("bilan").Range("B4").End(xlDown).Select
NoDerniereCellule = ActiveCell
-----
Après il faut faire la boucle avec le texte à trouver de B4 à NoDerniereCellule
Je sais plus comment faire suremment avec un compteur For et Next je pense et où :
tat = Range("B"&+1)

à mon avis ça marche pas comme ça

Bon je vais tatonner encore

Merciiiii
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : condition cells.find si trouves pas alors ???

Bonjour Lebarbo, bonjour le forum

With Sheets("Bilan").Range("B4:B" & Range("B65536").End(xlUp).Row)

C'est suffisant pour indiquer que la recherche ne se fait que dans cette partie (de B4 à la dernière cellule éditée de la colonne B).

Édition :

Oops j'avais mal lu. C'est pas ça bien sûr. Je regarde ça cet après-midi. Je vais manger...
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : condition cells.find si trouves pas alors ???

Bonjour Lebarbo, bonjour le forum,

Je pense que tu devrai faire comme ça :

Code:
Dim cel As Range
Dim tat As String
 
For Each cel In Sheets("Bilan").Range("B4:B" & Range("B65536").End(xlUp).Row)
    tat = cel.Value
    'la macro de recherche
Next cel
 

lebarbo

XLDnaute Occasionnel
Re : condition cells.find si trouves pas alors ???

C'est MAGIQUE !!! Bravo juste par curiosité ton job est en rapport avec la programmation ? Si non je vais commencer à m'inquiéter lol

Bon comme d'habitude je n'arrive pas à avancer tout seul...à mon avis je pourrais arriver à faire la dernière manip tout seul mais en mettant trop de code.
En fait il faudrait que lorsqu'il trouve le mot, qu'il copie les 4 premières colonnes où se trouves le mot (A4 jusqu'à D4, le mot de la recherche étant en B4) donc dans la feuille bilan et les mettent sur la même ligne que l'autre feuille où il colle déjà 2 cellules d'info d'une autre feuille.

à mon avis on peut le faire dans cette partie du code :
Set dest = Sheets("310106 (2)").Range("E65536").End(xlUp).Offset(1, 0)
Application.Union(c.Offset(0, 3), c.Offset(0, 6)).Copy Destination:=dest 'copy le mot dans dest

ça serait ce code en plus :
Set dest1 = Sheets("310106 (2)").Range("A65536").End(xlUp).Offset(1, 0)
Mais le truc c'est que j'utilise pas la feuille 310106 mais bilan donc ça ne va pas marcher comme il y a ça avant :
With Sheets("310106").Range("A1:A" & Range("A65536").End(xlUp).Row) 'prend en compte toutes les cellules éditées de la colonne A (à adapter à ton cas

----
si je suis pas clair je vais essayer de le faire tout seul...
Merci en tout cas pour tout
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : condition cells.find si trouves pas alors ???

lebarbo à dit:
En fait il faudrait que lorsqu'il trouve le mot, qu'il copie les 4 premières colonnes où se trouves le mot (A4 jusqu'à D4, le mot de la recherche étant en B4) donc dans la feuille bilan et les mettent sur la même ligne que l'autre feuille où il colle déjà 2 cellules d'info d'une autre feuille.

Oufff ! Je ne suis plus (je ne pense plus non plus d'ailleurs)... Il me faudrait un petit fichier exemple basé sur ton fichier. Tu fais quelques copier/coller et tu m'expliques clairement ce que tu voudrais.

Pour info je ne suis pas programmateur de profession mais de passion et je dois tout ce que je connais à ce site et aux gens fabuleux qui l'animent. Je n'en citerai aucun pour ne pas me fâcher avec les autres que je pourrais oublier...
 

lebarbo

XLDnaute Occasionnel
Re : condition cells.find si trouves pas alors ???

bon je commence à avoir un truc sympa :

For Each cel In Sheets("bilan").Range("B4:B" & Range("B65536").End(xlUp).Row)
tat = cel.Value
'la macro de recherche
NoLigne = cel.Row
Donnees = Range("A" & NoLigne & ":" & "D" & NoLigne).value

Par contre là je ne comprends pas il me copie juste A4 c'est bizarre et ensuite à la suite du code :

Set dest = Sheets("310106 (2)").Range("E65536").End(xlUp).Offset(1, 0)
Application.Union(c.Offset(0, 3), c.Offset(0, 6)).copy Destination:=dest 'copy le mot dans dest
---
on ajoute en plus ça :

Sheets("310106 (2)").Range("A65536").End(xlUp).Offset(1, 0) = Donnees

Mais toujours ce problème de A4 ???
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : condition cells.find si trouves pas alors ???

]Bonjour Lebarbo. bonjour le forum,

Il y a quelque chose que je ne comprends pas. Les critères de recherches sont dans l'onglet 310106, Colonne A, Ok. Le premier mot à trouver est moi. Il y a deux occurences moi dans l'onglet Bilan. Pourquoi tu n'as retenu que la première et pas la seconde ?


Édition :


si je reprends ton code:

Code:
Dim Donnees As Range
Dim dest As Range
Dim tat As String
 
For Each cel In Sheets("bilan").Range("B4:B" & Range("B65536").End(xlUp).Row)
 
    tat = cel.Value
    NoLigne = cel.Row
    Set Donnees = Sheets("bilan").Range("A" & NoLigne & ":D" & NoLigne)
    Set dest = Sheets("310106 (2)").Range("A65536").End(xlUp).Offset(1, 0)
    Donnees.Copy Destination:=dest
 
Next cel
 
Dernière édition:

lebarbo

XLDnaute Occasionnel
Re : condition cells.find si trouves pas alors ???

arff je me suis mélangé les pinceaux il faut bien sur la prendre en compte
mais j'ai presque réussi il me manque ce truc de A4.

En fait j'ai essayé comme ça et ça marche :
NoLigne = cel.Row
Donnees = Range("A" & NoLigne & ":" & "D" & NoLigne).Value

Sheets("310106 (2)").Range("A1:D1") = Donnees

Donc ça viens de la ligne ci-après :
Avant j'avais mis ça :

Sheets("310106 (2)").Range("A65536").End(xlUp).Offset(1, 0) = Donnees

et là j'ai rajouté ça :
Sheets("310106 (2)").Range("A65536:D65536").End(xlUp).Offset(1, 0) = Donnees

Mais ça ne marche toujours pas grrrr
 

Discussions similaires

Réponses
7
Affichages
330
Réponses
11
Affichages
517

Statistiques des forums

Discussions
312 429
Messages
2 088 354
Membres
103 824
dernier inscrit
frederic.marien@proximus.