OVH Cloud OVH Cloud

problème avec la fonction Workbooks.open

25 réponses
Avatar
lo
Bonjour a tous ;-)

J'essaie vainement d'aller chercher des valeurs dans un fichier excel a
partir d'un autre fichier excel en vba mais je n'arrive pas a ouvrir
convenablement le workbook en question ... Je dois surement faire une erreur
quelque part mais je ne vois vraiment pas ou ... Ah oui, je suis nouveau en
vba donc veuillez etre indulgents ;-)
Voici mon code :

---------------------------------------------------------------------

Function getLastRowNumberWithValue(colonne, valeur) As Integer
Debug.Print "in Function 2"
wbk = "C:\excel\stats.xls"
Debug.Print "opening workbook : ", wbk
Set wb = Workbooks.Open(wbk)
Debug.Print "after workbook open"
Debug.Print "Workbook name : ", wb
Set donnees = wb.Worksheets("Données floraison")
Debug.Print "after donnees select"
getLastRowNumberWithValue = -1
first = 5
i = donnees.Cells(65535, colonne).End(xlUp).Row
Debug.Print "last row : ", i
Do While getLastRowNumberWithValue = -1 And i >= first
Debug.Print "i = ", i, " cell value = ", donnees.Cells(i, colonne)
If valeur = donnees.Cells(i, colonne) Then getLastRowNumberWithValue
= i
i = i - 1
Loop

End Function

---------------------------------------------------------------------

Et voici l'output dans la fenetre d'execution :

---------------------------------------------------------------------

in Function 2
opening workbook : C:\excel\stats.xls
after workbook open
Workbook name :

---------------------------------------------------------------------

De plus lorsque j'installe un espion pour verifier la valeur de wb, je vois
la valeur "nothing". Il semblerait donc que le workbook ne soit pas chargé
correctement et que la fonction s'arrete juste après...

Qqun aurait-il des idées ?

Merci beaucoup

Lo

10 réponses

1 2 3
Avatar
lo
Bonjour michDenis,

Malheureusement, ca ne fonctionne toujours pas ... La fonction ne se bloque
plus comme avant mais la valeur Recherche est "non disponible"
J'ai rajouté des espions et voici les valeurs que j'obtiens a la ligne de
code "getLastRowNumberWithValue = Cherche" :

Cherche "Non Disponible"
Ligne Vide
Wk Nothing

Merci

Lo

PS: je vais essayer avec un fichier excel tout simple pour voir si c'est le
fichier qui pose probleme

"michdenis" wrote in message
news:
Bonjour Lo,

Ceci devrait faire ton bonheur,

'-----------------------------
Sub OuvrirFichier()
Dim Ligne As Variant
Ligne = getLastRowNumberWithValue("C:excelAdo ado.xls", 3, 10)
MsgBox Ligne
End Sub
'-----------------------------
Function getLastRowNumberWithValue(NomFichier As String, _
Col As Integer, MaValeur As Variant) As Integer

Dim Wk As Workbook, Ligne As Variant
Dim Cherche As Variant

On Error Resume Next
Set Wk = Workbooks.Open(NomFichier)
With Wk.Worksheets("Données floraison")
Ligne = .Columns(Col).Find(MaValeur, , xlFormulas, _
xlWhole, xlByColumns, xlPrevious).Row
If Err = 0 Then
Cherche = Ligne
Else
Err = 0
Cherche = "Non Disponble"
End If
End With
getLastRowNumberWithValue = Cherche

End Function
'-----------------------------


Salutations!




"lo" a écrit dans le message de
news:

En fait je veux que la fonction retourne le numero de ligne concerné.
Parce que je veux pouvoir m'en servir une seule fois et aller chercher les
infos dans la ligne apres en fonction des besoins (pour des raisons
d'efficacité, de rapidité).
C'est sympa de m'aider pour la fonction mais en fait là où ca coince,
c'est

au chargement du fichier je pense ...
Petite question, tu écris :
getLastRowNumberWithValue "C:excelstats.xls", 25, 10
je suppose que ca équivaut a :
getLastRowNumberWithValue("C:excelstats.xls", 25, 10) <--- c'est ce que
moi j'écris

Pour répondre a tes questions, il n'y a aucune colonne a déterminer. On ne
s'occupe ici que de la colonne qui contient les numéros identificateurs
d'objets (la colonne 3 dans mon cas).
Une fois que j'aurai déterminé la ligne en question (=r), je ferai
Cells(r,colStatAtraiter).Value pour aller chercher la valeur qui
m'interesse

en faisant varier colStatAtraiter.
Ca me permettra de gagner en efficacité parce que cette fonction-ci
parcourt

quand meme un tableau et ca sert a rien de le faire plusieurs fois si on
n'en a pas le besoin.

Merci !

Lo

PS: On Error Resume Next ca fonctionne comment exactement ?
PPS : la fonction Columns(Col).Find(...), elle fonctionne comment ? Elle
va

bien du bas vers le haut (via le parametre xlPrevious) ?

"michdenis" wrote in message
news:%
Bonjour Lo,

Voici une ébauche,


Il y a juste un tout petit problème ...

Qu'est-ce que tu cherches ? La fonction doit te retourner quoi ? La
date


, le chiffre , la valeur ?
Lorsque la fonction a trouvé la dernière ligne pour une valeur
précise,


dans quelle colonne l'information de la fonction se
trouve-t-elle ?

'----------------------------------
Sub OuvrirFichier()

getLastRowNumberWithValue "C:excelstats.xls", 25, 10

End Sub

'----------------------------------
Function getLastRowNumberWithValue(NomFichier As String, _
Col As Integer, MaValeur As Variant) As Integer

Dim Wk As Workbook, Ligne As Variant
Dim Cherche As Variant

Dim ColonneÀDéterminer ' à déterminer ???

On Error Resume Next
Set Wk = Workbooks.Open(NomFichier)
With Wk.Worksheets("Données floraison")
Ligne = .Columns(Col).Find(MaValeur, , xlFormulas, _
xlWhole, xlByColumns, xlPrevious).Row
If Err = 0 Then
cherche = .Cells(Ligne, ColonneÀDéterminer)
Else
Err = 0
cherche = "Non Disponble"
End If
End With

getLastRowNumberWithValue = cherche

End Function
'----------------------------------


Salutations!



"lo" a écrit dans le message de
news:

Re MichDenis,

J'ai fait un copier-coller du chemin d'acces au fichier (que j'ai
reprise


dans mon code telle quelle) dans la barre d'adresse de l'explorateur
windows

et le bon fichier s'est ouvert correctement ...
Je ne sais pas si tu as lu jusqu'au bout la dernière réponse que je t'ai
envoyée mais tout en bas, il y avait une explication de ce que je
recherche

pour ma fonction ... Je copie-colle ci-dessous pour la facilité :

En fait ce que je veux faire :

j'ai un ensemble de successions de valeurs prises a des moments
differents


et se rapportant a des objets differents les objets sont identifiés dans
une

colonne par les chiffres 1, 2, ... 9 (en colonne 3) et chaque ligne
correspond a un ensemble de mesures sur cet objet prises a une
date-heure


donnée. Les dates les + recentes sont situées les + bas dans la feuille.
Donc je veux acceder a la ligne contenant les valeurs les + recentes
pour


un
objet donné.
Je donne donc comme argument le numero de l'objet et je vais rechercher
la


ligne la + basse dans la feuille donc la + recente pour cet objet
(l'argument MaValeur)

J'espère que c'est clair ;-)

Merci

Lo


"michdenis" wrote in message
news:
Bonsoir Lo,

Si ton fichier ne s'ouvre pas c'est tout simplement que tu as une
faute



d'orthographe ou le chemin indiqué n'est pas le bon .

Pour ce qui est de la fonction, comme je n'ai pas compris ce que tu
voulais faire dans la deuxième section de la fonction, je

n'y ai pas touché et je sais ... l'exécution s'arrête sur une erreur !
MAIS le fichier devrait quand même être ouvert !


Si tu as besoin de plus de précision, il faut que tu accompagnes ta
demande d'une explication quant aux objectifs recherchés

par ta fonction.


Salutations!



"lo" a écrit dans le message de
news:

Salut michdenis,

Tout d'abord merci de passer du temps a m'aider. J'ai appliqué les
modifications que tu faites dans ma fonction mais ca ne passe toujours
pas


...

------------------------------------------------------------

Function getLastRowNumberWithValue(NomFichier As String, _
Col As Integer, MaValeur As Variant) As Integer
Dim Wk As Workbook

Debug.Print "avant"
Set Wk = Workbooks.Open(NomFichier)
With Wk.Worksheets("Données floraison")
' .Range(.....).....
End With
Debug.Print "apres"
'Je n'ai pas vraiment compris ce que tu voulais faire !

getLastRowNumberWithValue = -1
first = 5
i = Cells(65535, colonne).End(xlUp).Row
Debug.Print "last row : ", i
Do While getLastRowNumberWithValue = -1 And i >= first
Debug.Print "i = ", i, " cell value = ", Cells(i, colonne)
If valeur = Cells(i, colonne) Then getLastRowNumberWithValue i
i = i - 1
Loop

End Function

--------------------------------------------------------------
l'output de la fenetre d'execution :

--------------------------------------------------------------

avant

--------------------------------------------------------------

Ca bloque donc toujours pendant l'ouverture du workbook ou lors de la
selection de la worksheet ...

En fait ce que je veux faire :

j'ai un ensemble de successions de valeurs prises a des moments
differents


et se rapportant a des objets differents les objets sont identifiés
dans



une
colonne par les chiffres 1, 2, ... 9 (en colonne 3) et chaque ligne
correspond a un ensemble de mesures sur cet objet prises a une
date-heure


donnée. Les dates les + recentes sont situées les + bas dans la
feuille.



Donc je veux acceder a la ligne contenant les valeurs les + recentes
pour


un
objet donné.
Je donne donc comme argument le numero de l'objet et je vais
rechercher



la
ligne la + basse dans la feuille donc la + recente pour cet objet
(l'argument MaValeur)

J'espère que c'est clair ;-)

Merci

Lo















Avatar
lo
Voila, j'ai essayé avec un fichier tout simple, ca fait pareil

Petite question : est-ce que le probleme pourrait venir du fait que je fais
appel a cette fonction via une autre fonction que j'appelle directement dans
une cellule excel ?

dans la cellule : getLastProdEstimate(1)

voila la fonction :

Function getLastProdEstimate(terrain As Integer)
Debug.Print "in Function"
Dim r As Variant
r = getLastRowNumberWithValue("c:excelstats.xls", 3, terrain)
'getLastProdEstimate = Cells(r, 14).value
Debug.Print "ligne : ", r
'Debug.Print "getLastProdEstimate : ", getLastProdEstimate
End Function

la ligne (r) est apparemment evaluee a 0 (ce qui est bien entendu faux)

Merci

Lo

"lo" wrote in message
news:
Bonjour michDenis,

Malheureusement, ca ne fonctionne toujours pas ... La fonction ne se
bloque

plus comme avant mais la valeur Recherche est "non disponible"
J'ai rajouté des espions et voici les valeurs que j'obtiens a la ligne de
code "getLastRowNumberWithValue = Cherche" :

Cherche "Non Disponible"
Ligne Vide
Wk Nothing

Merci

Lo

PS: je vais essayer avec un fichier excel tout simple pour voir si c'est
le

fichier qui pose probleme

"michdenis" wrote in message
news:
Bonjour Lo,

Ceci devrait faire ton bonheur,

'-----------------------------
Sub OuvrirFichier()
Dim Ligne As Variant
Ligne = getLastRowNumberWithValue("C:excelAdo ado.xls", 3, 10)
MsgBox Ligne
End Sub
'-----------------------------
Function getLastRowNumberWithValue(NomFichier As String, _
Col As Integer, MaValeur As Variant) As Integer

Dim Wk As Workbook, Ligne As Variant
Dim Cherche As Variant

On Error Resume Next
Set Wk = Workbooks.Open(NomFichier)
With Wk.Worksheets("Données floraison")
Ligne = .Columns(Col).Find(MaValeur, , xlFormulas, _
xlWhole, xlByColumns, xlPrevious).Row
If Err = 0 Then
Cherche = Ligne
Else
Err = 0
Cherche = "Non Disponble"
End If
End With
getLastRowNumberWithValue = Cherche

End Function
'-----------------------------


Salutations!




"lo" a écrit dans le message de
news:

En fait je veux que la fonction retourne le numero de ligne concerné.
Parce que je veux pouvoir m'en servir une seule fois et aller chercher
les


infos dans la ligne apres en fonction des besoins (pour des raisons
d'efficacité, de rapidité).
C'est sympa de m'aider pour la fonction mais en fait là où ca coince,
c'est

au chargement du fichier je pense ...
Petite question, tu écris :
getLastRowNumberWithValue "C:excelstats.xls", 25, 10
je suppose que ca équivaut a :
getLastRowNumberWithValue("C:excelstats.xls", 25, 10) <--- c'est ce
que


moi j'écris

Pour répondre a tes questions, il n'y a aucune colonne a déterminer. On
ne


s'occupe ici que de la colonne qui contient les numéros identificateurs
d'objets (la colonne 3 dans mon cas).
Une fois que j'aurai déterminé la ligne en question (=r), je ferai
Cells(r,colStatAtraiter).Value pour aller chercher la valeur qui
m'interesse

en faisant varier colStatAtraiter.
Ca me permettra de gagner en efficacité parce que cette fonction-ci
parcourt

quand meme un tableau et ca sert a rien de le faire plusieurs fois si on
n'en a pas le besoin.

Merci !

Lo

PS: On Error Resume Next ca fonctionne comment exactement ?
PPS : la fonction Columns(Col).Find(...), elle fonctionne comment ? Elle
va

bien du bas vers le haut (via le parametre xlPrevious) ?

"michdenis" wrote in message
news:%
Bonjour Lo,

Voici une ébauche,


Il y a juste un tout petit problème ...

Qu'est-ce que tu cherches ? La fonction doit te retourner quoi ? La
date


, le chiffre , la valeur ?
Lorsque la fonction a trouvé la dernière ligne pour une valeur
précise,


dans quelle colonne l'information de la fonction se
trouve-t-elle ?

'----------------------------------
Sub OuvrirFichier()

getLastRowNumberWithValue "C:excelstats.xls", 25, 10

End Sub

'----------------------------------
Function getLastRowNumberWithValue(NomFichier As String, _
Col As Integer, MaValeur As Variant) As Integer

Dim Wk As Workbook, Ligne As Variant
Dim Cherche As Variant

Dim ColonneÀDéterminer ' à déterminer ???

On Error Resume Next
Set Wk = Workbooks.Open(NomFichier)
With Wk.Worksheets("Données floraison")
Ligne = .Columns(Col).Find(MaValeur, , xlFormulas, _
xlWhole, xlByColumns, xlPrevious).Row
If Err = 0 Then
cherche = .Cells(Ligne, ColonneÀDéterminer)
Else
Err = 0
cherche = "Non Disponble"
End If
End With

getLastRowNumberWithValue = cherche

End Function
'----------------------------------


Salutations!



"lo" a écrit dans le message de
news:

Re MichDenis,

J'ai fait un copier-coller du chemin d'acces au fichier (que j'ai
reprise


dans mon code telle quelle) dans la barre d'adresse de l'explorateur
windows

et le bon fichier s'est ouvert correctement ...
Je ne sais pas si tu as lu jusqu'au bout la dernière réponse que je
t'ai



envoyée mais tout en bas, il y avait une explication de ce que je
recherche

pour ma fonction ... Je copie-colle ci-dessous pour la facilité :

En fait ce que je veux faire :

j'ai un ensemble de successions de valeurs prises a des moments
differents


et se rapportant a des objets differents les objets sont identifiés
dans



une
colonne par les chiffres 1, 2, ... 9 (en colonne 3) et chaque ligne
correspond a un ensemble de mesures sur cet objet prises a une
date-heure


donnée. Les dates les + recentes sont situées les + bas dans la
feuille.



Donc je veux acceder a la ligne contenant les valeurs les + recentes
pour


un
objet donné.
Je donne donc comme argument le numero de l'objet et je vais
rechercher



la
ligne la + basse dans la feuille donc la + recente pour cet objet
(l'argument MaValeur)

J'espère que c'est clair ;-)

Merci

Lo


"michdenis" wrote in message
news:
Bonsoir Lo,

Si ton fichier ne s'ouvre pas c'est tout simplement que tu as une
faute



d'orthographe ou le chemin indiqué n'est pas le bon .

Pour ce qui est de la fonction, comme je n'ai pas compris ce que tu
voulais faire dans la deuxième section de la fonction, je

n'y ai pas touché et je sais ... l'exécution s'arrête sur une erreur
!




MAIS le fichier devrait quand même être ouvert !

Si tu as besoin de plus de précision, il faut que tu accompagnes ta
demande d'une explication quant aux objectifs recherchés

par ta fonction.


Salutations!



"lo" a écrit dans le message de
news:

Salut michdenis,

Tout d'abord merci de passer du temps a m'aider. J'ai appliqué les
modifications que tu faites dans ma fonction mais ca ne passe
toujours




pas
...

------------------------------------------------------------

Function getLastRowNumberWithValue(NomFichier As String, _
Col As Integer, MaValeur As Variant) As Integer
Dim Wk As Workbook

Debug.Print "avant"
Set Wk = Workbooks.Open(NomFichier)
With Wk.Worksheets("Données floraison")
' .Range(.....).....
End With
Debug.Print "apres"
'Je n'ai pas vraiment compris ce que tu voulais faire !

getLastRowNumberWithValue = -1
first = 5
i = Cells(65535, colonne).End(xlUp).Row
Debug.Print "last row : ", i
Do While getLastRowNumberWithValue = -1 And i >= first
Debug.Print "i = ", i, " cell value = ", Cells(i, colonne)
If valeur = Cells(i, colonne) Then getLastRowNumberWithValue
i



i = i - 1
Loop

End Function

--------------------------------------------------------------
l'output de la fenetre d'execution :

--------------------------------------------------------------

avant

--------------------------------------------------------------

Ca bloque donc toujours pendant l'ouverture du workbook ou lors de
la




selection de la worksheet ...

En fait ce que je veux faire :

j'ai un ensemble de successions de valeurs prises a des moments
differents


et se rapportant a des objets differents les objets sont identifiés
dans



une
colonne par les chiffres 1, 2, ... 9 (en colonne 3) et chaque ligne
correspond a un ensemble de mesures sur cet objet prises a une
date-heure


donnée. Les dates les + recentes sont situées les + bas dans la
feuille.



Donc je veux acceder a la ligne contenant les valeurs les + recentes
pour


un
objet donné.
Je donne donc comme argument le numero de l'objet et je vais
rechercher



la
ligne la + basse dans la feuille donc la + recente pour cet objet
(l'argument MaValeur)

J'espère que c'est clair ;-)

Merci

Lo



















Avatar
lo
Bonjour Patrick,

Oui c'est vrai mais comme mon workbook est evalué à "Nothing", je ne pense
pas que ca marcherait de toutes manieres et la suite du deroulement de la
fonction tend a le montrer ...

Lo

"Frédéric Sigonneau" wrote in message
news:%
Bonjour,

Juste un mot sur l'erreur que tu signales dans ce post. Si le fichier que
tu

essayes d'ouvrir ("C:excelstats.xls") existe bien à l'endroit indiqué,
pour

afficher son nom tu dois plutôt utiliser :

Debug.Print "Workbook name : ", wb.Name

wb est une variable qui représente l'objet classeur avec toutes ses
propriétés

et tu dois indiquer quelle propriété t'intéresse (il n'y a pas pour un
classeur

de propriété par défaut).

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !


Bonjour a tous ;-)

J'essaie vainement d'aller chercher des valeurs dans un fichier excel a
partir d'un autre fichier excel en vba mais je n'arrive pas a ouvrir
convenablement le workbook en question ... Je dois surement faire une
erreur


quelque part mais je ne vois vraiment pas ou ... Ah oui, je suis nouveau
en


vba donc veuillez etre indulgents ;-)
Voici mon code :

---------------------------------------------------------------------

Function getLastRowNumberWithValue(colonne, valeur) As Integer
Debug.Print "in Function 2"
wbk = "C:excelstats.xls"
Debug.Print "opening workbook : ", wbk
Set wb = Workbooks.Open(wbk)
Debug.Print "after workbook open"
Debug.Print "Workbook name : ", wb
Set donnees = wb.Worksheets("Données floraison")
Debug.Print "after donnees select"
getLastRowNumberWithValue = -1
first = 5
i = donnees.Cells(65535, colonne).End(xlUp).Row
Debug.Print "last row : ", i
Do While getLastRowNumberWithValue = -1 And i >= first
Debug.Print "i = ", i, " cell value = ", donnees.Cells(i,
colonne)


If valeur = donnees.Cells(i, colonne) Then
getLastRowNumberWithValue


= i
i = i - 1
Loop

End Function

---------------------------------------------------------------------

Et voici l'output dans la fenetre d'execution :

---------------------------------------------------------------------

in Function 2
opening workbook : C:excelstats.xls
after workbook open
Workbook name :

---------------------------------------------------------------------

De plus lorsque j'installe un espion pour verifier la valeur de wb, je
vois


la valeur "nothing". Il semblerait donc que le workbook ne soit pas
chargé


correctement et que la fonction s'arrete juste après...

Qqun aurait-il des idées ?

Merci beaucoup

Lo






Avatar
Frédéric Sigonneau
Re François,

As-tu essayé ?

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !


Bonjour Patrick,

Oui c'est vrai mais comme mon workbook est evalué à "Nothing", je ne pense
pas que ca marcherait de toutes manieres et la suite du deroulement de la
fonction tend a le montrer ...

Lo

"Frédéric Sigonneau" wrote in message
news:%

Bonjour,

Juste un mot sur l'erreur que tu signales dans ce post. Si le fichier que


tu

essayes d'ouvrir ("C:excelstats.xls") existe bien à l'endroit indiqué,


pour

afficher son nom tu dois plutôt utiliser :

Debug.Print "Workbook name : ", wb.Name

wb est une variable qui représente l'objet classeur avec toutes ses


propriétés

et tu dois indiquer quelle propriété t'intéresse (il n'y a pas pour un


classeur

de propriété par défaut).

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !



Bonjour a tous ;-)

J'essaie vainement d'aller chercher des valeurs dans un fichier excel a
partir d'un autre fichier excel en vba mais je n'arrive pas a ouvrir
convenablement le workbook en question ... Je dois surement faire une



erreur

quelque part mais je ne vois vraiment pas ou ... Ah oui, je suis nouveau



en

vba donc veuillez etre indulgents ;-)
Voici mon code :

---------------------------------------------------------------------

Function getLastRowNumberWithValue(colonne, valeur) As Integer
Debug.Print "in Function 2"
wbk = "C:excelstats.xls"
Debug.Print "opening workbook : ", wbk
Set wb = Workbooks.Open(wbk)
Debug.Print "after workbook open"
Debug.Print "Workbook name : ", wb
Set donnees = wb.Worksheets("Données floraison")
Debug.Print "after donnees select"
getLastRowNumberWithValue = -1
first = 5
i = donnees.Cells(65535, colonne).End(xlUp).Row
Debug.Print "last row : ", i
Do While getLastRowNumberWithValue = -1 And i >= first
Debug.Print "i = ", i, " cell value = ", donnees.Cells(i,



colonne)

If valeur = donnees.Cells(i, colonne) Then



getLastRowNumberWithValue

= i
i = i - 1
Loop

End Function

---------------------------------------------------------------------

Et voici l'output dans la fenetre d'execution :

---------------------------------------------------------------------

in Function 2
opening workbook : C:excelstats.xls
after workbook open
Workbook name :

---------------------------------------------------------------------

De plus lorsque j'installe un espion pour verifier la valeur de wb, je



vois

la valeur "nothing". Il semblerait donc que le workbook ne soit pas



chargé

correctement et que la fonction s'arrete juste après...

Qqun aurait-il des idées ?

Merci beaucoup

Lo











Avatar
michdenis
Bonjour Lo,

(Les tests sont effectués à partir d'excel 2003)

Ça ne devrait causer aucun problème, si les variables dont dûment renseignées. Cela étant dit, Je ne vois pas ce que cette
fonction ajoute à ton programme si ce n'est que t'emmêler les pinceaux.
A la procédure que je t'ai soumise, il faudait que tu fasses une légère modification à la ligne de déclaration. Moi, je n'ai
fait qu,un copier-coller d'une section de ta procédure, mais en fait, la procédure peut retourner une valeur qui dépasse la
capacité d'une Variable Integer ... le nombre de lignes dans un classeur est de 65536 et la capacité maximale d'une variable
Integer est de 32800 environ ...

En conséquence, modifie l'appel de la fonction comme ceci :

Remplace Integer par Long


Function getLastRowNumberWithValue(NomFichier As String, _
Col As Integer, MaValeur As Variant) As Long

P.S. Je le répète, tu dois avoir au moins une version 2002 pour excéuter cette procédure. As-tu fais les mises à jour ?


Salutations!



"lo" a écrit dans le message de news:
Voila, j'ai essayé avec un fichier tout simple, ca fait pareil

Petite question : est-ce que le probleme pourrait venir du fait que je fais
appel a cette fonction via une autre fonction que j'appelle directement dans
une cellule excel ?

dans la cellule : getLastProdEstimate(1)

voila la fonction :

Function getLastProdEstimate(terrain As Integer)
Debug.Print "in Function"
Dim r As Variant
r = getLastRowNumberWithValue("c:excelstats.xls", 3, terrain)
'getLastProdEstimate = Cells(r, 14).value
Debug.Print "ligne : ", r
'Debug.Print "getLastProdEstimate : ", getLastProdEstimate
End Function

la ligne (r) est apparemment evaluee a 0 (ce qui est bien entendu faux)

Merci

Lo

"lo" wrote in message
news:
Bonjour michDenis,

Malheureusement, ca ne fonctionne toujours pas ... La fonction ne se
bloque

plus comme avant mais la valeur Recherche est "non disponible"
J'ai rajouté des espions et voici les valeurs que j'obtiens a la ligne de
code "getLastRowNumberWithValue = Cherche" :

Cherche "Non Disponible"
Ligne Vide
Wk Nothing

Merci

Lo

PS: je vais essayer avec un fichier excel tout simple pour voir si c'est
le

fichier qui pose probleme

"michdenis" wrote in message
news:
Bonjour Lo,

Ceci devrait faire ton bonheur,

'-----------------------------
Sub OuvrirFichier()
Dim Ligne As Variant
Ligne = getLastRowNumberWithValue("C:excelAdo ado.xls", 3, 10)
MsgBox Ligne
End Sub
'-----------------------------
Function getLastRowNumberWithValue(NomFichier As String, _
Col As Integer, MaValeur As Variant) As Integer

Dim Wk As Workbook, Ligne As Variant
Dim Cherche As Variant

On Error Resume Next
Set Wk = Workbooks.Open(NomFichier)
With Wk.Worksheets("Données floraison")
Ligne = .Columns(Col).Find(MaValeur, , xlFormulas, _
xlWhole, xlByColumns, xlPrevious).Row
If Err = 0 Then
Cherche = Ligne
Else
Err = 0
Cherche = "Non Disponble"
End If
End With
getLastRowNumberWithValue = Cherche

End Function
'-----------------------------


Salutations!




"lo" a écrit dans le message de
news:

En fait je veux que la fonction retourne le numero de ligne concerné.
Parce que je veux pouvoir m'en servir une seule fois et aller chercher
les


infos dans la ligne apres en fonction des besoins (pour des raisons
d'efficacité, de rapidité).
C'est sympa de m'aider pour la fonction mais en fait là où ca coince,
c'est

au chargement du fichier je pense ...
Petite question, tu écris :
getLastRowNumberWithValue "C:excelstats.xls", 25, 10
je suppose que ca équivaut a :
getLastRowNumberWithValue("C:excelstats.xls", 25, 10) <--- c'est ce
que


moi j'écris

Pour répondre a tes questions, il n'y a aucune colonne a déterminer. On
ne


s'occupe ici que de la colonne qui contient les numéros identificateurs
d'objets (la colonne 3 dans mon cas).
Une fois que j'aurai déterminé la ligne en question (=r), je ferai
Cells(r,colStatAtraiter).Value pour aller chercher la valeur qui
m'interesse

en faisant varier colStatAtraiter.
Ca me permettra de gagner en efficacité parce que cette fonction-ci
parcourt

quand meme un tableau et ca sert a rien de le faire plusieurs fois si on
n'en a pas le besoin.

Merci !

Lo

PS: On Error Resume Next ca fonctionne comment exactement ?
PPS : la fonction Columns(Col).Find(...), elle fonctionne comment ? Elle
va

bien du bas vers le haut (via le parametre xlPrevious) ?

"michdenis" wrote in message
news:%
Bonjour Lo,

Voici une ébauche,


Il y a juste un tout petit problème ...

Qu'est-ce que tu cherches ? La fonction doit te retourner quoi ? La
date


, le chiffre , la valeur ?
Lorsque la fonction a trouvé la dernière ligne pour une valeur
précise,


dans quelle colonne l'information de la fonction se
trouve-t-elle ?

'----------------------------------
Sub OuvrirFichier()

getLastRowNumberWithValue "C:excelstats.xls", 25, 10

End Sub

'----------------------------------
Function getLastRowNumberWithValue(NomFichier As String, _
Col As Integer, MaValeur As Variant) As Integer

Dim Wk As Workbook, Ligne As Variant
Dim Cherche As Variant

Dim ColonneÀDéterminer ' à déterminer ???

On Error Resume Next
Set Wk = Workbooks.Open(NomFichier)
With Wk.Worksheets("Données floraison")
Ligne = .Columns(Col).Find(MaValeur, , xlFormulas, _
xlWhole, xlByColumns, xlPrevious).Row
If Err = 0 Then
cherche = .Cells(Ligne, ColonneÀDéterminer)
Else
Err = 0
cherche = "Non Disponble"
End If
End With

getLastRowNumberWithValue = cherche

End Function
'----------------------------------


Salutations!



"lo" a écrit dans le message de
news:

Re MichDenis,

J'ai fait un copier-coller du chemin d'acces au fichier (que j'ai
reprise


dans mon code telle quelle) dans la barre d'adresse de l'explorateur
windows

et le bon fichier s'est ouvert correctement ...
Je ne sais pas si tu as lu jusqu'au bout la dernière réponse que je
t'ai



envoyée mais tout en bas, il y avait une explication de ce que je
recherche

pour ma fonction ... Je copie-colle ci-dessous pour la facilité :

En fait ce que je veux faire :

j'ai un ensemble de successions de valeurs prises a des moments
differents


et se rapportant a des objets differents les objets sont identifiés
dans



une
colonne par les chiffres 1, 2, ... 9 (en colonne 3) et chaque ligne
correspond a un ensemble de mesures sur cet objet prises a une
date-heure


donnée. Les dates les + recentes sont situées les + bas dans la
feuille.



Donc je veux acceder a la ligne contenant les valeurs les + recentes
pour


un
objet donné.
Je donne donc comme argument le numero de l'objet et je vais
rechercher



la
ligne la + basse dans la feuille donc la + recente pour cet objet
(l'argument MaValeur)

J'espère que c'est clair ;-)

Merci

Lo


"michdenis" wrote in message
news:
Bonsoir Lo,

Si ton fichier ne s'ouvre pas c'est tout simplement que tu as une
faute



d'orthographe ou le chemin indiqué n'est pas le bon .

Pour ce qui est de la fonction, comme je n'ai pas compris ce que tu
voulais faire dans la deuxième section de la fonction, je

n'y ai pas touché et je sais ... l'exécution s'arrête sur une erreur
!




MAIS le fichier devrait quand même être ouvert !

Si tu as besoin de plus de précision, il faut que tu accompagnes ta
demande d'une explication quant aux objectifs recherchés

par ta fonction.


Salutations!



"lo" a écrit dans le message de
news:

Salut michdenis,

Tout d'abord merci de passer du temps a m'aider. J'ai appliqué les
modifications que tu faites dans ma fonction mais ca ne passe
toujours




pas
...

------------------------------------------------------------

Function getLastRowNumberWithValue(NomFichier As String, _
Col As Integer, MaValeur As Variant) As Integer
Dim Wk As Workbook

Debug.Print "avant"
Set Wk = Workbooks.Open(NomFichier)
With Wk.Worksheets("Données floraison")
' .Range(.....).....
End With
Debug.Print "apres"
'Je n'ai pas vraiment compris ce que tu voulais faire !

getLastRowNumberWithValue = -1
first = 5
i = Cells(65535, colonne).End(xlUp).Row
Debug.Print "last row : ", i
Do While getLastRowNumberWithValue = -1 And i >= first
Debug.Print "i = ", i, " cell value = ", Cells(i, colonne)
If valeur = Cells(i, colonne) Then getLastRowNumberWithValue
i



i = i - 1
Loop

End Function

--------------------------------------------------------------
l'output de la fenetre d'execution :

--------------------------------------------------------------

avant

--------------------------------------------------------------

Ca bloque donc toujours pendant l'ouverture du workbook ou lors de
la




selection de la worksheet ...

En fait ce que je veux faire :

j'ai un ensemble de successions de valeurs prises a des moments
differents


et se rapportant a des objets differents les objets sont identifiés
dans



une
colonne par les chiffres 1, 2, ... 9 (en colonne 3) et chaque ligne
correspond a un ensemble de mesures sur cet objet prises a une
date-heure


donnée. Les dates les + recentes sont situées les + bas dans la
feuille.



Donc je veux acceder a la ligne contenant les valeurs les + recentes
pour


un
objet donné.
Je donne donc comme argument le numero de l'objet et je vais
rechercher



la
ligne la + basse dans la feuille donc la + recente pour cet objet
(l'argument MaValeur)

J'espère que c'est clair ;-)

Merci

Lo



















Avatar
lo
Re Francois,

Désolé, je m'étais trompé de prénom (il y a un post de patrick juste en
dessous).
Je viens d'essayer. J'ai mis un debug.print du workbook et un debug.print du
workbook.name :

Debug.Print "Workbook : ", Wk
Debug.Print "Workbook name : ", Wk.Name

et je reçois en output :

Workbook :


Et c'est tout ! Le deuxieme Debug.print est bypassé et le premier est
affiché mais comme le workbook est évalué a Nothing, rien ne s'affiche comme
valeur...



"Frédéric Sigonneau" wrote in message
news:
Re François,

As-tu essayé ?

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !


Bonjour Patrick,

Oui c'est vrai mais comme mon workbook est evalué à "Nothing", je ne
pense


pas que ca marcherait de toutes manieres et la suite du deroulement de
la


fonction tend a le montrer ...

Lo

"Frédéric Sigonneau" wrote in message
news:%

Bonjour,

Juste un mot sur l'erreur que tu signales dans ce post. Si le fichier
que




tu

essayes d'ouvrir ("C:excelstats.xls") existe bien à l'endroit indiqué,


pour

afficher son nom tu dois plutôt utiliser :

Debug.Print "Workbook name : ", wb.Name

wb est une variable qui représente l'objet classeur avec toutes ses


propriétés

et tu dois indiquer quelle propriété t'intéresse (il n'y a pas pour un


classeur

de propriété par défaut).

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !



Bonjour a tous ;-)

J'essaie vainement d'aller chercher des valeurs dans un fichier excel a
partir d'un autre fichier excel en vba mais je n'arrive pas a ouvrir
convenablement le workbook en question ... Je dois surement faire une



erreur

quelque part mais je ne vois vraiment pas ou ... Ah oui, je suis
nouveau





en

vba donc veuillez etre indulgents ;-)
Voici mon code :

---------------------------------------------------------------------

Function getLastRowNumberWithValue(colonne, valeur) As Integer
Debug.Print "in Function 2"
wbk = "C:excelstats.xls"
Debug.Print "opening workbook : ", wbk
Set wb = Workbooks.Open(wbk)
Debug.Print "after workbook open"
Debug.Print "Workbook name : ", wb
Set donnees = wb.Worksheets("Données floraison")
Debug.Print "after donnees select"
getLastRowNumberWithValue = -1
first = 5
i = donnees.Cells(65535, colonne).End(xlUp).Row
Debug.Print "last row : ", i
Do While getLastRowNumberWithValue = -1 And i >= first
Debug.Print "i = ", i, " cell value = ", donnees.Cells(i,



colonne)

If valeur = donnees.Cells(i, colonne) Then



getLastRowNumberWithValue

= i
i = i - 1
Loop

End Function

---------------------------------------------------------------------

Et voici l'output dans la fenetre d'execution :

---------------------------------------------------------------------

in Function 2
opening workbook : C:excelstats.xls
after workbook open
Workbook name :

---------------------------------------------------------------------

De plus lorsque j'installe un espion pour verifier la valeur de wb, je



vois

la valeur "nothing". Il semblerait donc que le workbook ne soit pas



chargé

correctement et que la fonction s'arrete juste après...

Qqun aurait-il des idées ?

Merci beaucoup

Lo













Avatar
lo
salut michDenis,

Ma version d'excel : Microsoft Excel 2002 (10.2614.2625)
Je suppose qu'il y a quand meme moyen de faire un workbook.open avec cette
version ??!!
Pour ta remarque quant a ma fonction... Quand je programme, j'aime bien me
faire un petit set de fonctions qui font des operations simples et les
imbriquer les unes dans les autres pour faire des operations de plus en plus
compliquées ... Dans mon esprit, c'est plus clair en tous cas.
J'ai fait la modif pour le Long mais le probleme ne se situe pas là,
presentement.

Bon je sais plus trop quoi faire là ... Ca me depasse ce workbooks.open qui
marche pas !

Merci

Lo

"michdenis" wrote in message
news:
Bonjour Lo,

(Les tests sont effectués à partir d'excel 2003)

Ça ne devrait causer aucun problème, si les variables dont dûment
renseignées. Cela étant dit, Je ne vois pas ce que cette

fonction ajoute à ton programme si ce n'est que t'emmêler les pinceaux.
A la procédure que je t'ai soumise, il faudait que tu fasses une légère
modification à la ligne de déclaration. Moi, je n'ai

fait qu,un copier-coller d'une section de ta procédure, mais en fait, la
procédure peut retourner une valeur qui dépasse la

capacité d'une Variable Integer ... le nombre de lignes dans un classeur
est de 65536 et la capacité maximale d'une variable

Integer est de 32800 environ ...

En conséquence, modifie l'appel de la fonction comme ceci :

Remplace Integer par Long


Function getLastRowNumberWithValue(NomFichier As String, _
Col As Integer, MaValeur As Variant) As Long

P.S. Je le répète, tu dois avoir au moins une version 2002 pour excéuter
cette procédure. As-tu fais les mises à jour ?



Salutations!



"lo" a écrit dans le message de
news:

Voila, j'ai essayé avec un fichier tout simple, ca fait pareil

Petite question : est-ce que le probleme pourrait venir du fait que je
fais

appel a cette fonction via une autre fonction que j'appelle directement
dans

une cellule excel ?

dans la cellule : getLastProdEstimate(1)

voila la fonction :

Function getLastProdEstimate(terrain As Integer)
Debug.Print "in Function"
Dim r As Variant
r = getLastRowNumberWithValue("c:excelstats.xls", 3, terrain)
'getLastProdEstimate = Cells(r, 14).value
Debug.Print "ligne : ", r
'Debug.Print "getLastProdEstimate : ", getLastProdEstimate
End Function

la ligne (r) est apparemment evaluee a 0 (ce qui est bien entendu faux)

Merci

Lo

"lo" wrote in message
news:
Bonjour michDenis,

Malheureusement, ca ne fonctionne toujours pas ... La fonction ne se
bloque

plus comme avant mais la valeur Recherche est "non disponible"
J'ai rajouté des espions et voici les valeurs que j'obtiens a la ligne
de


code "getLastRowNumberWithValue = Cherche" :

Cherche "Non Disponible"
Ligne Vide
Wk Nothing

Merci

Lo

PS: je vais essayer avec un fichier excel tout simple pour voir si c'est
le

fichier qui pose probleme

"michdenis" wrote in message
news:
Bonjour Lo,

Ceci devrait faire ton bonheur,

'-----------------------------
Sub OuvrirFichier()
Dim Ligne As Variant
Ligne = getLastRowNumberWithValue("C:excelAdo ado.xls", 3, 10)
MsgBox Ligne
End Sub
'-----------------------------
Function getLastRowNumberWithValue(NomFichier As String, _
Col As Integer, MaValeur As Variant) As Integer

Dim Wk As Workbook, Ligne As Variant
Dim Cherche As Variant

On Error Resume Next
Set Wk = Workbooks.Open(NomFichier)
With Wk.Worksheets("Données floraison")
Ligne = .Columns(Col).Find(MaValeur, , xlFormulas, _
xlWhole, xlByColumns, xlPrevious).Row
If Err = 0 Then
Cherche = Ligne
Else
Err = 0
Cherche = "Non Disponble"
End If
End With
getLastRowNumberWithValue = Cherche

End Function
'-----------------------------


Salutations!




"lo" a écrit dans le message de
news:

En fait je veux que la fonction retourne le numero de ligne concerné.
Parce que je veux pouvoir m'en servir une seule fois et aller chercher
les


infos dans la ligne apres en fonction des besoins (pour des raisons
d'efficacité, de rapidité).
C'est sympa de m'aider pour la fonction mais en fait là où ca coince,
c'est

au chargement du fichier je pense ...
Petite question, tu écris :
getLastRowNumberWithValue "C:excelstats.xls", 25, 10
je suppose que ca équivaut a :
getLastRowNumberWithValue("C:excelstats.xls", 25, 10) <--- c'est ce
que


moi j'écris

Pour répondre a tes questions, il n'y a aucune colonne a déterminer.
On



ne
s'occupe ici que de la colonne qui contient les numéros
identificateurs



d'objets (la colonne 3 dans mon cas).
Une fois que j'aurai déterminé la ligne en question (=r), je ferai
Cells(r,colStatAtraiter).Value pour aller chercher la valeur qui
m'interesse

en faisant varier colStatAtraiter.
Ca me permettra de gagner en efficacité parce que cette fonction-ci
parcourt

quand meme un tableau et ca sert a rien de le faire plusieurs fois si
on



n'en a pas le besoin.

Merci !

Lo

PS: On Error Resume Next ca fonctionne comment exactement ?
PPS : la fonction Columns(Col).Find(...), elle fonctionne comment ?
Elle



va
bien du bas vers le haut (via le parametre xlPrevious) ?

"michdenis" wrote in message
news:%
Bonjour Lo,

Voici une ébauche,


Il y a juste un tout petit problème ...

Qu'est-ce que tu cherches ? La fonction doit te retourner quoi ? La
date


, le chiffre , la valeur ?
Lorsque la fonction a trouvé la dernière ligne pour une valeur
précise,


dans quelle colonne l'information de la fonction se
trouve-t-elle ?

'----------------------------------
Sub OuvrirFichier()

getLastRowNumberWithValue "C:excelstats.xls", 25, 10

End Sub

'----------------------------------
Function getLastRowNumberWithValue(NomFichier As String, _
Col As Integer, MaValeur As Variant) As Integer

Dim Wk As Workbook, Ligne As Variant
Dim Cherche As Variant

Dim ColonneÀDéterminer ' à déterminer ???

On Error Resume Next
Set Wk = Workbooks.Open(NomFichier)
With Wk.Worksheets("Données floraison")
Ligne = .Columns(Col).Find(MaValeur, , xlFormulas, _
xlWhole, xlByColumns, xlPrevious).Row
If Err = 0 Then
cherche = .Cells(Ligne, ColonneÀDéterminer)
Else
Err = 0
cherche = "Non Disponble"
End If
End With

getLastRowNumberWithValue = cherche

End Function
'----------------------------------


Salutations!



"lo" a écrit dans le message de
news:

Re MichDenis,

J'ai fait un copier-coller du chemin d'acces au fichier (que j'ai
reprise


dans mon code telle quelle) dans la barre d'adresse de l'explorateur
windows

et le bon fichier s'est ouvert correctement ...
Je ne sais pas si tu as lu jusqu'au bout la dernière réponse que je
t'ai



envoyée mais tout en bas, il y avait une explication de ce que je
recherche

pour ma fonction ... Je copie-colle ci-dessous pour la facilité :

En fait ce que je veux faire :

j'ai un ensemble de successions de valeurs prises a des moments
differents


et se rapportant a des objets differents les objets sont identifiés
dans



une
colonne par les chiffres 1, 2, ... 9 (en colonne 3) et chaque ligne
correspond a un ensemble de mesures sur cet objet prises a une
date-heure


donnée. Les dates les + recentes sont situées les + bas dans la
feuille.



Donc je veux acceder a la ligne contenant les valeurs les + recentes
pour


un
objet donné.
Je donne donc comme argument le numero de l'objet et je vais
rechercher



la
ligne la + basse dans la feuille donc la + recente pour cet objet
(l'argument MaValeur)

J'espère que c'est clair ;-)

Merci

Lo


"michdenis" wrote in message
news:
Bonsoir Lo,

Si ton fichier ne s'ouvre pas c'est tout simplement que tu as une
faute



d'orthographe ou le chemin indiqué n'est pas le bon .

Pour ce qui est de la fonction, comme je n'ai pas compris ce que
tu





voulais faire dans la deuxième section de la fonction, je
n'y ai pas touché et je sais ... l'exécution s'arrête sur une
erreur





!
MAIS le fichier devrait quand même être ouvert !

Si tu as besoin de plus de précision, il faut que tu accompagnes
ta





demande d'une explication quant aux objectifs recherchés
par ta fonction.


Salutations!



"lo" a écrit dans le message de
news:

Salut michdenis,

Tout d'abord merci de passer du temps a m'aider. J'ai appliqué les
modifications que tu faites dans ma fonction mais ca ne passe
toujours




pas
...

------------------------------------------------------------

Function getLastRowNumberWithValue(NomFichier As String, _
Col As Integer, MaValeur As Variant) As Integer
Dim Wk As Workbook

Debug.Print "avant"
Set Wk = Workbooks.Open(NomFichier)
With Wk.Worksheets("Données floraison")
' .Range(.....).....
End With
Debug.Print "apres"
'Je n'ai pas vraiment compris ce que tu voulais faire !

getLastRowNumberWithValue = -1
first = 5
i = Cells(65535, colonne).End(xlUp).Row
Debug.Print "last row : ", i
Do While getLastRowNumberWithValue = -1 And i >= first
Debug.Print "i = ", i, " cell value = ", Cells(i,
colonne)





If valeur = Cells(i, colonne) Then
getLastRowNumberWithValue





i
i = i - 1
Loop

End Function

--------------------------------------------------------------
l'output de la fenetre d'execution :

--------------------------------------------------------------

avant

--------------------------------------------------------------

Ca bloque donc toujours pendant l'ouverture du workbook ou lors de
la




selection de la worksheet ...

En fait ce que je veux faire :

j'ai un ensemble de successions de valeurs prises a des moments
differents


et se rapportant a des objets differents les objets sont
identifiés





dans
une
colonne par les chiffres 1, 2, ... 9 (en colonne 3) et chaque
ligne





correspond a un ensemble de mesures sur cet objet prises a une
date-heure


donnée. Les dates les + recentes sont situées les + bas dans la
feuille.



Donc je veux acceder a la ligne contenant les valeurs les +
recentes





pour
un
objet donné.
Je donne donc comme argument le numero de l'objet et je vais
rechercher



la
ligne la + basse dans la feuille donc la + recente pour cet objet
(l'argument MaValeur)

J'espère que c'est clair ;-)

Merci

Lo
























Avatar
Frédéric Sigonneau
Re,

Alors je déclare forfait. Je n'arrive pas à reproduire ce comportement. Désolé.

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !


Re Francois,

Désolé, je m'étais trompé de prénom (il y a un post de patrick juste en
dessous).
Je viens d'essayer. J'ai mis un debug.print du workbook et un debug.print du
workbook.name :

Debug.Print "Workbook : ", Wk
Debug.Print "Workbook name : ", Wk.Name

et je reçois en output :

Workbook :


Et c'est tout ! Le deuxieme Debug.print est bypassé et le premier est
affiché mais comme le workbook est évalué a Nothing, rien ne s'affiche comme
valeur...



"Frédéric Sigonneau" wrote in message
news:

Re François,

As-tu essayé ?

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !



Bonjour Patrick,

Oui c'est vrai mais comme mon workbook est evalué à "Nothing", je ne



pense

pas que ca marcherait de toutes manieres et la suite du deroulement de



la

fonction tend a le montrer ...

Lo

"Frédéric Sigonneau" wrote in message
news:%


Bonjour,

Juste un mot sur l'erreur que tu signales dans ce post. Si le fichier




que

tu


essayes d'ouvrir ("C:excelstats.xls") existe bien à l'endroit indiqué,


pour


afficher son nom tu dois plutôt utiliser :

Debug.Print "Workbook name : ", wb.Name

wb est une variable qui représente l'objet classeur avec toutes ses


propriétés


et tu dois indiquer quelle propriété t'intéresse (il n'y a pas pour un


classeur


de propriété par défaut).

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !




Bonjour a tous ;-)

J'essaie vainement d'aller chercher des valeurs dans un fichier excel a
partir d'un autre fichier excel en vba mais je n'arrive pas a ouvrir
convenablement le workbook en question ... Je dois surement faire une



erreur


quelque part mais je ne vois vraiment pas ou ... Ah oui, je suis





nouveau

en


vba donc veuillez etre indulgents ;-)
Voici mon code :

---------------------------------------------------------------------

Function getLastRowNumberWithValue(colonne, valeur) As Integer
Debug.Print "in Function 2"
wbk = "C:excelstats.xls"
Debug.Print "opening workbook : ", wbk
Set wb = Workbooks.Open(wbk)
Debug.Print "after workbook open"
Debug.Print "Workbook name : ", wb
Set donnees = wb.Worksheets("Données floraison")
Debug.Print "after donnees select"
getLastRowNumberWithValue = -1
first = 5
i = donnees.Cells(65535, colonne).End(xlUp).Row
Debug.Print "last row : ", i
Do While getLastRowNumberWithValue = -1 And i >= first
Debug.Print "i = ", i, " cell value = ", donnees.Cells(i,



colonne)


If valeur = donnees.Cells(i, colonne) Then



getLastRowNumberWithValue


= i
i = i - 1
Loop

End Function

---------------------------------------------------------------------

Et voici l'output dans la fenetre d'execution :

---------------------------------------------------------------------

in Function 2
opening workbook : C:excelstats.xls
after workbook open
Workbook name :

---------------------------------------------------------------------

De plus lorsque j'installe un espion pour verifier la valeur de wb, je



vois


la valeur "nothing". Il semblerait donc que le workbook ne soit pas



chargé


correctement et que la fonction s'arrete juste après...

Qqun aurait-il des idées ?

Merci beaucoup

Lo

















Avatar
michdenis
Bonjour Lo,

Tu exécutes ta procédure pas à pas. Pour ce faire, tu places ton curseur dans la procédure et tu utilises la touche F8 pour
effectuer la lecture et l'exécution de chaque ligne de code.

Tu observes :

Est-ce que ton classeur ouvre ?

Si oui, Est-ce que la méthode trouve la ligne correspondant à la valeur de l'information recherchée ?
Sinon, Est-ce que la variable "valeur" existe vraiment dans la feuille désignée?
Est-ce que le nom de la feuille où s'effectue la recherche est bien orthographiée ?
Est-ce que la recherche s'effectue dans la bonne plage de cellules ?
.../...

Tu peux au moins indiquer à quel niveau se trouve ton problème.


Salutations!


"lo" a écrit dans le message de news:%
salut michDenis,

Ma version d'excel : Microsoft Excel 2002 (10.2614.2625)
Je suppose qu'il y a quand meme moyen de faire un workbook.open avec cette
version ??!!
Pour ta remarque quant a ma fonction... Quand je programme, j'aime bien me
faire un petit set de fonctions qui font des operations simples et les
imbriquer les unes dans les autres pour faire des operations de plus en plus
compliquées ... Dans mon esprit, c'est plus clair en tous cas.
J'ai fait la modif pour le Long mais le probleme ne se situe pas là,
presentement.

Bon je sais plus trop quoi faire là ... Ca me depasse ce workbooks.open qui
marche pas !

Merci

Lo

"michdenis" wrote in message
news:
Bonjour Lo,

(Les tests sont effectués à partir d'excel 2003)

Ça ne devrait causer aucun problème, si les variables dont dûment
renseignées. Cela étant dit, Je ne vois pas ce que cette

fonction ajoute à ton programme si ce n'est que t'emmêler les pinceaux.
A la procédure que je t'ai soumise, il faudait que tu fasses une légère
modification à la ligne de déclaration. Moi, je n'ai

fait qu,un copier-coller d'une section de ta procédure, mais en fait, la
procédure peut retourner une valeur qui dépasse la

capacité d'une Variable Integer ... le nombre de lignes dans un classeur
est de 65536 et la capacité maximale d'une variable

Integer est de 32800 environ ...

En conséquence, modifie l'appel de la fonction comme ceci :

Remplace Integer par Long


Function getLastRowNumberWithValue(NomFichier As String, _
Col As Integer, MaValeur As Variant) As Long

P.S. Je le répète, tu dois avoir au moins une version 2002 pour excéuter
cette procédure. As-tu fais les mises à jour ?



Salutations!



"lo" a écrit dans le message de
news:

Voila, j'ai essayé avec un fichier tout simple, ca fait pareil

Petite question : est-ce que le probleme pourrait venir du fait que je
fais

appel a cette fonction via une autre fonction que j'appelle directement
dans

une cellule excel ?

dans la cellule : getLastProdEstimate(1)

voila la fonction :

Function getLastProdEstimate(terrain As Integer)
Debug.Print "in Function"
Dim r As Variant
r = getLastRowNumberWithValue("c:excelstats.xls", 3, terrain)
'getLastProdEstimate = Cells(r, 14).value
Debug.Print "ligne : ", r
'Debug.Print "getLastProdEstimate : ", getLastProdEstimate
End Function

la ligne (r) est apparemment evaluee a 0 (ce qui est bien entendu faux)

Merci

Lo

"lo" wrote in message
news:
Bonjour michDenis,

Malheureusement, ca ne fonctionne toujours pas ... La fonction ne se
bloque

plus comme avant mais la valeur Recherche est "non disponible"
J'ai rajouté des espions et voici les valeurs que j'obtiens a la ligne
de


code "getLastRowNumberWithValue = Cherche" :

Cherche "Non Disponible"
Ligne Vide
Wk Nothing

Merci

Lo

PS: je vais essayer avec un fichier excel tout simple pour voir si c'est
le

fichier qui pose probleme

"michdenis" wrote in message
news:
Bonjour Lo,

Ceci devrait faire ton bonheur,

'-----------------------------
Sub OuvrirFichier()
Dim Ligne As Variant
Ligne = getLastRowNumberWithValue("C:excelAdo ado.xls", 3, 10)
MsgBox Ligne
End Sub
'-----------------------------
Function getLastRowNumberWithValue(NomFichier As String, _
Col As Integer, MaValeur As Variant) As Integer

Dim Wk As Workbook, Ligne As Variant
Dim Cherche As Variant

On Error Resume Next
Set Wk = Workbooks.Open(NomFichier)
With Wk.Worksheets("Données floraison")
Ligne = .Columns(Col).Find(MaValeur, , xlFormulas, _
xlWhole, xlByColumns, xlPrevious).Row
If Err = 0 Then
Cherche = Ligne
Else
Err = 0
Cherche = "Non Disponble"
End If
End With
getLastRowNumberWithValue = Cherche

End Function
'-----------------------------


Salutations!




"lo" a écrit dans le message de
news:

En fait je veux que la fonction retourne le numero de ligne concerné.
Parce que je veux pouvoir m'en servir une seule fois et aller chercher
les


infos dans la ligne apres en fonction des besoins (pour des raisons
d'efficacité, de rapidité).
C'est sympa de m'aider pour la fonction mais en fait là où ca coince,
c'est

au chargement du fichier je pense ...
Petite question, tu écris :
getLastRowNumberWithValue "C:excelstats.xls", 25, 10
je suppose que ca équivaut a :
getLastRowNumberWithValue("C:excelstats.xls", 25, 10) <--- c'est ce
que


moi j'écris

Pour répondre a tes questions, il n'y a aucune colonne a déterminer.
On



ne
s'occupe ici que de la colonne qui contient les numéros
identificateurs



d'objets (la colonne 3 dans mon cas).
Une fois que j'aurai déterminé la ligne en question (=r), je ferai
Cells(r,colStatAtraiter).Value pour aller chercher la valeur qui
m'interesse

en faisant varier colStatAtraiter.
Ca me permettra de gagner en efficacité parce que cette fonction-ci
parcourt

quand meme un tableau et ca sert a rien de le faire plusieurs fois si
on



n'en a pas le besoin.

Merci !

Lo

PS: On Error Resume Next ca fonctionne comment exactement ?
PPS : la fonction Columns(Col).Find(...), elle fonctionne comment ?
Elle



va
bien du bas vers le haut (via le parametre xlPrevious) ?

"michdenis" wrote in message
news:%
Bonjour Lo,

Voici une ébauche,


Il y a juste un tout petit problème ...

Qu'est-ce que tu cherches ? La fonction doit te retourner quoi ? La
date


, le chiffre , la valeur ?
Lorsque la fonction a trouvé la dernière ligne pour une valeur
précise,


dans quelle colonne l'information de la fonction se
trouve-t-elle ?

'----------------------------------
Sub OuvrirFichier()

getLastRowNumberWithValue "C:excelstats.xls", 25, 10

End Sub

'----------------------------------
Function getLastRowNumberWithValue(NomFichier As String, _
Col As Integer, MaValeur As Variant) As Integer

Dim Wk As Workbook, Ligne As Variant
Dim Cherche As Variant

Dim ColonneÀDéterminer ' à déterminer ???

On Error Resume Next
Set Wk = Workbooks.Open(NomFichier)
With Wk.Worksheets("Données floraison")
Ligne = .Columns(Col).Find(MaValeur, , xlFormulas, _
xlWhole, xlByColumns, xlPrevious).Row
If Err = 0 Then
cherche = .Cells(Ligne, ColonneÀDéterminer)
Else
Err = 0
cherche = "Non Disponble"
End If
End With

getLastRowNumberWithValue = cherche

End Function
'----------------------------------


Salutations!



"lo" a écrit dans le message de
news:

Re MichDenis,

J'ai fait un copier-coller du chemin d'acces au fichier (que j'ai
reprise


dans mon code telle quelle) dans la barre d'adresse de l'explorateur
windows

et le bon fichier s'est ouvert correctement ...
Je ne sais pas si tu as lu jusqu'au bout la dernière réponse que je
t'ai



envoyée mais tout en bas, il y avait une explication de ce que je
recherche

pour ma fonction ... Je copie-colle ci-dessous pour la facilité :

En fait ce que je veux faire :

j'ai un ensemble de successions de valeurs prises a des moments
differents


et se rapportant a des objets differents les objets sont identifiés
dans



une
colonne par les chiffres 1, 2, ... 9 (en colonne 3) et chaque ligne
correspond a un ensemble de mesures sur cet objet prises a une
date-heure


donnée. Les dates les + recentes sont situées les + bas dans la
feuille.



Donc je veux acceder a la ligne contenant les valeurs les + recentes
pour


un
objet donné.
Je donne donc comme argument le numero de l'objet et je vais
rechercher



la
ligne la + basse dans la feuille donc la + recente pour cet objet
(l'argument MaValeur)

J'espère que c'est clair ;-)

Merci

Lo


"michdenis" wrote in message
news:
Bonsoir Lo,

Si ton fichier ne s'ouvre pas c'est tout simplement que tu as une
faute



d'orthographe ou le chemin indiqué n'est pas le bon .

Pour ce qui est de la fonction, comme je n'ai pas compris ce que
tu





voulais faire dans la deuxième section de la fonction, je
n'y ai pas touché et je sais ... l'exécution s'arrête sur une
erreur





!
MAIS le fichier devrait quand même être ouvert !

Si tu as besoin de plus de précision, il faut que tu accompagnes
ta





demande d'une explication quant aux objectifs recherchés
par ta fonction.


Salutations!



"lo" a écrit dans le message de
news:

Salut michdenis,

Tout d'abord merci de passer du temps a m'aider. J'ai appliqué les
modifications que tu faites dans ma fonction mais ca ne passe
toujours




pas
...

------------------------------------------------------------

Function getLastRowNumberWithValue(NomFichier As String, _
Col As Integer, MaValeur As Variant) As Integer
Dim Wk As Workbook

Debug.Print "avant"
Set Wk = Workbooks.Open(NomFichier)
With Wk.Worksheets("Données floraison")
' .Range(.....).....
End With
Debug.Print "apres"
'Je n'ai pas vraiment compris ce que tu voulais faire !

getLastRowNumberWithValue = -1
first = 5
i = Cells(65535, colonne).End(xlUp).Row
Debug.Print "last row : ", i
Do While getLastRowNumberWithValue = -1 And i >= first
Debug.Print "i = ", i, " cell value = ", Cells(i,
colonne)





If valeur = Cells(i, colonne) Then
getLastRowNumberWithValue





i
i = i - 1
Loop

End Function

--------------------------------------------------------------
l'output de la fenetre d'execution :

--------------------------------------------------------------

avant

--------------------------------------------------------------

Ca bloque donc toujours pendant l'ouverture du workbook ou lors de
la




selection de la worksheet ...

En fait ce que je veux faire :

j'ai un ensemble de successions de valeurs prises a des moments
differents


et se rapportant a des objets differents les objets sont
identifiés





dans
une
colonne par les chiffres 1, 2, ... 9 (en colonne 3) et chaque
ligne





correspond a un ensemble de mesures sur cet objet prises a une
date-heure


donnée. Les dates les + recentes sont situées les + bas dans la
feuille.



Donc je veux acceder a la ligne contenant les valeurs les +
recentes





pour
un
objet donné.
Je donne donc comme argument le numero de l'objet et je vais
rechercher



la
ligne la + basse dans la feuille donc la + recente pour cet objet
(l'argument MaValeur)

J'espère que c'est clair ;-)

Merci

Lo
























Avatar
lo
J'ai défini la procédure :

Sub fillTerrain2()
Cells(5, 5).value = getLastProdEstimate(2)
End Sub

j'ai mis mon curseur sur la procédure ci-dessus et tapé F8
L'exécution semble passer plusieurs fois dans les fonctions
getLastProdEstimate() et getLastRowNumberWithValue(). La dernière fois que
le curseur passe dans getLastRowNumberWithValue(), le workbook est évalué
correctement mais pas les fois d'avant ... Err est toujours différent de 0
et donc Cherche est a chaque fois "Non Disponible" ... Je vais investiguer
un peu plus ce truc bizarre ...

Merci

Lo

"michdenis" wrote in message
news:
Bonjour Lo,

Tu exécutes ta procédure pas à pas. Pour ce faire, tu places ton curseur
dans la procédure et tu utilises la touche F8 pour

effectuer la lecture et l'exécution de chaque ligne de code.

Tu observes :

Est-ce que ton classeur ouvre ?

Si oui, Est-ce que la méthode trouve la ligne correspondant à la valeur de
l'information recherchée ?

Sinon, Est-ce que la variable "valeur" existe vraiment dans la feuille
désignée?

Est-ce que le nom de la feuille où s'effectue la recherche est bien
orthographiée ?

Est-ce que la recherche s'effectue dans la bonne plage de cellules ?
.../...

Tu peux au moins indiquer à quel niveau se trouve ton problème.


Salutations!


"lo" a écrit dans le message de
news:%

salut michDenis,

Ma version d'excel : Microsoft Excel 2002 (10.2614.2625)
Je suppose qu'il y a quand meme moyen de faire un workbook.open avec cette
version ??!!
Pour ta remarque quant a ma fonction... Quand je programme, j'aime bien me
faire un petit set de fonctions qui font des operations simples et les
imbriquer les unes dans les autres pour faire des operations de plus en
plus

compliquées ... Dans mon esprit, c'est plus clair en tous cas.
J'ai fait la modif pour le Long mais le probleme ne se situe pas là,
presentement.

Bon je sais plus trop quoi faire là ... Ca me depasse ce workbooks.open
qui

marche pas !

Merci

Lo

"michdenis" wrote in message
news:
Bonjour Lo,

(Les tests sont effectués à partir d'excel 2003)

Ça ne devrait causer aucun problème, si les variables dont dûment
renseignées. Cela étant dit, Je ne vois pas ce que cette

fonction ajoute à ton programme si ce n'est que t'emmêler les pinceaux.
A la procédure que je t'ai soumise, il faudait que tu fasses une légère
modification à la ligne de déclaration. Moi, je n'ai

fait qu,un copier-coller d'une section de ta procédure, mais en fait, la
procédure peut retourner une valeur qui dépasse la

capacité d'une Variable Integer ... le nombre de lignes dans un classeur
est de 65536 et la capacité maximale d'une variable

Integer est de 32800 environ ...

En conséquence, modifie l'appel de la fonction comme ceci :

Remplace Integer par Long


Function getLastRowNumberWithValue(NomFichier As String, _
Col As Integer, MaValeur As Variant) As Long

P.S. Je le répète, tu dois avoir au moins une version 2002 pour excéuter
cette procédure. As-tu fais les mises à jour ?



Salutations!



"lo" a écrit dans le message de
news:

Voila, j'ai essayé avec un fichier tout simple, ca fait pareil

Petite question : est-ce que le probleme pourrait venir du fait que je
fais

appel a cette fonction via une autre fonction que j'appelle directement
dans

une cellule excel ?

dans la cellule : getLastProdEstimate(1)

voila la fonction :

Function getLastProdEstimate(terrain As Integer)
Debug.Print "in Function"
Dim r As Variant
r = getLastRowNumberWithValue("c:excelstats.xls", 3, terrain)
'getLastProdEstimate = Cells(r, 14).value
Debug.Print "ligne : ", r
'Debug.Print "getLastProdEstimate : ", getLastProdEstimate
End Function

la ligne (r) est apparemment evaluee a 0 (ce qui est bien entendu faux)

Merci

Lo

"lo" wrote in message
news:
Bonjour michDenis,

Malheureusement, ca ne fonctionne toujours pas ... La fonction ne se
bloque

plus comme avant mais la valeur Recherche est "non disponible"
J'ai rajouté des espions et voici les valeurs que j'obtiens a la ligne
de


code "getLastRowNumberWithValue = Cherche" :

Cherche "Non Disponible"
Ligne Vide
Wk Nothing

Merci

Lo

PS: je vais essayer avec un fichier excel tout simple pour voir si
c'est



le
fichier qui pose probleme

"michdenis" wrote in message
news:
Bonjour Lo,

Ceci devrait faire ton bonheur,

'-----------------------------
Sub OuvrirFichier()
Dim Ligne As Variant
Ligne = getLastRowNumberWithValue("C:excelAdo ado.xls", 3, 10)
MsgBox Ligne
End Sub
'-----------------------------
Function getLastRowNumberWithValue(NomFichier As String, _
Col As Integer, MaValeur As Variant) As Integer

Dim Wk As Workbook, Ligne As Variant
Dim Cherche As Variant

On Error Resume Next
Set Wk = Workbooks.Open(NomFichier)
With Wk.Worksheets("Données floraison")
Ligne = .Columns(Col).Find(MaValeur, , xlFormulas, _
xlWhole, xlByColumns, xlPrevious).Row
If Err = 0 Then
Cherche = Ligne
Else
Err = 0
Cherche = "Non Disponble"
End If
End With
getLastRowNumberWithValue = Cherche

End Function
'-----------------------------


Salutations!




"lo" a écrit dans le message de
news:

En fait je veux que la fonction retourne le numero de ligne
concerné.




Parce que je veux pouvoir m'en servir une seule fois et aller
chercher




les
infos dans la ligne apres en fonction des besoins (pour des raisons
d'efficacité, de rapidité).
C'est sympa de m'aider pour la fonction mais en fait là où ca
coince,




c'est
au chargement du fichier je pense ...
Petite question, tu écris :
getLastRowNumberWithValue "C:excelstats.xls", 25, 10
je suppose que ca équivaut a :
getLastRowNumberWithValue("C:excelstats.xls", 25, 10) <--- c'est
ce




que
moi j'écris

Pour répondre a tes questions, il n'y a aucune colonne a déterminer.
On



ne
s'occupe ici que de la colonne qui contient les numéros
identificateurs



d'objets (la colonne 3 dans mon cas).
Une fois que j'aurai déterminé la ligne en question (=r), je ferai
Cells(r,colStatAtraiter).Value pour aller chercher la valeur qui
m'interesse

en faisant varier colStatAtraiter.
Ca me permettra de gagner en efficacité parce que cette fonction-ci
parcourt

quand meme un tableau et ca sert a rien de le faire plusieurs fois
si




on
n'en a pas le besoin.

Merci !

Lo

PS: On Error Resume Next ca fonctionne comment exactement ?
PPS : la fonction Columns(Col).Find(...), elle fonctionne comment ?
Elle



va
bien du bas vers le haut (via le parametre xlPrevious) ?

"michdenis" wrote in message
news:%
Bonjour Lo,

Voici une ébauche,


Il y a juste un tout petit problème ...

Qu'est-ce que tu cherches ? La fonction doit te retourner quoi ?
La





date
, le chiffre , la valeur ?
Lorsque la fonction a trouvé la dernière ligne pour une valeur
précise,


dans quelle colonne l'information de la fonction se
trouve-t-elle ?

'----------------------------------
Sub OuvrirFichier()

getLastRowNumberWithValue "C:excelstats.xls", 25, 10

End Sub

'----------------------------------
Function getLastRowNumberWithValue(NomFichier As String, _
Col As Integer, MaValeur As Variant) As Integer

Dim Wk As Workbook, Ligne As Variant
Dim Cherche As Variant

Dim ColonneÀDéterminer ' à déterminer ???

On Error Resume Next
Set Wk = Workbooks.Open(NomFichier)
With Wk.Worksheets("Données floraison")
Ligne = .Columns(Col).Find(MaValeur, , xlFormulas, _
xlWhole, xlByColumns, xlPrevious).Row
If Err = 0 Then
cherche = .Cells(Ligne, ColonneÀDéterminer)
Else
Err = 0
cherche = "Non Disponble"
End If
End With

getLastRowNumberWithValue = cherche

End Function
'----------------------------------


Salutations!



"lo" a écrit dans le message de
news:

Re MichDenis,

J'ai fait un copier-coller du chemin d'acces au fichier (que j'ai
reprise


dans mon code telle quelle) dans la barre d'adresse de
l'explorateur





windows
et le bon fichier s'est ouvert correctement ...
Je ne sais pas si tu as lu jusqu'au bout la dernière réponse que
je





t'ai
envoyée mais tout en bas, il y avait une explication de ce que je
recherche

pour ma fonction ... Je copie-colle ci-dessous pour la facilité :

En fait ce que je veux faire :

j'ai un ensemble de successions de valeurs prises a des moments
differents


et se rapportant a des objets differents les objets sont
identifiés





dans
une
colonne par les chiffres 1, 2, ... 9 (en colonne 3) et chaque
ligne





correspond a un ensemble de mesures sur cet objet prises a une
date-heure


donnée. Les dates les + recentes sont situées les + bas dans la
feuille.



Donc je veux acceder a la ligne contenant les valeurs les +
recentes





pour
un
objet donné.
Je donne donc comme argument le numero de l'objet et je vais
rechercher



la
ligne la + basse dans la feuille donc la + recente pour cet objet
(l'argument MaValeur)

J'espère que c'est clair ;-)

Merci

Lo


"michdenis" wrote in message
news:
Bonsoir Lo,

Si ton fichier ne s'ouvre pas c'est tout simplement que tu as
une






faute
d'orthographe ou le chemin indiqué n'est pas le bon .

Pour ce qui est de la fonction, comme je n'ai pas compris ce que
tu





voulais faire dans la deuxième section de la fonction, je
n'y ai pas touché et je sais ... l'exécution s'arrête sur une
erreur





!
MAIS le fichier devrait quand même être ouvert !

Si tu as besoin de plus de précision, il faut que tu accompagnes
ta





demande d'une explication quant aux objectifs recherchés
par ta fonction.


Salutations!



"lo" a écrit dans le message de
news:

Salut michdenis,

Tout d'abord merci de passer du temps a m'aider. J'ai appliqué
les






modifications que tu faites dans ma fonction mais ca ne passe
toujours




pas
...

------------------------------------------------------------

Function getLastRowNumberWithValue(NomFichier As String, _
Col As Integer, MaValeur As Variant) As Integer
Dim Wk As Workbook

Debug.Print "avant"
Set Wk = Workbooks.Open(NomFichier)
With Wk.Worksheets("Données floraison")
' .Range(.....).....
End With
Debug.Print "apres"
'Je n'ai pas vraiment compris ce que tu voulais faire !

getLastRowNumberWithValue = -1
first = 5
i = Cells(65535, colonne).End(xlUp).Row
Debug.Print "last row : ", i
Do While getLastRowNumberWithValue = -1 And i >= first
Debug.Print "i = ", i, " cell value = ", Cells(i,
colonne)





If valeur = Cells(i, colonne) Then
getLastRowNumberWithValue





i
i = i - 1
Loop

End Function

--------------------------------------------------------------
l'output de la fenetre d'execution :

--------------------------------------------------------------

avant

--------------------------------------------------------------

Ca bloque donc toujours pendant l'ouverture du workbook ou lors
de






la
selection de la worksheet ...

En fait ce que je veux faire :

j'ai un ensemble de successions de valeurs prises a des moments
differents


et se rapportant a des objets differents les objets sont
identifiés





dans
une
colonne par les chiffres 1, 2, ... 9 (en colonne 3) et chaque
ligne





correspond a un ensemble de mesures sur cet objet prises a une
date-heure


donnée. Les dates les + recentes sont situées les + bas dans la
feuille.



Donc je veux acceder a la ligne contenant les valeurs les +
recentes





pour
un
objet donné.
Je donne donc comme argument le numero de l'objet et je vais
rechercher



la
ligne la + basse dans la feuille donc la + recente pour cet
objet






(l'argument MaValeur)

J'espère que c'est clair ;-)

Merci

Lo





























1 2 3