Recherche d'une chaine de caractère dans une feuill

Résolu/Fermé
winflow Messages postés 156 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 17 mars 2015 - 4 déc. 2013 à 13:59
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 4 déc. 2013 à 16:04
Bonjour,


J'ai la ligne suivant qui me sort une erreur 91 à savoir que la colonne en question fait partie de colonnes (de B23 à G23). Comment faire la recherche dans ce cas-ci ?

Column(2).Cells.Find("Observations").Row - 2

A voir également:

3 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 4/12/2013 à 14:07
Bonjour,

Si tu nous disait tout, tout de suite, pour changer...
1- que souhaites tu faire?
2- indiques nous ton code (ça tu l'as fait partiellement du moins)
3- le code erreur (ça c'est bon)
4- ta question

exemple de question explicite (qui ressemble à ta question, mais version détaillée) :
Je dois chercher (et trouver) le mot "observations" dans les colonnes de B à G de ma feuille Feuil1. (1-)
J'ai écrit ce code : (2-)
Column(2).Cells.Find("Observations").Row - 2
Code qui me renvoie une erreur 91. (3-)
Qu'est ce qui cloche et que modifier (et comment modifier) pour qu'il me trouve le mot "observations"? (4-)
Pour info, dans mon test, le mot "observations" était situé dans la cellule E25, à l'intérieur de la phrase : "Notez ici vos observations"...

Cordialement,
Franck
0
winflow Messages postés 156 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 17 mars 2015 22
Modifié par winflow le 4/12/2013 à 14:13
1- Je dois chercher (et trouver) le mot "observations" dans les cellules fusionnées de B à G dans ma feuille Feuil1. Une fois ceci fait, je récupère la ligne correspondante je la soustrait à 2 afin de déterminer où se trouve la dernière ligne d'un tableau de données.

2-J'ai écrit ce code :
Column(2).Cells.Find("Observations").Row - 2


3-Code qui me renvoie une erreur 91.

4- Qu'est ce qui cloche et que modifier (et comment modifier) pour qu'il me trouve le mot "observations"?


C'est mieux ?

Cordialement

Winflow
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
4 déc. 2013 à 14:26
C'est mieux ?
Nettement.
Il y a plus d'infos, c'est plus clair, on va pouvoir t'apporter une réponse.

En fait, tu utilises la méthode Find pour faire une recherche.
Très bonne idée.
Encore faut il la décortiquer un peu pour voir l'erreur.

- 1ère erreur : Columns(2) avec un "s". (ça je suppose que c'est une erreur de recopie ici, sinon le message d'erreur eut été différent...)
- 2nde, si tu cherches Columns(2) (colonne B), il ne trouvera pas si Observations est écrit en colonne G...
Essaye ceci :
Columns("B:G").Cells.Find("Observations")

Sache tout de même, que quelque soit la manière dont tu écris ton code, la méthode find renverra une erreur si Observations n'est pas écrit ou est mal orthographié.
Il faut donc prendre les devants et ne pas chercher directement le numéro de ligne.
Le principe :
Au lieu de chercher le mot Observations, on va chercher l'objet Range qui éventuellement contient le mot Observations.
Exemple (adapté à ta situation) :

Dim monRange As Range

Set monRange = Columns("B:G").Cells.Find("Observations")
If Not monRange Is Nothing Then MsgBox "trouvé à la ligne : " & monRange.Row


Reste à traiter de deux sujets :
1- Les options facultatives de la méthode Find :
=> Lookat : permet de chercher soit la totalité, soit dans une partie :
Lookat:=xlwhole
: va trouver Observations dans "Observations", mais pas dans "Notez ici vos observations"
Lookat:=xlpart
va trouver Observations dans les deux cas.
=> Lookin : permet de chercher dans les valeurs, dans les formules etc...
=> ...

2- est ce que Find va fonctionner avec des cellules fusionnées? Pour ça, tu testes et reviens nous dire...
0
winflow Messages postés 156 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 17 mars 2015 22
Modifié par winflow le 4/12/2013 à 14:33
Columns("B:G").Cells.Find("Observations").Row


Cela fonctionne cependant j'ai plusieurs fois le mot "Observations" comment fait on pour récupérer la première occurence uniquement ?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
4 déc. 2013 à 14:38
Qu'appelles tu la première occurrence?
Supposons ceci :
Tu as le mot Observations en :
B22
C5
D2
Tu as donc deux cellules qui peuvent être considérées comme première occurrence :
B22 = 1ère en colonne
D2 = 1ère en ligne.

Tu souhaites quoi donc?

ps : j'ai fait un peu de ménage suite à ton édition, pour la clarté de cette discussion.
0
winflow Messages postés 156 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 17 mars 2015 22
4 déc. 2013 à 14:43
Le mot "Observations" se trouve actuellement en B23:G23, B48:G48 je veux récupérer uniquement celui en B23:G23
0
winflow Messages postés 156 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 17 mars 2015 22
4 déc. 2013 à 15:39
Problème résolu avec

Columns("B:G").Cells.Find("Observations", Cells(18, 2)).Row - 2


grâce à la doc CCM https://forums.commentcamarche.net/forum/affich-37621992-methode-find-dans-vba-recherche-de-donnees-sous-excel#le-code-vba-correspondant
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
4 déc. 2013 à 14:20
On ne peut pas faire de recherche sur des cellules fusionnées ... Il faut choisir entre : se servir d'Excel pour faire de belles présentations ou se servir d'Excel comme outil de gestion.

Sinon voir ici pour l'erreur 91
0
winflow Messages postés 156 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 17 mars 2015 22
4 déc. 2013 à 14:23
D'accord je vais prendre une autre référence
0