Rechercher : dans
Par :

Excel VBA Retourner la position d'une cellule

Dernière réponse le 27 aoû 2009 à 16:48:43 mathieu_m, le 27 aoû 2009 à 14:08:36 
 Signaler ce message aux modérateurs

Bonjour,

Je débute juste avec cet outil
Je cherche à récupérer la position d'une cellule, je ne trouve pas comment procéder

J'ai un tableau de N lignes, chaque ligne commence par un indice incrémenté de 1 à N
Je voudrais qu'un bouton ajoute une ligne entre N-1 et N, qui sera ensuite remplie

Problème :
Je peux repérer la ligne N grâce à MAX(Colonne A), qui trouve l'indice N

Application.WorksheetFunction.Max(Columns(1))

Mais je ne veux pas la valeur mais la position de la valeur

Comment faire ??

Merci pour vos propositions

mathieu

Configuration: Windows XP
Firefox 3.5.2

1

michel_m, le 27 aoû 2009 à 14:45:21

Bonjour,

essaies:
Columns(1).Find(Application.Max(Columns(1)), [A65536]).Row Cordialement, Michel

Répondre à michel_m

2

mathieu_m, le 27 aoû 2009 à 15:07:55

Merci

malheureusement j'obtiens le message "Erreur d'excecution '91': Variable objet ou variable de bloc With non définie

Et comme je ne comprend pas la ligne (syntaxe [A65536] ? type de sortie ?) j'ai du mal à comprendre

sinon j'ai réussi en contournant :

'------------------------------------
' get last line position
Dim index, new_index, line As Integer

line = 8
index_last = 0
index_new = Cells(line, 1).Value

Do While index_new > index_last
    line = line + 1
    index_last = index_new
    index_new = Cells(line, 1).Value
Loop

'------------------------------------
' add a line before the last one
Rows(line - 1).Insert Shift:=xlDown



mais je veux que tu m'explque, j'aime bien l'idée de le faire en une ligne, et j'apprends...

sinon merci

Répondre à mathieu_m

3

mathieu_m, le 27 aoû 2009 à 15:09:11

Je veux bien que tu m'expliques, et pas je veux !!

je ne t'ordonne rien !

merci

Répondre à mathieu_m

4

michel_m, le 27 aoû 2009 à 15:19:02
  • +1

Re,
philosophie générale: éviter les boucles tant que possible

dim lig as long
lig=Columns(1).Find(Application.Max(Columns(1)), [A65536]).Row 

(testée chez moi :OK)
[A65536] forme abrégée pour feignant (donc j'utilise) de range("A65536")
regarde Find dans l'aide:
FInd(what,after)
la recherche commence APRES la cellule donc après A65536 (XL<2007) on a A1

Dans ton 1° message tu disais chercher la position de la valeur maxi, instruction qu'on ne retrouve pas dans la copie de ta macro.

Si tu cherches la dernière ligne occupée (au cas où)
lig=range("A65536").end(xlup).row
Cordialement, Michel

Répondre à michel_m

5

mathieu_m, le 27 aoû 2009 à 15:53:29

Dans ma macro la position est la variable line, utilisée ensuite pour l'ajout de ligne

merci encore pour ces explications, mais le code proposé pose problème sur ma machine

excel 2007

la ligne suivante me renvoie la même erreur

Dim Reponse As Range
Reponse = Columns(1).Find(2)


je reste perplexe

Répondre à mathieu_m

6

michel_m, le 27 aoû 2009 à 15:57:13

Moi aussi, car tu lis mal les explications qu'on te donne  Michel

Répondre à michel_m

7

mathieu_m, le 27 aoû 2009 à 16:12:34

Dans le doute j'ai réessayé la formule donnée, ça fonctionne

je ne sais pas ce que j'ai mal fait la première fois, et qui m'a conduit à 20 minutes de recherche sans succès
n'aboutissant qu'a la simplification, hasardeuse je l'admet, de l'expression proposée pour comprendre ce qui clochait

je ne sais donc pas ce que j'ai mal lu, puisqu'à ton avis c'est ma grande faute

désolé donc, de t'avoir fait perdre patience, mais je trouve ta réponse un poil désagréable
ma première expérience avec le vba sur excel datant de ce matin, 10h, je me donne le droit de taper à côté

merci pour tout

mathieu

Répondre à mathieu_m

8

mathieu_m, le 27 aoû 2009 à 16:26:24

Finalement il semblerait que cela ne fonctionne que si la colonne se termine par une donnée inscrite en dur
si elle est issue d'une formule, ça plante comme indiqué message #2

tant pis

mathieu

Répondre à mathieu_m

9

 michel_m, le 27 aoû 2009 à 16:48:43

mais je trouve ta réponse un poil désagréable
Bon, utilise alors la méthode D.T.T.S

pour trouver avec une valeur résultant d'une formule, dans la méthode FIND, comme tout le monde quelque soit son niveau, voir l'aide Microsoft( à lookin)
--

Répondre à michel_m