Selectionner une cellule selon contenu

Bonjour, dans une application EXCEL en VBA je veux sélectionner dans un tableau une cellule selon son contenu (une référence unique) . Dans ce tableau il y a environ 200 cellules à sélectionner, la référence est un nombre (de 1 à 200) déclarés en "standard". Quand je lance la recherche, j'arrive à trouver les cellules jusqu'au N°20, les suivantes ne sont pas détectées. J'ai modifié le format de cellule en texte, nombre,(avec aucune décimale), rien n'y fait, je n'arrive pas à sélectionner ces cellules. Quand je mets en place des références alphanumériques (B56 par ex.) tout fonctionne! Qui peut me proposer une explication rationnelle?

Voici la procédure:

Public Sub choisir_plan()

Application.ScreenUpdating = False

Dim cherche As Variant

Dim trouve As Range

cherche = Worksheets("calcul").Range("L2").Value 'c'est la ref emplacement à trouver

Worksheets("plan").Activate

Range("Y12:AW60").Select

With Range("Y12:AW60")

Set trouve = .Find(what:=cherche, LookIn:=xlValues, lookat:=xlWhole, MatchCase:=False)

End With

If Not trouve Is Nothing Then

trouve.Select

End If

If Range("AU4").Value = "active" Then ' c'est le code qui définit la couleur à appliquer

ActiveCell.Interior.Color = vbRed

Else

ActiveCell.Interior.Color = vbYellow

End If

verif_non_payé

End Sub

Salut CAP,

Sans ton fichier c'est difficile de dire ce qui va pas

Voici un code qui reprend le tien, et après test, il semble fonctionner :

Sub Recherche()
Dim MaPlage As Range, MaCell As Range
Set MaPlage = Sheets("plan").Range("Y12:AW60")
Set MaCell = MaPlage.Find(What:=Sheets("calcul").Range("L2"))
If Sheets("plan").Range("AU4") = "active" Then Sheets("plan").Range(MaCell.Address).Interior.Color = vbRed
If Sheets("plan").Range("AU4") <> "active" Then Sheets("plan").Range(MaCell.Address).Interior.Color = vbYellow
End Sub

Restant à ta dispo

Bonjour Juice, j'ai modifié mon code comme tu le préconise, j'ai le message d'erreur suivant: erreur 424 objet requis.

En survolant avec le pointeur MaPlage, j'obtiens MaPlage=Nothing, MaCell=Nothing et l'application bloque à la ligne

Set MaCell = MaPlage.Find(What:=Sheets("calcul").Range("L2"))

Bien sur la cellule recherchée n'est pas sélectionnée sur le plan. Je continue donc d'utiliser le repérage alphanumérique . Merci pour ta réponse, bonne fin de semaine, CAP

Re- CAP

C'est que je n'ai pas du comprendre ta demande alors.

Car j'ai re-tester le code de mon côté, et les cellules se mettent en rouge ou en jaune.

Je pense qu'il nous faudrait avoir ton fichier et des explications (un exemple) pour que nous puissions t'aider.

Restant à ta dispo,

Bon week-end également

Bonjour JUICE, après bien des tâtonnements et essais (et aussi une "inspiration" de je ne sais quel ordre), j'ai trouvé le hic. La feuille contenant les références à rechercher comporte des cellules fusionnées (parfois par 2 parfois par 4 soit en largeur soit en hauteur voire les deux). En fonction de la taille de la référence (nb de caractères) et en fonction de la taille et du format de la police utilisée, EXCEL trouve ou ne trouve pas . Selon que j'augmente la largeur de colonne et(ou) la hauteur de ligne la cellule est "visible" ou pas lors de la recherche. Pourtant le contenu est toujours lisible à l'écran. Ce phénomène ne se produit qu'avec cette application, d'autres très similaires ne posent pas de problème! De plus cela ne se déclenche qu'avec des nombres. Si la réf recherchée est alphanumérique tout baigne! Cela reste un mystère pour moi. Y a t-il une explication? Merci de ta coopération, bonne semaine, CAP

Re- CAP

Ci-joint ton fichier tel que je le vois

En feuille plan, tu a ta plage "Y12:AW60" avec une bordure : C'est la où tu a tes valeurs à chercher

En feuille calcul, la cellule "L2" en jaune : C'est la où tu indique la valeur à chercher

Est-ce que tu peux me reproduire l'une de tes erreurs et me retourner le fichier, s'il te plaît ?

Te souhaitant également une agréable semaine

18pour-cap.xlsm (27.35 Ko)

Re-bonjour JUICE, merci de t'acharner ainsi sur mon souci, j'apprécie! J'ai essayé de travailler avec méthode pour y voir plus clair.

Je joins un fichier réduit au strict minimum, tiré de l'application en question (l'appli fait env. 7Mo).

Après tests voici mes constatations:

données: lgc= largeur de colonne hl= hauteur de ligne

Cellule référencée 5: avec une lgc 1.4 et une hl10 la cellule est detectée et colorée, idem si alphanumerique (A05)

Cellule réferencée 17 (ou 195) ( ou 125) avec mêmes valeurs: non détectée

Message d'erreur: erreur d'execution'91', variable objet ou variable de bloc with non définie. Le curseur s'arrête sur Range(MaCell.Address).Interior.Color = vbYellow (surligné en jaune)

Si référence alphanumérique (par ex. A195) la cellule est détectée et colorée correctement

Avec lgc=2.6 et hl=16 la macro s'exécute et le coloris est appliqué correctement quel que soit le contenu.

J'ai déjà refait la feuille "plan" résultat inchangé!

Le fichier joint est en XLS, j'ai testé en XLSM, résultat inchangé.

Si tu veux le fichier original, pas de souci, il n'y a pas de données sensibles. La taille (env. 7 Mo) passe t-elle?

Le fichier que tu m'a fait parvenir fonctionne quel que soit le contenu de la cellule recherchée, j'ai même mis un grand nombre (1289). Pas de souci!

Conclusion: cette application est maudite, puisque d'autres fonctionnent. Allez, je vais continuer à creuser, encore merci, CAP

Re- CAP,

Alors le problème viens du fait que tu recherche une valeur inexistante dans ta plage en feuille Plan.

J'avais pas codé la macro pour gérer ce genre d'anomalie, et donc elle te retourne une erreur.

Ci-dessous la macro modifié :

Sub Recherche()
Dim MaPlage As Range, MaCell As Range, MaRecherche As String
MaRecherche = Sheets("calcul").Range("L2")
Set MaPlage = Sheets("plan").Range("Y12:AW60")
Set MaCell = MaPlage.Find(What:=MaRecherche)
If MaCell Is Nothing Then
    MsgBox "La valeur n'a pas été trouvée dans la plage Y12:AW60 de la Feuille Plan"
    Exit Sub
End If
If Sheets("plan").Range("AU4") = "active" Then Sheets("plan").Range(MaCell.Address).Interior.Color = vbRed
If Sheets("plan").Range("AU4") <> "active" Then Sheets("plan").Range(MaCell.Address).Interior.Color = vbYellow
End Sub

Je l'ai testé sur le fichier que tu m'a fais parvenir (merci d'ailleur) et sa fonctionne!

N'oublie pas que ta plage de recherche va de la cellule Y12 à AW60 de la feuille Plan!

Restant à ta dispo

Cette fois, çà y est! Cela fonctionne. Mais je remarque que la procédure diffère quand même de la première mouture, en ce sens que la valeur recherchée est définie différemment

( ligne MaRecherche = Sheets("calcul").Range("L2").

Mais bon j'aurai à nouveau appris quelque chose. Merci encore, à une prochaine peut-être, CAP

Rechercher des sujets similaires à "selectionner contenu"