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 SubRestant à 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
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 SubJe 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