Vba recherche de numero de colonne/ ligne sur une feuille excel

legot1 Messages postés 12 Date d'inscription lundi 7 juin 2010 Statut Membre Dernière intervention 25 juin 2010 - 16 juin 2010 à 18:26
legot1 Messages postés 12 Date d'inscription lundi 7 juin 2010 Statut Membre Dernière intervention 25 juin 2010 - 25 juin 2010 à 12:04
bonjour voila sur une feuille exels j ai un tableau dont le titre est "table color" et j aimerais qu automatiquement une formule VBA me retourne le numero de la colonne et de la ligne de cette cellule. ( car je l utilise apres dans mon code..)

voila la formule que j utilise mais j obtient une erreure (910 lorsque je la lance au niveau du Worksheets("sheet1").Cells.Find ...

voici le code:
Dim tabColorColumn As Integer
Dim tabColorRow As Integer

Worksheets("sheet1").Cells.Find(What:="table color", After:=Cells(1, 1), MatchCase:=False).Activate
tabColorRow = ActiveCell.Row
tabColorColumn = ActiveCell.Column

merci d'avance ca m aidera vraiment beaucoup.

legot

13 réponses

CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
16 juin 2010 à 19:51
Bonsoir Legot1,
"le numero de la colonne et de la ligne de cette cellule"
Je comprend que c'est la cellule active
soit:
activecell.row ou activecell.column

mais puisque tu l'as trouvé tout seul je pense que ta question est mal posé.
si tu cherche le numéro de colonne d'une cellule quelconque c'est

ActiveSheet.Cells(x, y).Row ou
ActiveSheet.Cells(x, y).Column

Bonne soirée
CGSI3
0
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
16 juin 2010 à 20:04
Juste un oubli ..
ActiveSheet.Range("A1").CurrentRegion.Address
Si tu cherche les coordonnées d'un tableau tu prend une cellule du tableau concerné, tu la saisie dans range et tu obtiens les coordonnées de l'ensemble de ton tableau
Bonne soirée
CGSI3
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
17 juin 2010 à 00:59
Salut
@CGSI3 : Cells(x, y).Row ou Cells(x, y).Column, c'est un peu "la couleur du cheval blanc" : Le résultat sera x et y (ou l'inverse, je ne sais jamais dans quel ordre ils sont dans Cells)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
17 juin 2010 à 11:08
Salut,

CGSI3 : lit les questions !

legot1 : ton code devrait fonctionner. Mise à par le fait qu'il est préférable de dimensionner les variables avec un type qui correspond au type de la valeur renvoyé par la propriété
Ok

En clair : les propriétés ROW et Column renvois une valeur de type Long donc tes variables tabColorColumn et tabColorRow devraient être de type Long elles aussi . Mais ce n'est pas la raison de l'erreur.

Une erreur 910 !!! "Erreur définie par l'application ou par l'objet" ... pour obtenir cette erreur il faudrait que tu ais une erreur renvoyées par l'utilisation d'un objet d'une application exterieur à excel. Avec le code que tu nous à donné je ne vois pas comment

Avec la methode Find tel que tu l'utilises je ne vois que 2 erreurs possibles:

erreur 91 : renvoyé si tu essais de lu appliquer la methode "Activate" alors que la cellule trouvée est protégé en selection.

erreur 9 : renvoyée si la valeur recherchée n'à pas été trouvée ou alors si la methode find est appliquée à un objet qui n'existe pas.

A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
legot1 Messages postés 12 Date d'inscription lundi 7 juin 2010 Statut Membre Dernière intervention 25 juin 2010
17 juin 2010 à 11:46
salut a vous merci pour vos reponses,
bigfish tu as raison, mon erreur est la 91, et pas la 910 mais je ne comprends pas ce que tu veux dire par "protege en selection"?
si je mets .Select a la place de .Activate, et qu apres je met SelectCell.Row et SelectCell.Column ca ne marche pas non plus.
(je suis debutant en VBA donc je m excuse par avance si certaines de mes questions sont parfois triviales).
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
17 juin 2010 à 13:35
Salut,

non select ou activate te poseront le même problème. Par contre je me suis planté sur l'erreur renvoyée si la recherche est infructueuse car c'est la aussi une erreur 91 et pas une erreur 9.

essai comme ceci :

Dim tabColorColumn As Long, tabColorRow As Long
Dim MaCellule As Range

Set MaCellule = Worksheets("Sheet1").Cells.Find(What:="table color", After:=Cells(1, 1), MatchCase:=False)
If Not MaCellule Is Nothing Then 'si la recherche est infructueuse l'objet "Macellule" est vide
    tabColorRow = MaCellule.Row
    tabColorColumn = MaCellule.Column
Else
    MsgBox "Recherche infructueuse !", vbInformation
End If


Voila cette méthode permet d’éviter les select et autre activate ainsi que de gérer le cas d'une recherche qui n’aboutis à rien

A+
0
legot1 Messages postés 12 Date d'inscription lundi 7 juin 2010 Statut Membre Dernière intervention 25 juin 2010
17 juin 2010 à 14:07
salut, merci bigfish ca marche mieux avec macellule.

Par contre j avais un peu simplifier la question, et j aimerai a la place du "table color" mettre une cellule (cells(3,5) qui contiendrai un string ) par exemple. Et d apres ce que je trouve sur internet visiblement la fonction Find ne peut rechercher que un string...
Donc il faudrait que je trouve un moyen de mettre l interieur de la cellule en string. je pensais faire .find(what:="&cells(3,5)&", ....) mais je pense que ma syntaxe est fausse.
Sais tu si c est possible ?
merci
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
17 juin 2010 à 20:45
Bonjour,

J'essayerais de rajouter ceci :


Dim tabColorColumn As Long, tabColorRow As Long
Dim MaCellule As Range

Dim Titre As String
Titre = CStr(Sheets("feuil2").Range("a1").Cells(3, 5).Value)

Set MaCellule = Worksheets("feuil1").Cells.Find(What:=Titre, After:=Cells(1, 1), MatchCase:=False)
If Not MaCellule Is Nothing Then 'si la recherche est infructueuse l'objet "Macellule" est vide
tabColorRow = MaCellule.Row
tabColorColumn = MaCellule.Column
Else
MsgBox "Recherche infructueuse !", vbInformation
End If


Donc la référence doit se trouver sur la feuille 2, sinon l'intérêt est plutôt limité...

Amicalement,
Us.
0
legot1 Messages postés 12 Date d'inscription lundi 7 juin 2010 Statut Membre Dernière intervention 25 juin 2010
18 juin 2010 à 17:07
merci us_30,
par contre deux question sur ton code: ourquoi il y a besoin de preciser range("a1") dans:
Sheets("feuil2").Range("a1").Cells(3, 5).Value
je peux mettre directement:
Sheets("feuil2").Cells(3, 5).Value non?

Et lorsque je le lance, j ai un message d erreur 91 me disant: Run-time error 91 object variable or With block variable not set. Et l aide me surligne la ligne:
tabColorRow = MaCellule.Row en jaune

J ai bien verifier MaCellule est un object bien defini ici. Donc saurais tu d ou ca peut venir?

merci d avance.
legot
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
18 juin 2010 à 18:52
Bonjour,

Différence entre "Sheets("feuil2").Cells(3, 5).Value" et "Sheets("feuil2").Range("a1").Cells(3, 5).Value" : simple, aucune

En fait dans le premier cas tu laisses le soin au VBA d'inclure par défaut la référence de la cellule "A1". C'est en quelque sorte "implicite". Dans le second, tu le précises... Mais cela peut aussi d'ouvrir l'esprit sur le fonctionnement de VBA. En effet, si tu fais : "Sheets("feuil2").Range("z1").Cells(3, 5).Value" Z1 au lieu de A1... Sais-tu ce que cela change ? ... J'v'as t'le dire : le point de référence ! ... Donc ici tu cible la cellule de 2 lignes et 4 colonnes plus bas en partant de Z1... et non plus de A1 (par défaut).

Ensuite, je ne comprend pas ton message d'erreur. La syntaxe de Big_Fish_le_vrai de Vrai, me semble correcte.

- Est-ce que tu inclus ce code dans un autre ?
"With block variable not set" se produit souvent lorsqu'on oublie de fermer une fonction END WITH, ou lorsqu'on inclus dans ce type de fonction des fonctions IF THEN... et qu'on oublie de la fermer... IF bien sur...

Amicalement,
Us.
0
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
24 juin 2010 à 23:21
Bonjour tou(te)s,
j ai un tableau dont le titre est "table color"

Il me semble que c'est une plage que tu dois mettre et non un titre de colonne.
Si tu veux absolument mettre un nom tu dois le créer,
sélectionner la plage + Insertion >> Nom >> Définir
Et pour Jack .. Cells( Ligne, Colonne)
mais Range("A1") >> Colonne, ligne, et dans bien des cas ça change.
A+
0
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
25 juin 2010 à 00:44
Autant pour moi, je devais avoir la tête ailleur..
Find renvoi une variable objet.
Essaye avec..
Dim C As Range
    Set C = Worksheets(sheet1).Cells.Find("table color")
    tabColorRow = C.Row
    tabColorColumn = C.Column

Mais si ça ne recherche pas dans les titres des colonnes, tu devras adapter.
A+
0
legot1 Messages postés 12 Date d'inscription lundi 7 juin 2010 Statut Membre Dernière intervention 25 juin 2010
25 juin 2010 à 12:04
merci a vous deux ca marche pas tres bien maintenant. Je vais me lancer avec ca dans une modellisation dijstra ( trouver le plus court parcours sur une carte) avec excel... j aimerais faire le meme chose que ca, mais en VBA: http://compsci.ca/v3/viewtopic.php?t=18135

si vous connaissez des sites qui ont deja travailler la dessus je suis preneurs .

A bientot
legot
0
Rejoignez-nous