Fonction find pour des valeurs monétaires

Fermé
Mabouille2016 Messages postés 3 Date d'inscription vendredi 9 décembre 2016 Statut Membre Dernière intervention 10 décembre 2016 - 9 déc. 2016 à 21:33
 Mabouille2016 - 13 déc. 2016 à 12:55
Bonjour,
Émotion, première question sur ce forum, salut à tous!
Dans une sélection de cellules d'une feuille Banque, toutes des valeurs monétaires, je cherche l'adresse de la cellule qui contient un Montant préalablement inscrit dans une cellule d'une autre feuille du même dossier, format monétaire aussi.
Worksheets("Rech Montant").Select
Montant = Range("H1")
With Worksheets(Banque).Range("H3:K1000")
Set C = .Find(Montant, LookIn:=xlValues)
If Not C Is Nothing Then
firstAddress = C.Address
blablabla après

Mais ça ne marche pas, C reste Nothing, pourtant je vois bien que le montant voulu est bien là.
Est-ce un problème de déclaration de variable (Montant est en Variant), ou de paramétrage de l'outil Recherche? ou d'écriture correcte de Find (xxxxx) , ou autre?
Merci d'avance de vos réponses

4 réponses

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
10 déc. 2016 à 00:43
Bonjour et bienvenue,

Avec un fichier on pourrait tester notre réponse avant... Penses-y la prochaine fois.
xlValues porte mal son nom, il correspond plus à .Text (ce qui est affiché)
- si ce sont des valeurs saisies, essaie avec =xlFormulas :
Set c = Columns(3).Find(6, LookIn:=xlFormulas)

- si ce sont des formules, recherche la ligne avec equiv() :
lig = Application.Match(6, Columns(3), 0)
Mais pour une recherche multiple tu vas t'amuser à décaler les plages de recherche suscessives...
A ta place je mettrai en format virgule fixe le temps de la recherche et restaurerai le monétaire ensuite.

eric
0
Mabouille2016 Messages postés 3 Date d'inscription vendredi 9 décembre 2016 Statut Membre Dernière intervention 10 décembre 2016
10 déc. 2016 à 01:45
Merci Eric,
Je vais essayer avec Formulas car ce sont toutes des valeurs saisies.
J'ai bricolé en attendant un truc plus bourrin mais qui marche, qui consiste à parcourir ligne par ligne avec Offset la colonnes des montants d'opérations de chaque banque jusqu'à ce qu'on trouve le Montant recherché, après on reprend le reste de la macro comme si Find avait marché.
OK c'est moins élégant que find mais ça va presque aussi vite Toutefois je vais pour le sport essayer Formulas et je reviendrai dire le résultat ici.
Cordialement
0
Mabouille2016 Messages postés 3 Date d'inscription vendredi 9 décembre 2016 Statut Membre Dernière intervention 10 décembre 2016
10 déc. 2016 à 01:48
Bon, j'ai mis ma réponse en commentaire, je ne sais pas ce qui vaut mieux, aussi je la recopie ci-dessous:
Merci Eric,
Je vais essayer avec Formulas car ce sont toutes des valeurs saisies.
J'ai bricolé en attendant un truc plus bourrin mais qui marche, qui consiste à parcourir ligne par ligne avec Offset la colonnes des montants d'opérations de chaque banque jusqu'à ce qu'on trouve le Montant recherché, après on reprend le reste de la macro comme si Find avait marché.
OK c'est moins élégant que find mais ça va presque aussi vite Toutefois je vais pour le sport essayer Formulas et je reviendrai dire le résultat ici.
Cordialement
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
10 déc. 2016 à 10:31
bonjour Mabouille, Eric

la fonction Find boude avec les formats de nombres; pour fonctionner, il faut donc enlever les formats des nombre (source et cible) et de les remettre après... Je sais, c'est pas triste chez MS !
:-8

la macro de l'exemple ci joint avec du monétaire ( m^me punition avec des dates par ex)
Option Explicit
'-----------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$3" Then
Target.NumberFormat = "general"
With Sheets(2).Range("C5:G14")
.NumberFormat = "General"
MsgBox .Find(Target, .Range("C5")).Address
.NumberFormat = "#,##0.00 $"
End With
Target.NumberFormat = "#,##0.00 $"
End If


la maquette:
https://mon-partage.fr/f/H7PmF9XW/
0
Mabouille2016
13 déc. 2016 à 12:55
merci Michel, je n'ai pas essayé ça faute de temps, promis je viendrai rendre compte ici dans la semaine. Intuitivement je pense que ça devrait marcher, c'est probablement la question du format qui empêche find de finder !

Eric en utilisant formulas ça marchouille= ça donne le montant recherché mais plusieurs autres avec, par ex tu demandes tous les 100,00 tu les as mais tu as aussi 1000,00 et 1100.00 et même des montants qui n'ont rien à voir.
Je vais essayer le truc de Michel, pour la gloire et contribuer à faire avancer le schmilblick "find", parce que sinon ma solution "bourrin" (voir mon post du 10/12) a marché, j'ai ma macro.
Merci les gars
0