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
pensepas que ca marcherait de toutes manieres et la suite du deroulement de
lafonction 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
quetuessayes d'ouvrir ("C:excelstats.xls") existe bien à l'endroit
indiqué,
pourafficher 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éset tu dois indiquer quelle propriété t'intéresse (il n'y a pas pour un
classeurde 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
erreurquelque part mais je ne vois vraiment pas ou ... Ah oui, je suis
nouveauenvba 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
voisla 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
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" <frederic.sigonneau@phri.fr> wrote in message
news:O9KYCz3hEHA.2340@TK2MSFTNGP11.phx.gbl...
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" <frederic.sigonneau@phri.fr> wrote in message
news:%23Kb9le3hEHA.2812@tk2msftngp13.phx.gbl...
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
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
pensepas que ca marcherait de toutes manieres et la suite du deroulement de
lafonction 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
quetuessayes d'ouvrir ("C:excelstats.xls") existe bien à l'endroit
indiqué,
pourafficher 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éset tu dois indiquer quelle propriété t'intéresse (il n'y a pas pour un
classeurde 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
erreurquelque part mais je ne vois vraiment pas ou ... Ah oui, je suis
nouveauenvba 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
voisla 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
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 poureffectuer 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
pluscompliqué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
quimarche 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 cettefonction 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'aifait qu,un copier-coller d'une section de ta procédure, mais en fait,
la
procédure peut retourner une valeur qui dépasse lacapacité d'une Variable Integer ... le nombre de lignes dans un
classeur
est de 65536 et la capacité maximale d'une variableInteger 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
faisappel a cette fonction via une autre fonction que j'appelle
directement
dansune 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
bloqueplus comme avant mais la valeur Recherche est "non disponible"
J'ai rajouté des espions et voici les valeurs que j'obtiens a la
ligne
decode "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'estlefichier 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
chercherlesinfos 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'estau 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
cequemoi j'écris
Pour répondre a tes questions, il n'y a aucune colonne a
déterminer.
Onnes'occupe ici que de la colonne qui contient les numéros
identificateursd'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'interesseen faisant varier colStatAtraiter.
Ca me permettra de gagner en efficacité parce que cette
fonction-ci
parcourtquand meme un tableau et ca sert a rien de le faire plusieurs fois
sionn'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
?
Ellevabien 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 ?
Ladate, 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 setrouve-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
reprisedans mon code telle quelle) dans la barre d'adresse de
l'explorateurwindowset le bon fichier s'est ouvert correctement ...
Je ne sais pas si tu as lu jusqu'au bout la dernière réponse que
jet'aienvoyée mais tout en bas, il y avait une explication de ce que
je
recherchepour 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
differentset se rapportant a des objets differents les objets sont
identifiésdansunecolonne par les chiffres 1, 2, ... 9 (en colonne 3) et chaque
lignecorrespond a un ensemble de mesures sur cet objet prises a une
date-heuredonnée. Les dates les + recentes sont situées les + bas dans la
feuille.Donc je veux acceder a la ligne contenant les valeurs les +
recentespourunobjet donné.
Je donne donc comme argument le numero de l'objet et je vais
rechercherlaligne 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
unefauted'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
tuvoulais faire dans la deuxième section de la fonction, jen'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
tademande d'une explication quant aux objectifs recherchéspar 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é
lesmodifications que tu faites dans ma fonction mais ca ne passe
toujourspas...
------------------------------------------------------------
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
getLastRowNumberWithValuei
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
delaselection de la worksheet ...
En fait ce que je veux faire :
j'ai un ensemble de successions de valeurs prises a des
moments
differentset se rapportant a des objets differents les objets sont
identifiésdansunecolonne par les chiffres 1, 2, ... 9 (en colonne 3) et chaque
lignecorrespond a un ensemble de mesures sur cet objet prises a une
date-heuredonnée. Les dates les + recentes sont situées les + bas dans
la
feuille.Donc je veux acceder a la ligne contenant les valeurs les +
recentespourunobjet donné.
Je donne donc comme argument le numero de l'objet et je vais
rechercherlaligne la + basse dans la feuille donc la + recente pour cet
objet(l'argument MaValeur)
J'espère que c'est clair ;-)
Merci
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" <michdenis@hotmail.com> wrote in message
news:ewD8f2EiEHA.700@TK2MSFTNGP10.phx.gbl...
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" <lo2301@yahoo.fr> a écrit dans le message de
news:%23NP9Z8DiEHA.1096@TK2MSFTNGP10.phx.gbl...
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" <michdenis@hotmail.com> wrote in message
news:OVPkkE4hEHA.3264@tk2msftngp13.phx.gbl...
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" <lo2301@yahoo.fr> a écrit dans le message de
news:eA4uvq3hEHA.2812@tk2msftngp13.phx.gbl...
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" <lo2301@yahoo.fr> wrote in message
news:O2oxrn3hEHA.3076@tk2msftngp13.phx.gbl...
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" <michdenis@hotmail.com> wrote in message
news:OXQRv0yhEHA.712@TK2MSFTNGP09.phx.gbl...
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" <lo2301@yahoo.fr> a écrit dans le message de
news:eJltgTxhEHA.1392@TK2MSFTNGP11.phx.gbl...
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" <michdenis@hotmail.com> wrote in message
news:%23Un8SIxhEHA.1392@TK2MSFTNGP11.phx.gbl...
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" <lo2301@yahoo.fr> a écrit dans le message de
news:ODFUDvwhEHA.2604@TK2MSFTNGP09.phx.gbl...
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" <michdenis@hotmail.com> wrote in message
news:OkchcnwhEHA.3264@tk2msftngp13.phx.gbl...
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" <lo2301@yahoo.fr> a écrit dans le message de
news:ex6vtewhEHA.356@tk2msftngp13.phx.gbl...
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
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 poureffectuer 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
pluscompliqué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
quimarche 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 cettefonction 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'aifait qu,un copier-coller d'une section de ta procédure, mais en fait,
la
procédure peut retourner une valeur qui dépasse lacapacité d'une Variable Integer ... le nombre de lignes dans un
classeur
est de 65536 et la capacité maximale d'une variableInteger 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
faisappel a cette fonction via une autre fonction que j'appelle
directement
dansune 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
bloqueplus comme avant mais la valeur Recherche est "non disponible"
J'ai rajouté des espions et voici les valeurs que j'obtiens a la
ligne
decode "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'estlefichier 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
chercherlesinfos 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'estau 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
cequemoi j'écris
Pour répondre a tes questions, il n'y a aucune colonne a
déterminer.
Onnes'occupe ici que de la colonne qui contient les numéros
identificateursd'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'interesseen faisant varier colStatAtraiter.
Ca me permettra de gagner en efficacité parce que cette
fonction-ci
parcourtquand meme un tableau et ca sert a rien de le faire plusieurs fois
sionn'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
?
Ellevabien 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 ?
Ladate, 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 setrouve-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
reprisedans mon code telle quelle) dans la barre d'adresse de
l'explorateurwindowset le bon fichier s'est ouvert correctement ...
Je ne sais pas si tu as lu jusqu'au bout la dernière réponse que
jet'aienvoyée mais tout en bas, il y avait une explication de ce que
je
recherchepour 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
differentset se rapportant a des objets differents les objets sont
identifiésdansunecolonne par les chiffres 1, 2, ... 9 (en colonne 3) et chaque
lignecorrespond a un ensemble de mesures sur cet objet prises a une
date-heuredonnée. Les dates les + recentes sont situées les + bas dans la
feuille.Donc je veux acceder a la ligne contenant les valeurs les +
recentespourunobjet donné.
Je donne donc comme argument le numero de l'objet et je vais
rechercherlaligne 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
unefauted'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
tuvoulais faire dans la deuxième section de la fonction, jen'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
tademande d'une explication quant aux objectifs recherchéspar 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é
lesmodifications que tu faites dans ma fonction mais ca ne passe
toujourspas...
------------------------------------------------------------
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
getLastRowNumberWithValuei
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
delaselection de la worksheet ...
En fait ce que je veux faire :
j'ai un ensemble de successions de valeurs prises a des
moments
differentset se rapportant a des objets differents les objets sont
identifiésdansunecolonne par les chiffres 1, 2, ... 9 (en colonne 3) et chaque
lignecorrespond a un ensemble de mesures sur cet objet prises a une
date-heuredonnée. Les dates les + recentes sont situées les + bas dans
la
feuille.Donc je veux acceder a la ligne contenant les valeurs les +
recentespourunobjet donné.
Je donne donc comme argument le numero de l'objet et je vais
rechercherlaligne la + basse dans la feuille donc la + recente pour cet
objet(l'argument MaValeur)
J'espère que c'est clair ;-)
Merci
Lo
Apres avoir réessayé une deuxième fois la meme procédure, le curseur ne
passe qu'une fois dans toutes les fonctions et ca fonctionne impec ! :-)
Je vais voir si le comportement est plus stable maintenant
Merci michDenis ;-)
Lo
"lo" wrote in message
news:%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 poureffectuer 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
del'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
cetteversion ??!!
Pour ta remarque quant a ma fonction... Quand je programme, j'aime
bien
mefaire 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
pluscompliqué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
quimarche 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 cettefonction 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èremodification à la ligne de déclaration. Moi, je n'aifait qu,un copier-coller d'une section de ta procédure, mais en
fait,
laprocédure peut retourner une valeur qui dépasse lacapacité d'une Variable Integer ... le nombre de lignes dans un
classeurest de 65536 et la capacité maximale d'une variableInteger 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éutercette 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
faisappel a cette fonction via une autre fonction que j'appelle
directementdansune 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
bloqueplus comme avant mais la valeur Recherche est "non disponible"
J'ai rajouté des espions et voici les valeurs que j'obtiens a la
lignedecode "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'estlefichier 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
chercherlesinfos dans la ligne apres en fonction des besoins (pour des
raisonsd'efficacité, de rapidité).
C'est sympa de m'aider pour la fonction mais en fait là où ca
coince,c'estau 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
cequemoi j'écris
Pour répondre a tes questions, il n'y a aucune colonne a
déterminer.Onnes'occupe ici que de la colonne qui contient les numéros
identificateursd'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'interesseen faisant varier colStatAtraiter.
Ca me permettra de gagner en efficacité parce que cette
fonction-ciparcourtquand meme un tableau et ca sert a rien de le faire plusieurs
fois
sionn'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
?Ellevabien 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
?
Ladate, 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 setrouve-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'aireprisedans mon code telle quelle) dans la barre d'adresse de
l'explorateurwindowset le bon fichier s'est ouvert correctement ...
Je ne sais pas si tu as lu jusqu'au bout la dernière réponse
que
jet'aienvoyée mais tout en bas, il y avait une explication de ce que
jerecherchepour 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
differentset se rapportant a des objets differents les objets sont
identifiésdansunecolonne par les chiffres 1, 2, ... 9 (en colonne 3) et chaque
lignecorrespond a un ensemble de mesures sur cet objet prises a une
date-heuredonnée. Les dates les + recentes sont situées les + bas dans
la
feuille.Donc je veux acceder a la ligne contenant les valeurs les +
recentespourunobjet donné.
Je donne donc comme argument le numero de l'objet et je vais
rechercherlaligne 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
unefauted'orthographe ou le chemin indiqué n'est pas le bon .
Pour ce qui est de la fonction, comme je n'ai pas compris ce
quetuvoulais faire dans la deuxième section de la fonction, jen'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
accompagnestademande d'une explication quant aux objectifs recherchéspar 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é
lesmodifications que tu faites dans ma fonction mais ca ne
passe
toujourspas...
------------------------------------------------------------
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
getLastRowNumberWithValuei
i = i - 1
Loop
End Function
--------------------------------------------------------------l'output de la fenetre d'execution :
--------------------------------------------------------------
avant
--------------------------------------------------------------
Ca bloque donc toujours pendant l'ouverture du workbook ou
lorsdelaselection de la worksheet ...
En fait ce que je veux faire :
j'ai un ensemble de successions de valeurs prises a des
momentsdifferentset se rapportant a des objets differents les objets sont
identifiésdansunecolonne par les chiffres 1, 2, ... 9 (en colonne 3) et
chaque
lignecorrespond a un ensemble de mesures sur cet objet prises a
une
date-heuredonnée. Les dates les + recentes sont situées les + bas dans
lafeuille.Donc je veux acceder a la ligne contenant les valeurs les +
recentespourunobjet donné.
Je donne donc comme argument le numero de l'objet et je vais
rechercherlaligne la + basse dans la feuille donc la + recente pour cet
objet(l'argument MaValeur)
J'espère que c'est clair ;-)
Merci
Lo
Apres avoir réessayé une deuxième fois la meme procédure, le curseur ne
passe qu'une fois dans toutes les fonctions et ca fonctionne impec ! :-)
Je vais voir si le comportement est plus stable maintenant
Merci michDenis ;-)
Lo
"lo" <lo2301@yahoo.fr> wrote in message
news:%23RladGRiEHA.1356@TK2MSFTNGP09.phx.gbl...
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" <michdenis@hotmail.com> wrote in message
news:ewD8f2EiEHA.700@TK2MSFTNGP10.phx.gbl...
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" <lo2301@yahoo.fr> a écrit dans le message de
news:%23NP9Z8DiEHA.1096@TK2MSFTNGP10.phx.gbl...
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" <michdenis@hotmail.com> wrote in message
news:OVPkkE4hEHA.3264@tk2msftngp13.phx.gbl...
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" <lo2301@yahoo.fr> a écrit dans le message de
news:eA4uvq3hEHA.2812@tk2msftngp13.phx.gbl...
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" <lo2301@yahoo.fr> wrote in message
news:O2oxrn3hEHA.3076@tk2msftngp13.phx.gbl...
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" <michdenis@hotmail.com> wrote in message
news:OXQRv0yhEHA.712@TK2MSFTNGP09.phx.gbl...
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" <lo2301@yahoo.fr> a écrit dans le message de
news:eJltgTxhEHA.1392@TK2MSFTNGP11.phx.gbl...
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" <michdenis@hotmail.com> wrote in message
news:%23Un8SIxhEHA.1392@TK2MSFTNGP11.phx.gbl...
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" <lo2301@yahoo.fr> a écrit dans le message de
news:ODFUDvwhEHA.2604@TK2MSFTNGP09.phx.gbl...
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" <michdenis@hotmail.com> wrote in message
news:OkchcnwhEHA.3264@tk2msftngp13.phx.gbl...
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" <lo2301@yahoo.fr> a écrit dans le message de
news:ex6vtewhEHA.356@tk2msftngp13.phx.gbl...
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
Apres avoir réessayé une deuxième fois la meme procédure, le curseur ne
passe qu'une fois dans toutes les fonctions et ca fonctionne impec ! :-)
Je vais voir si le comportement est plus stable maintenant
Merci michDenis ;-)
Lo
"lo" wrote in message
news:%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 poureffectuer 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
del'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
cetteversion ??!!
Pour ta remarque quant a ma fonction... Quand je programme, j'aime
bien
mefaire 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
pluscompliqué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
quimarche 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 cettefonction 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èremodification à la ligne de déclaration. Moi, je n'aifait qu,un copier-coller d'une section de ta procédure, mais en
fait,
laprocédure peut retourner une valeur qui dépasse lacapacité d'une Variable Integer ... le nombre de lignes dans un
classeurest de 65536 et la capacité maximale d'une variableInteger 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éutercette 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
faisappel a cette fonction via une autre fonction que j'appelle
directementdansune 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
bloqueplus comme avant mais la valeur Recherche est "non disponible"
J'ai rajouté des espions et voici les valeurs que j'obtiens a la
lignedecode "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'estlefichier 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
chercherlesinfos dans la ligne apres en fonction des besoins (pour des
raisonsd'efficacité, de rapidité).
C'est sympa de m'aider pour la fonction mais en fait là où ca
coince,c'estau 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
cequemoi j'écris
Pour répondre a tes questions, il n'y a aucune colonne a
déterminer.Onnes'occupe ici que de la colonne qui contient les numéros
identificateursd'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'interesseen faisant varier colStatAtraiter.
Ca me permettra de gagner en efficacité parce que cette
fonction-ciparcourtquand meme un tableau et ca sert a rien de le faire plusieurs
fois
sionn'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
?Ellevabien 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
?
Ladate, 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 setrouve-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'aireprisedans mon code telle quelle) dans la barre d'adresse de
l'explorateurwindowset le bon fichier s'est ouvert correctement ...
Je ne sais pas si tu as lu jusqu'au bout la dernière réponse
que
jet'aienvoyée mais tout en bas, il y avait une explication de ce que
jerecherchepour 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
differentset se rapportant a des objets differents les objets sont
identifiésdansunecolonne par les chiffres 1, 2, ... 9 (en colonne 3) et chaque
lignecorrespond a un ensemble de mesures sur cet objet prises a une
date-heuredonnée. Les dates les + recentes sont situées les + bas dans
la
feuille.Donc je veux acceder a la ligne contenant les valeurs les +
recentespourunobjet donné.
Je donne donc comme argument le numero de l'objet et je vais
rechercherlaligne 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
unefauted'orthographe ou le chemin indiqué n'est pas le bon .
Pour ce qui est de la fonction, comme je n'ai pas compris ce
quetuvoulais faire dans la deuxième section de la fonction, jen'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
accompagnestademande d'une explication quant aux objectifs recherchéspar 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é
lesmodifications que tu faites dans ma fonction mais ca ne
passe
toujourspas...
------------------------------------------------------------
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
getLastRowNumberWithValuei
i = i - 1
Loop
End Function
--------------------------------------------------------------l'output de la fenetre d'execution :
--------------------------------------------------------------
avant
--------------------------------------------------------------
Ca bloque donc toujours pendant l'ouverture du workbook ou
lorsdelaselection de la worksheet ...
En fait ce que je veux faire :
j'ai un ensemble de successions de valeurs prises a des
momentsdifferentset se rapportant a des objets differents les objets sont
identifiésdansunecolonne par les chiffres 1, 2, ... 9 (en colonne 3) et
chaque
lignecorrespond a un ensemble de mesures sur cet objet prises a
une
date-heuredonnée. Les dates les + recentes sont situées les + bas dans
lafeuille.Donc je veux acceder a la ligne contenant les valeurs les +
recentespourunobjet donné.
Je donne donc comme argument le numero de l'objet et je vais
rechercherlaligne la + basse dans la feuille donc la + recente pour cet
objet(l'argument MaValeur)
J'espère que c'est clair ;-)
Merci
Lo
Apres avoir réessayé, je vois que tout fonctionne parfaitement : le
workbook
est bien ouvert, la feuille active est bien la bonne, la ligne trouvée est
également la bonne mais Err est différent de 0 donc Cherche n'est pas
updaté
à la la valeur de Ligne mais à "non disponible".
Avec un Debug.print, je vois que Err est à 438...
Lo
"lo" wrote in message
news:Apres avoir réessayé une deuxième fois la meme procédure, le curseur ne
passe qu'une fois dans toutes les fonctions et ca fonctionne impec ! :-)
Je vais voir si le comportement est plus stable maintenant
Merci michDenis ;-)
Lo
"lo" wrote in message
news:%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
quele curseur passe dans getLastRowNumberWithValue(), le workbook est
évaluécorrectement mais pas les fois d'avant ... Err est toujours différent
de
0et donc Cherche est a chaque fois "Non Disponible" ... Je vais
investiguerun 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
curseurdans la procédure et tu utilises la touche F8 poureffectuer 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
valeurdel'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
cetteversion ??!!
Pour ta remarque quant a ma fonction... Quand je programme, j'aime
bienmefaire un petit set de fonctions qui font des operations simples et
les
imbriquer les unes dans les autres pour faire des operations de plus
enpluscompliqué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.openquimarche 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 cettefonction 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èremodification à la ligne de déclaration. Moi, je n'aifait qu,un copier-coller d'une section de ta procédure, mais en
fait,laprocédure peut retourner une valeur qui dépasse lacapacité d'une Variable Integer ... le nombre de lignes dans un
classeurest de 65536 et la capacité maximale d'une variableInteger 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éutercette 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
jefaisappel a cette fonction via une autre fonction que j'appelle
directementdansune 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
sebloqueplus comme avant mais la valeur Recherche est "non disponible"
J'ai rajouté des espions et voici les valeurs que j'obtiens a la
lignedecode "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'estlefichier 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
chercherlesinfos dans la ligne apres en fonction des besoins (pour des
raisonsd'efficacité, de rapidité).
C'est sympa de m'aider pour la fonction mais en fait là où ca
coince,c'estau 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'estcequemoi j'écris
Pour répondre a tes questions, il n'y a aucune colonne a
déterminer.Onnes'occupe ici que de la colonne qui contient les numéros
identificateursd'objets (la colonne 3 dans mon cas).
Une fois que j'aurai déterminé la ligne en question (=r), je
feraiCells(r,colStatAtraiter).Value pour aller chercher la valeur
qui
m'interesseen faisant varier colStatAtraiter.
Ca me permettra de gagner en efficacité parce que cette
fonction-ciparcourtquand meme un tableau et ca sert a rien de le faire plusieurs
foissionn'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?Ellevabien 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
?Ladate, le chiffre , la valeur ?Lorsque la fonction a trouvé la dernière ligne pour une
valeurprécise,dans quelle colonne l'information de la fonction setrouve-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'aireprisedans mon code telle quelle) dans la barre d'adresse de
l'explorateurwindowset le bon fichier s'est ouvert correctement ...
Je ne sais pas si tu as lu jusqu'au bout la dernière réponse
quejet'aienvoyée mais tout en bas, il y avait une explication de ce
que
jerecherchepour 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
momentsdifferentset se rapportant a des objets differents les objets sont
identifiésdansunecolonne par les chiffres 1, 2, ... 9 (en colonne 3) et
chaque
lignecorrespond a un ensemble de mesures sur cet objet prises a
une
date-heuredonnée. Les dates les + recentes sont situées les + bas dans
lafeuille.Donc je veux acceder a la ligne contenant les valeurs les +
recentespourunobjet donné.
Je donne donc comme argument le numero de l'objet et je vais
rechercherlaligne 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
asunefauted'orthographe ou le chemin indiqué n'est pas le bon .
Pour ce qui est de la fonction, comme je n'ai pas compris
ce
quetuvoulais faire dans la deuxième section de la fonction, jen'y ai pas touché et je sais ... l'exécution s'arrête sur
uneerreur!MAIS le fichier devrait quand même être ouvert !
Si tu as besoin de plus de précision, il faut que tu
accompagnestademande d'une explication quant aux objectifs recherchéspar 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élesmodifications que tu faites dans ma fonction mais ca ne
passetoujourspas...
------------------------------------------------------------
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
getLastRowNumberWithValuei
i = i - 1
Loop
End Function
--------------------------------------------------------------l'output de la fenetre d'execution :
--------------------------------------------------------------
avant
--------------------------------------------------------------
Ca bloque donc toujours pendant l'ouverture du workbook ou
lorsdelaselection de la worksheet ...
En fait ce que je veux faire :
j'ai un ensemble de successions de valeurs prises a des
momentsdifferentset se rapportant a des objets differents les objets sont
identifiésdansunecolonne par les chiffres 1, 2, ... 9 (en colonne 3) et
chaquelignecorrespond a un ensemble de mesures sur cet objet prises a
unedate-heuredonnée. Les dates les + recentes sont situées les + bas
dans
lafeuille.Donc je veux acceder a la ligne contenant les valeurs les
+
recentespourunobjet donné.
Je donne donc comme argument le numero de l'objet et je
vais
rechercherlaligne la + basse dans la feuille donc la + recente pour
cet
objet(l'argument MaValeur)
J'espère que c'est clair ;-)
Merci
Lo
Apres avoir réessayé, je vois que tout fonctionne parfaitement : le
workbook
est bien ouvert, la feuille active est bien la bonne, la ligne trouvée est
également la bonne mais Err est différent de 0 donc Cherche n'est pas
updaté
à la la valeur de Ligne mais à "non disponible".
Avec un Debug.print, je vois que Err est à 438...
Lo
"lo" <lo2301@yahoo.fr> wrote in message
news:OUAqhQRiEHA.704@TK2MSFTNGP09.phx.gbl...
Apres avoir réessayé une deuxième fois la meme procédure, le curseur ne
passe qu'une fois dans toutes les fonctions et ca fonctionne impec ! :-)
Je vais voir si le comportement est plus stable maintenant
Merci michDenis ;-)
Lo
"lo" <lo2301@yahoo.fr> wrote in message
news:%23RladGRiEHA.1356@TK2MSFTNGP09.phx.gbl...
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" <michdenis@hotmail.com> wrote in message
news:ewD8f2EiEHA.700@TK2MSFTNGP10.phx.gbl...
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" <lo2301@yahoo.fr> a écrit dans le message de
news:%23NP9Z8DiEHA.1096@TK2MSFTNGP10.phx.gbl...
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" <michdenis@hotmail.com> wrote in message
news:OVPkkE4hEHA.3264@tk2msftngp13.phx.gbl...
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" <lo2301@yahoo.fr> a écrit dans le message de
news:eA4uvq3hEHA.2812@tk2msftngp13.phx.gbl...
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" <lo2301@yahoo.fr> wrote in message
news:O2oxrn3hEHA.3076@tk2msftngp13.phx.gbl...
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" <michdenis@hotmail.com> wrote in message
news:OXQRv0yhEHA.712@TK2MSFTNGP09.phx.gbl...
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" <lo2301@yahoo.fr> a écrit dans le message de
news:eJltgTxhEHA.1392@TK2MSFTNGP11.phx.gbl...
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" <michdenis@hotmail.com> wrote in message
news:%23Un8SIxhEHA.1392@TK2MSFTNGP11.phx.gbl...
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" <lo2301@yahoo.fr> a écrit dans le message de
news:ODFUDvwhEHA.2604@TK2MSFTNGP09.phx.gbl...
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" <michdenis@hotmail.com> wrote in message
news:OkchcnwhEHA.3264@tk2msftngp13.phx.gbl...
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" <lo2301@yahoo.fr> a écrit dans le message de
news:ex6vtewhEHA.356@tk2msftngp13.phx.gbl...
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
Apres avoir réessayé, je vois que tout fonctionne parfaitement : le
workbook
est bien ouvert, la feuille active est bien la bonne, la ligne trouvée est
également la bonne mais Err est différent de 0 donc Cherche n'est pas
updaté
à la la valeur de Ligne mais à "non disponible".
Avec un Debug.print, je vois que Err est à 438...
Lo
"lo" wrote in message
news:Apres avoir réessayé une deuxième fois la meme procédure, le curseur ne
passe qu'une fois dans toutes les fonctions et ca fonctionne impec ! :-)
Je vais voir si le comportement est plus stable maintenant
Merci michDenis ;-)
Lo
"lo" wrote in message
news:%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
quele curseur passe dans getLastRowNumberWithValue(), le workbook est
évaluécorrectement mais pas les fois d'avant ... Err est toujours différent
de
0et donc Cherche est a chaque fois "Non Disponible" ... Je vais
investiguerun 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
curseurdans la procédure et tu utilises la touche F8 poureffectuer 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
valeurdel'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
cetteversion ??!!
Pour ta remarque quant a ma fonction... Quand je programme, j'aime
bienmefaire un petit set de fonctions qui font des operations simples et
les
imbriquer les unes dans les autres pour faire des operations de plus
enpluscompliqué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.openquimarche 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 cettefonction 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èremodification à la ligne de déclaration. Moi, je n'aifait qu,un copier-coller d'une section de ta procédure, mais en
fait,laprocédure peut retourner une valeur qui dépasse lacapacité d'une Variable Integer ... le nombre de lignes dans un
classeurest de 65536 et la capacité maximale d'une variableInteger 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éutercette 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
jefaisappel a cette fonction via une autre fonction que j'appelle
directementdansune 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
sebloqueplus comme avant mais la valeur Recherche est "non disponible"
J'ai rajouté des espions et voici les valeurs que j'obtiens a la
lignedecode "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'estlefichier 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
chercherlesinfos dans la ligne apres en fonction des besoins (pour des
raisonsd'efficacité, de rapidité).
C'est sympa de m'aider pour la fonction mais en fait là où ca
coince,c'estau 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'estcequemoi j'écris
Pour répondre a tes questions, il n'y a aucune colonne a
déterminer.Onnes'occupe ici que de la colonne qui contient les numéros
identificateursd'objets (la colonne 3 dans mon cas).
Une fois que j'aurai déterminé la ligne en question (=r), je
feraiCells(r,colStatAtraiter).Value pour aller chercher la valeur
qui
m'interesseen faisant varier colStatAtraiter.
Ca me permettra de gagner en efficacité parce que cette
fonction-ciparcourtquand meme un tableau et ca sert a rien de le faire plusieurs
foissionn'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?Ellevabien 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
?Ladate, le chiffre , la valeur ?Lorsque la fonction a trouvé la dernière ligne pour une
valeurprécise,dans quelle colonne l'information de la fonction setrouve-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'aireprisedans mon code telle quelle) dans la barre d'adresse de
l'explorateurwindowset le bon fichier s'est ouvert correctement ...
Je ne sais pas si tu as lu jusqu'au bout la dernière réponse
quejet'aienvoyée mais tout en bas, il y avait une explication de ce
que
jerecherchepour 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
momentsdifferentset se rapportant a des objets differents les objets sont
identifiésdansunecolonne par les chiffres 1, 2, ... 9 (en colonne 3) et
chaque
lignecorrespond a un ensemble de mesures sur cet objet prises a
une
date-heuredonnée. Les dates les + recentes sont situées les + bas dans
lafeuille.Donc je veux acceder a la ligne contenant les valeurs les +
recentespourunobjet donné.
Je donne donc comme argument le numero de l'objet et je vais
rechercherlaligne 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
asunefauted'orthographe ou le chemin indiqué n'est pas le bon .
Pour ce qui est de la fonction, comme je n'ai pas compris
ce
quetuvoulais faire dans la deuxième section de la fonction, jen'y ai pas touché et je sais ... l'exécution s'arrête sur
uneerreur!MAIS le fichier devrait quand même être ouvert !
Si tu as besoin de plus de précision, il faut que tu
accompagnestademande d'une explication quant aux objectifs recherchéspar 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élesmodifications que tu faites dans ma fonction mais ca ne
passetoujourspas...
------------------------------------------------------------
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
getLastRowNumberWithValuei
i = i - 1
Loop
End Function
--------------------------------------------------------------l'output de la fenetre d'execution :
--------------------------------------------------------------
avant
--------------------------------------------------------------
Ca bloque donc toujours pendant l'ouverture du workbook ou
lorsdelaselection de la worksheet ...
En fait ce que je veux faire :
j'ai un ensemble de successions de valeurs prises a des
momentsdifferentset se rapportant a des objets differents les objets sont
identifiésdansunecolonne par les chiffres 1, 2, ... 9 (en colonne 3) et
chaquelignecorrespond a un ensemble de mesures sur cet objet prises a
unedate-heuredonnée. Les dates les + recentes sont situées les + bas
dans
lafeuille.Donc je veux acceder a la ligne contenant les valeurs les
+
recentespourunobjet donné.
Je donne donc comme argument le numero de l'objet et je
vais
rechercherlaligne la + basse dans la feuille donc la + recente pour
cet
objet(l'argument MaValeur)
J'espère que c'est clair ;-)
Merci
Lo
Ok. J'ai trouvé pourquoi : ca doit etre a cause de mes debug.print qui
faisaient appel a des propriétés non définies sur certains objets... Tout
fonctionne nickel maintenant.
Je vais quand meme rajouter un Err=0 au début de ma méthode.
Encore une fois, merci beaucoup a toi michDenis !
Lo
"lo" wrote in message
news:%Apres avoir réessayé, je vois que tout fonctionne parfaitement : le
workbookest bien ouvert, la feuille active est bien la bonne, la ligne trouvée
est
également la bonne mais Err est différent de 0 donc Cherche n'est pas
updatéà la la valeur de Ligne mais à "non disponible".
Avec un Debug.print, je vois que Err est à 438...
Lo
"lo" wrote in message
news:Apres avoir réessayé une deuxième fois la meme procédure, le curseur
ne
passe qu'une fois dans toutes les fonctions et ca fonctionne impec !
:-)
Je vais voir si le comportement est plus stable maintenant
Merci michDenis ;-)
Lo
"lo" wrote in message
news:%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
quele curseur passe dans getLastRowNumberWithValue(), le workbook est
évaluécorrectement mais pas les fois d'avant ... Err est toujours
différent
de0et donc Cherche est a chaque fois "Non Disponible" ... Je vais
investiguerun 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
curseurdans la procédure et tu utilises la touche F8 poureffectuer 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
valeurdel'information recherchée ?Sinon, Est-ce que la variable "valeur" existe vraiment dans la
feuilledé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
cetteversion ??!!
Pour ta remarque quant a ma fonction... Quand je programme, j'aime
bienmefaire un petit set de fonctions qui font des operations simples et
lesimbriquer les unes dans les autres pour faire des operations de
plus
enpluscompliqué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.openquimarche 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 cettefonction 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èremodification à la ligne de déclaration. Moi, je n'aifait qu,un copier-coller d'une section de ta procédure, mais en
fait,laprocédure peut retourner une valeur qui dépasse lacapacité d'une Variable Integer ... le nombre de lignes dans un
classeurest de 65536 et la capacité maximale d'une variableInteger 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éutercette 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
quejefaisappel a cette fonction via une autre fonction que j'appelle
directementdansune 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
nesebloqueplus comme avant mais la valeur Recherche est "non disponible"
J'ai rajouté des espions et voici les valeurs que j'obtiens a
la
lignedecode "getLastRowNumberWithValue = Cherche" :
Cherche "Non Disponible"
Ligne Vide
Wk Nothing
Merci
Lo
PS: je vais essayer avec un fichier excel tout simple pour
voir
sic'estlefichier 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
chercherlesinfos dans la ligne apres en fonction des besoins (pour des
raisonsd'efficacité, de rapidité).
C'est sympa de m'aider pour la fonction mais en fait là où
ca
coince,c'estau 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'estcequemoi j'écris
Pour répondre a tes questions, il n'y a aucune colonne a
déterminer.Onnes'occupe ici que de la colonne qui contient les numéros
identificateursd'objets (la colonne 3 dans mon cas).
Une fois que j'aurai déterminé la ligne en question (=r), je
feraiCells(r,colStatAtraiter).Value pour aller chercher la valeur
quim'interesseen faisant varier colStatAtraiter.
Ca me permettra de gagner en efficacité parce que cette
fonction-ciparcourtquand meme un tableau et ca sert a rien de le faire
plusieurs
foissionn'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?Ellevabien 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?Ladate, le chiffre , la valeur ?Lorsque la fonction a trouvé la dernière ligne pour une
valeurprécise,dans quelle colonne l'information de la fonction setrouve-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'aireprisedans mon code telle quelle) dans la barre d'adresse de
l'explorateurwindowset le bon fichier s'est ouvert correctement ...
Je ne sais pas si tu as lu jusqu'au bout la dernière
réponse
quejet'aienvoyée mais tout en bas, il y avait une explication de ce
quejerecherchepour 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
momentsdifferentset se rapportant a des objets differents les objets sont
identifiésdansunecolonne par les chiffres 1, 2, ... 9 (en colonne 3) et
chaquelignecorrespond a un ensemble de mesures sur cet objet prises a
unedate-heuredonnée. Les dates les + recentes sont situées les + bas
dans
lafeuille.Donc je veux acceder a la ligne contenant les valeurs les
+
recentespourunobjet donné.
Je donne donc comme argument le numero de l'objet et je
vais
rechercherlaligne 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
asunefauted'orthographe ou le chemin indiqué n'est pas le bon .
Pour ce qui est de la fonction, comme je n'ai pas
compris
cequetuvoulais faire dans la deuxième section de la fonction, jen'y ai pas touché et je sais ... l'exécution s'arrête
sur
uneerreur!MAIS le fichier devrait quand même être ouvert !
Si tu as besoin de plus de précision, il faut que tu
accompagnestademande d'une explication quant aux objectifs recherchéspar 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élesmodifications que tu faites dans ma fonction mais ca ne
passetoujourspas...
------------------------------------------------------------
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
getLastRowNumberWithValuei
i = i - 1
Loop
End Function
--------------------------------------------------------------l'output de la fenetre d'execution :
--------------------------------------------------------------
avant
--------------------------------------------------------------
Ca bloque donc toujours pendant l'ouverture du workbook
ou
lorsdelaselection de la worksheet ...
En fait ce que je veux faire :
j'ai un ensemble de successions de valeurs prises a des
momentsdifferentset se rapportant a des objets differents les objets sont
identifiésdansunecolonne par les chiffres 1, 2, ... 9 (en colonne 3) et
chaquelignecorrespond a un ensemble de mesures sur cet objet prises
a
unedate-heuredonnée. Les dates les + recentes sont situées les + bas
danslafeuille.Donc je veux acceder a la ligne contenant les valeurs
les
+recentespourunobjet donné.
Je donne donc comme argument le numero de l'objet et je
vaisrechercherlaligne la + basse dans la feuille donc la + recente pour
cetobjet(l'argument MaValeur)
J'espère que c'est clair ;-)
Merci
Lo
Ok. J'ai trouvé pourquoi : ca doit etre a cause de mes debug.print qui
faisaient appel a des propriétés non définies sur certains objets... Tout
fonctionne nickel maintenant.
Je vais quand meme rajouter un Err=0 au début de ma méthode.
Encore une fois, merci beaucoup a toi michDenis !
Lo
"lo" <lo2301@yahoo.fr> wrote in message
news:%23FJzuWRiEHA.3664@TK2MSFTNGP12.phx.gbl...
Apres avoir réessayé, je vois que tout fonctionne parfaitement : le
workbook
est bien ouvert, la feuille active est bien la bonne, la ligne trouvée
est
également la bonne mais Err est différent de 0 donc Cherche n'est pas
updaté
à la la valeur de Ligne mais à "non disponible".
Avec un Debug.print, je vois que Err est à 438...
Lo
"lo" <lo2301@yahoo.fr> wrote in message
news:OUAqhQRiEHA.704@TK2MSFTNGP09.phx.gbl...
Apres avoir réessayé une deuxième fois la meme procédure, le curseur
ne
passe qu'une fois dans toutes les fonctions et ca fonctionne impec !
:-)
Je vais voir si le comportement est plus stable maintenant
Merci michDenis ;-)
Lo
"lo" <lo2301@yahoo.fr> wrote in message
news:%23RladGRiEHA.1356@TK2MSFTNGP09.phx.gbl...
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" <michdenis@hotmail.com> wrote in message
news:ewD8f2EiEHA.700@TK2MSFTNGP10.phx.gbl...
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" <lo2301@yahoo.fr> a écrit dans le message de
news:%23NP9Z8DiEHA.1096@TK2MSFTNGP10.phx.gbl...
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" <michdenis@hotmail.com> wrote in message
news:OVPkkE4hEHA.3264@tk2msftngp13.phx.gbl...
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" <lo2301@yahoo.fr> a écrit dans le message de
news:eA4uvq3hEHA.2812@tk2msftngp13.phx.gbl...
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" <lo2301@yahoo.fr> wrote in message
news:O2oxrn3hEHA.3076@tk2msftngp13.phx.gbl...
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" <michdenis@hotmail.com> wrote in message
news:OXQRv0yhEHA.712@TK2MSFTNGP09.phx.gbl...
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" <lo2301@yahoo.fr> a écrit dans le message de
news:eJltgTxhEHA.1392@TK2MSFTNGP11.phx.gbl...
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" <michdenis@hotmail.com> wrote in message
news:%23Un8SIxhEHA.1392@TK2MSFTNGP11.phx.gbl...
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" <lo2301@yahoo.fr> a écrit dans le message de
news:ODFUDvwhEHA.2604@TK2MSFTNGP09.phx.gbl...
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" <michdenis@hotmail.com> wrote in message
news:OkchcnwhEHA.3264@tk2msftngp13.phx.gbl...
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" <lo2301@yahoo.fr> a écrit dans le message de
news:ex6vtewhEHA.356@tk2msftngp13.phx.gbl...
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
Ok. J'ai trouvé pourquoi : ca doit etre a cause de mes debug.print qui
faisaient appel a des propriétés non définies sur certains objets... Tout
fonctionne nickel maintenant.
Je vais quand meme rajouter un Err=0 au début de ma méthode.
Encore une fois, merci beaucoup a toi michDenis !
Lo
"lo" wrote in message
news:%Apres avoir réessayé, je vois que tout fonctionne parfaitement : le
workbookest bien ouvert, la feuille active est bien la bonne, la ligne trouvée
est
également la bonne mais Err est différent de 0 donc Cherche n'est pas
updatéà la la valeur de Ligne mais à "non disponible".
Avec un Debug.print, je vois que Err est à 438...
Lo
"lo" wrote in message
news:Apres avoir réessayé une deuxième fois la meme procédure, le curseur
ne
passe qu'une fois dans toutes les fonctions et ca fonctionne impec !
:-)
Je vais voir si le comportement est plus stable maintenant
Merci michDenis ;-)
Lo
"lo" wrote in message
news:%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
quele curseur passe dans getLastRowNumberWithValue(), le workbook est
évaluécorrectement mais pas les fois d'avant ... Err est toujours
différent
de0et donc Cherche est a chaque fois "Non Disponible" ... Je vais
investiguerun 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
curseurdans la procédure et tu utilises la touche F8 poureffectuer 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
valeurdel'information recherchée ?Sinon, Est-ce que la variable "valeur" existe vraiment dans la
feuilledé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
cetteversion ??!!
Pour ta remarque quant a ma fonction... Quand je programme, j'aime
bienmefaire un petit set de fonctions qui font des operations simples et
lesimbriquer les unes dans les autres pour faire des operations de
plus
enpluscompliqué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.openquimarche 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 cettefonction 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èremodification à la ligne de déclaration. Moi, je n'aifait qu,un copier-coller d'une section de ta procédure, mais en
fait,laprocédure peut retourner une valeur qui dépasse lacapacité d'une Variable Integer ... le nombre de lignes dans un
classeurest de 65536 et la capacité maximale d'une variableInteger 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éutercette 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
quejefaisappel a cette fonction via une autre fonction que j'appelle
directementdansune 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
nesebloqueplus comme avant mais la valeur Recherche est "non disponible"
J'ai rajouté des espions et voici les valeurs que j'obtiens a
la
lignedecode "getLastRowNumberWithValue = Cherche" :
Cherche "Non Disponible"
Ligne Vide
Wk Nothing
Merci
Lo
PS: je vais essayer avec un fichier excel tout simple pour
voir
sic'estlefichier 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
chercherlesinfos dans la ligne apres en fonction des besoins (pour des
raisonsd'efficacité, de rapidité).
C'est sympa de m'aider pour la fonction mais en fait là où
ca
coince,c'estau 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'estcequemoi j'écris
Pour répondre a tes questions, il n'y a aucune colonne a
déterminer.Onnes'occupe ici que de la colonne qui contient les numéros
identificateursd'objets (la colonne 3 dans mon cas).
Une fois que j'aurai déterminé la ligne en question (=r), je
feraiCells(r,colStatAtraiter).Value pour aller chercher la valeur
quim'interesseen faisant varier colStatAtraiter.
Ca me permettra de gagner en efficacité parce que cette
fonction-ciparcourtquand meme un tableau et ca sert a rien de le faire
plusieurs
foissionn'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?Ellevabien 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?Ladate, le chiffre , la valeur ?Lorsque la fonction a trouvé la dernière ligne pour une
valeurprécise,dans quelle colonne l'information de la fonction setrouve-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'aireprisedans mon code telle quelle) dans la barre d'adresse de
l'explorateurwindowset le bon fichier s'est ouvert correctement ...
Je ne sais pas si tu as lu jusqu'au bout la dernière
réponse
quejet'aienvoyée mais tout en bas, il y avait une explication de ce
quejerecherchepour 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
momentsdifferentset se rapportant a des objets differents les objets sont
identifiésdansunecolonne par les chiffres 1, 2, ... 9 (en colonne 3) et
chaquelignecorrespond a un ensemble de mesures sur cet objet prises a
unedate-heuredonnée. Les dates les + recentes sont situées les + bas
dans
lafeuille.Donc je veux acceder a la ligne contenant les valeurs les
+
recentespourunobjet donné.
Je donne donc comme argument le numero de l'objet et je
vais
rechercherlaligne 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
asunefauted'orthographe ou le chemin indiqué n'est pas le bon .
Pour ce qui est de la fonction, comme je n'ai pas
compris
cequetuvoulais faire dans la deuxième section de la fonction, jen'y ai pas touché et je sais ... l'exécution s'arrête
sur
uneerreur!MAIS le fichier devrait quand même être ouvert !
Si tu as besoin de plus de précision, il faut que tu
accompagnestademande d'une explication quant aux objectifs recherchéspar 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élesmodifications que tu faites dans ma fonction mais ca ne
passetoujourspas...
------------------------------------------------------------
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
getLastRowNumberWithValuei
i = i - 1
Loop
End Function
--------------------------------------------------------------l'output de la fenetre d'execution :
--------------------------------------------------------------
avant
--------------------------------------------------------------
Ca bloque donc toujours pendant l'ouverture du workbook
ou
lorsdelaselection de la worksheet ...
En fait ce que je veux faire :
j'ai un ensemble de successions de valeurs prises a des
momentsdifferentset se rapportant a des objets differents les objets sont
identifiésdansunecolonne par les chiffres 1, 2, ... 9 (en colonne 3) et
chaquelignecorrespond a un ensemble de mesures sur cet objet prises
a
unedate-heuredonnée. Les dates les + recentes sont situées les + bas
danslafeuille.Donc je veux acceder a la ligne contenant les valeurs
les
+recentespourunobjet donné.
Je donne donc comme argument le numero de l'objet et je
vaisrechercherlaligne la + basse dans la feuille donc la + recente pour
cetobjet(l'argument MaValeur)
J'espère que c'est clair ;-)
Merci
Lo