OVH Cloud OVH Cloud

pb de transfert d'une date de chaque feuille sur la 1ère feuille

12 réponses
Avatar
Antoine76
Bonsoir

Je butte sur le problème suivant (XP - Excel 2000) : à partir de chaque
feuille, je souhaite récupérer la date la plus récente de chaque feuille
située dans la plage K8 à K200 (plage qui ne contient que des dates), et la
transférer sur la colonne H (à partir de la cellule H1) de la 1ère feuille.
Voici ce que j'ai essayé de faire à partir de la fonction Max de Excel, mais
qui bloque.
Dim c As Range, d As Date
With ActiveSheet.Range("H2")
i = 0
For Each f In ActiveWorkbook.Worksheets
Set c = Worksheets(i).Range("K8:K200")
d = Application.WorksheetFunction.Max("A10:A200")
.Offset(i) = d
i = i + 1
Next
End With

Je ne sais pas ce que cela vous évoque (qui soit remédiable, de préférence
!) ?

Merci à tous

Antoine

10 réponses

1 2
Avatar
patrick
Bonjour,

à première vue il faut un objet avec WorksheetFunction
pour la plage de référence
essaye comme ça :
d = Application.WorksheetFunction.Max(range("A10:A200"))

@+
patrick

"Antoine76" a écrit dans le message news:

Bonsoir

Je butte sur le problème suivant (XP - Excel 2000) : à partir de chaque
feuille, je souhaite récupérer la date la plus récente de chaque feuille
située dans la plage K8 à K200 (plage qui ne contient que des dates), et
la

transférer sur la colonne H (à partir de la cellule H1) de la 1ère
feuille.

Voici ce que j'ai essayé de faire à partir de la fonction Max de Excel,
mais

qui bloque.
Dim c As Range, d As Date
With ActiveSheet.Range("H2")
i = 0
For Each f In ActiveWorkbook.Worksheets
Set c = Worksheets(i).Range("K8:K200")
d = Application.WorksheetFunction.Max("A10:A200")
.Offset(i) = d
i = i + 1
Next
End With

Je ne sais pas ce que cela vous évoque (qui soit remédiable, de préférence
!) ?

Merci à tous

Antoine





Avatar
Antoine76
Bonsoir Patrick

Je viens d'essayer, en insérant Range, ce qui me donne :

Dim c As Range, d As Integer
With ActiveSheet.Range("H1")
i = 0
For Each f In ActiveWorkbook.Worksheets
Set c = Worksheets(i).Range("K8:K200")
d Application.WorksheetFunction.Max(Range("A10:A200"))
.Offset(i) = d
i = i + 1
Next
End With

Alors je pense qu'il doit y avoir autre chose qui bloque !

Merci à toi

Antoine


Mais le débogueur bloque sur Set c = Worksheets(i).Range("K8:K200")
"patrick" a écrit dans le message de
news: 43b1629c$
Bonjour,

à première vue il faut un objet avec WorksheetFunction
pour la plage de référence
essaye comme ça :
d = Application.WorksheetFunction.Max(range("A10:A200"))

@+
patrick

"Antoine76" a écrit dans le message news:

Bonsoir

Je butte sur le problème suivant (XP - Excel 2000) : à partir de chaque
feuille, je souhaite récupérer la date la plus récente de chaque feuille
située dans la plage K8 à K200 (plage qui ne contient que des dates), et
la

transférer sur la colonne H (à partir de la cellule H1) de la 1ère
feuille.

Voici ce que j'ai essayé de faire à partir de la fonction Max de Excel,
mais

qui bloque.
Dim c As Range, d As Date
With ActiveSheet.Range("H2")
i = 0
For Each f In ActiveWorkbook.Worksheets
Set c = Worksheets(i).Range("K8:K200")
d Application.WorksheetFunction.Max("A10:A200")
.Offset(i) = d
i = i + 1
Next
End With

Je ne sais pas ce que cela vous évoque (qui soit remédiable, de
préférence


!) ?

Merci à tous

Antoine









Avatar
LSteph
Bonjour Antoine,
Résultat en G nom de feuille en H date Max
'*****
Sub testdate()
Dim wsh As Worksheet, i As Integer
For Each wsh In ActiveWorkbook.Worksheets
i = i + 1
ActiveSheet.Cells(i, 8) = _
Application.WorksheetFunction.Max(wsh.Range("k8:k200"))
ActiveSheet.Cells(i, 7) = wsh.Name
Next
End Sub
'****

'lSteph

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

Bonsoir

Je butte sur le problème suivant (XP - Excel 2000) : à partir de chaque
feuille, je souhaite récupérer la date la plus récente de chaque feuille
située dans la plage K8 à K200 (plage qui ne contient que des dates), et
la
transférer sur la colonne H (à partir de la cellule H1) de la 1ère
feuille.
Voici ce que j'ai essayé de faire à partir de la fonction Max de Excel,
mais
qui bloque.
Dim c As Range, d As Date
With ActiveSheet.Range("H2")
i = 0
For Each f In ActiveWorkbook.Worksheets
Set c = Worksheets(i).Range("K8:K200")
d = Application.WorksheetFunction.Max("A10:A200")
.Offset(i) = d
i = i + 1
Next
End With

Je ne sais pas ce que cela vous évoque (qui soit remédiable, de préférence
!) ?

Merci à tous

Antoine





Avatar
Antoine76
Cela marche parfaitement !

Que dire de plus à part "merci" !

Antoine

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

Bonjour Antoine,
Résultat en G nom de feuille en H date Max
'*****
Sub testdate()
Dim wsh As Worksheet, i As Integer
For Each wsh In ActiveWorkbook.Worksheets
i = i + 1
ActiveSheet.Cells(i, 8) = _
Application.WorksheetFunction.Max(wsh.Range("k8:k200"))
ActiveSheet.Cells(i, 7) = wsh.Name
Next
End Sub
'****

'lSteph

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

Bonsoir

Je butte sur le problème suivant (XP - Excel 2000) : à partir de chaque
feuille, je souhaite récupérer la date la plus récente de chaque feuille
située dans la plage K8 à K200 (plage qui ne contient que des dates), et
la
transférer sur la colonne H (à partir de la cellule H1) de la 1ère
feuille.
Voici ce que j'ai essayé de faire à partir de la fonction Max de Excel,
mais
qui bloque.
Dim c As Range, d As Date
With ActiveSheet.Range("H2")
i = 0
For Each f In ActiveWorkbook.Worksheets
Set c = Worksheets(i).Range("K8:K200")
d = Application.WorksheetFunction.Max("A10:A200")
.Offset(i) = d
i = i + 1
Next
End With

Je ne sais pas ce que cela vous évoque (qui soit remédiable, de
préférence


!) ?

Merci à tous

Antoine









Avatar
LSteph
Si,si "Merci!"
;o)
cela fait plaisir. ..

..si tu ne veux pas du nom de feuille en G
change le numéro de colonne ou enlève ceci:
ActiveSheet.Cells(i, 7) = wsh.Name

Si qqchose t'échappe dans le code demande le, il vaut mieux n'utiliser que
des codes que l'on comprend!

A bientôt.

lSteph


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

Cela marche parfaitement !

Que dire de plus à part "merci" !

Antoine

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

Bonjour Antoine,
Résultat en G nom de feuille en H date Max
'*****
Sub testdate()
Dim wsh As Worksheet, i As Integer
For Each wsh In ActiveWorkbook.Worksheets
i = i + 1
ActiveSheet.Cells(i, 8) = _
Application.WorksheetFunction.Max(wsh.Range("k8:k200"))
ActiveSheet.Cells(i, 7) = wsh.Name
Next
End Sub
'****

'lSteph

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

Bonsoir

Je butte sur le problème suivant (XP - Excel 2000) : à partir de chaque
feuille, je souhaite récupérer la date la plus récente de chaque
feuille
située dans la plage K8 à K200 (plage qui ne contient que des dates),
et
la
transférer sur la colonne H (à partir de la cellule H1) de la 1ère
feuille.
Voici ce que j'ai essayé de faire à partir de la fonction Max de Excel,
mais
qui bloque.
Dim c As Range, d As Date
With ActiveSheet.Range("H2")
i = 0
For Each f In ActiveWorkbook.Worksheets
Set c = Worksheets(i).Range("K8:K200")
d =
Application.WorksheetFunction.Max("A10:A200")
.Offset(i) = d
i = i + 1
Next
End With

Je ne sais pas ce que cela vous évoque (qui soit remédiable, de
préférence


!) ?

Merci à tous

Antoine













Avatar
Antoine76
"dont acte !"

avec mes remerciements encore

Antoine

"LSteph" a écrit dans le message de news:
#
Si,si "Merci!"
;o)
cela fait plaisir. ..

..si tu ne veux pas du nom de feuille en G
change le numéro de colonne ou enlève ceci:
ActiveSheet.Cells(i, 7) = wsh.Name

Si qqchose t'échappe dans le code demande le, il vaut mieux n'utiliser que
des codes que l'on comprend!

A bientôt.

lSteph


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

Cela marche parfaitement !

Que dire de plus à part "merci" !

Antoine

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

Bonjour Antoine,
Résultat en G nom de feuille en H date Max
'*****
Sub testdate()
Dim wsh As Worksheet, i As Integer
For Each wsh In ActiveWorkbook.Worksheets
i = i + 1
ActiveSheet.Cells(i, 8) = _
Application.WorksheetFunction.Max(wsh.Range("k8:k200"))
ActiveSheet.Cells(i, 7) = wsh.Name
Next
End Sub
'****

'lSteph

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

Bonsoir

Je butte sur le problème suivant (XP - Excel 2000) : à partir de
chaque




feuille, je souhaite récupérer la date la plus récente de chaque
feuille
située dans la plage K8 à K200 (plage qui ne contient que des dates),
et
la
transférer sur la colonne H (à partir de la cellule H1) de la 1ère
feuille.
Voici ce que j'ai essayé de faire à partir de la fonction Max de
Excel,




mais
qui bloque.
Dim c As Range, d As Date
With ActiveSheet.Range("H2")
i = 0
For Each f In ActiveWorkbook.Worksheets
Set c = Worksheets(i).Range("K8:K200")
d > >> > Application.WorksheetFunction.Max("A10:A200")
.Offset(i) = d
i = i + 1
Next
End With

Je ne sais pas ce que cela vous évoque (qui soit remédiable, de
préférence


!) ?

Merci à tous

Antoine

















Avatar
Antoine76
Réflexion faite, pourquoi pas , et plus tôt que prévu !

J'ai repris le programme et l'ai adapté plus précisément aux cellules
"cibles" (colonne C au lieu de H en commençant à partir de la 2ème ligne),
adaptation qui n'a pas posée de problème.

Là où la situation est en fait un peu plus complexe; c'est qu'avant ce
morceau de programme que tu m'a débloqué, il y en une autre partie, qui va
rechercher dans toutes ces mêmes feuilles la valeur de la cellule D3 pour
les transférer au préalable sur chacune de ces mêmes cellules. La valeur
contenue dans ces cellules ne peut-être que "En Cours" ou "Soldé". Le
programme que tu m'a débloqué intervient alors seulement pour mettre à la
place, dans ces cellules transférées, la date de fin de l'arrêt de travail
pour le cas où il est "Soldé" (dans le cas où il est toujours "En Cours",
il doit alors uniquement rester "En Cours". Et c'est là que j'ai un autre
petit blocage, car je n'arrive pas à faire passer en VBA la logique de
fusion de ces 2 concepts : si la cellule Di (qui contient la valeur
transférée de la cellule D3 de chaque feuille j du classeur) a la valeur "En
Cours", garder "En Cours" pour valeur ; Sinon (c'est à dire si sa valeur est
égale à "Soldé"), dans ce cas, remplacer "Soldé" par la valeur que la
routine que tu m'as déboguée fournit (date où l'arrêt de travail a été
soldé, c'est à dire la valeur transférée par la routine que tu m'as
débogué). Ci- joint la 1ère et la 2ème partie de programme ; le problème est
que je n'arrive pas les articuler !

PGM N° 1

With ActiveSheet.Range("C2")
i = 0
For Each wsh In ActiveWorkbook.Worksheets
.Offset(i) = wsh.Range("D3")
i = i + 1
Next
End With


PGM N° 2

With ActiveSheet.Range("C2")
i = 0
For Each wsh In ActiveWorkbook.Worksheets
i = i + 1
If ActiveSheet.Cells(i + 1, 3).Value = "En Cours" Then
Else
ActiveSheet.Cells(i + 1, 3) Application.WorksheetFunction.Max(wsh.Range("J8:J200"))
End If
Next
End With

Je ne sais pas si j'ai su exprimer clairement ce que je recherche...
Sinon, j'ai mis le fichier sur Cjoint...
http://cjoint.com/?mBxdznWeEx
Je sais pas si tu vas réussir à comprendre ce que je recherche !

Avec mes remerciements

Antoine

"LSteph" a écrit dans le message de news:
#
Si,si "Merci!"
;o)
cela fait plaisir. ..

..si tu ne veux pas du nom de feuille en G
change le numéro de colonne ou enlève ceci:
ActiveSheet.Cells(i, 7) = wsh.Name

Si qqchose t'échappe dans le code demande le, il vaut mieux n'utiliser que
des codes que l'on comprend!

A bientôt.

lSteph


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

Cela marche parfaitement !

Que dire de plus à part "merci" !

Antoine

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

Bonjour Antoine,
Résultat en G nom de feuille en H date Max
'*****
Sub testdate()
Dim wsh As Worksheet, i As Integer
For Each wsh In ActiveWorkbook.Worksheets
i = i + 1
ActiveSheet.Cells(i, 8) = _
Application.WorksheetFunction.Max(wsh.Range("k8:k200"))
ActiveSheet.Cells(i, 7) = wsh.Name
Next
End Sub
'****

'lSteph

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

Bonsoir

Je butte sur le problème suivant (XP - Excel 2000) : à partir de
chaque




feuille, je souhaite récupérer la date la plus récente de chaque
feuille
située dans la plage K8 à K200 (plage qui ne contient que des dates),
et
la
transférer sur la colonne H (à partir de la cellule H1) de la 1ère
feuille.
Voici ce que j'ai essayé de faire à partir de la fonction Max de
Excel,




mais
qui bloque.
Dim c As Range, d As Date
With ActiveSheet.Range("H2")
i = 0
For Each f In ActiveWorkbook.Worksheets
Set c = Worksheets(i).Range("K8:K200")
d > >> > Application.WorksheetFunction.Max("A10:A200")
.Offset(i) = d
i = i + 1
Next
End With

Je ne sais pas ce que cela vous évoque (qui soit remédiable, de
préférence


!) ?

Merci à tous

Antoine

















Avatar
JB
Bonjour,

Solution tableur (tj à jour)

PJ: http://cjoint.com/?mCh4sad2in

Cas 1:Si les feuilles ont pour nom Feuil1,Feuille2,...

En H1: =MAX(INDIRECT("Feuil"&LIGNE()&"!K8:K20"))

Cas2: Si les feuilles n'ont pas de nom générique, écrire en colonne
L par ex les noms des feuilles:

En M1: =MAX(INDIRECT(L1&"!K8:K20"))

Cordialement JB
Avatar
Antoine76
bonjour JB

Malheureusement, je ne peut pas me tourner vers une formule directe dans la
cellule, car toutes les feuilles ont un nom défini (celui du salarié qui est
en arrêt de travail) et d'autre part, parce que le nombre de feuilles sera
amener à s'accroître avec les futurs arrêts de travail qui arriveront , en
prenant le nom du nouveau salarié en arrêt ; C'est pourquoi je mets ce
programme en Auto_Open pour qu'il actualise à l'ouverture, sur une partie de
la feuille 1( "Sommaire") l'état instantané de toutes les situations dans
les cellules de la colonne C de la 1ère feuille (Date de fin d'arrêt) avec
pour contenu, soit "En Cours" (si la cellule D3 de la feuille i affiche "En
Cours" - résultat déjà issu d'une formule), soit une date que je vais
rechercher par la formule en VBA Max de J8 à J25 de la feuille i de l'arrêt
de travail considéré.

Pas très simple à expliquer !


ci-joint le code où je bloque ...

With ActiveSheet.Range("C2")
i = 0
For Each wsh In ActiveWorkbook.Worksheets
i = i + 1
With wsh.Cells(3, 4)
If .Value = "En Cours" Then
ActiveSheet.Cells(i + 1, 3) = "En cours"
Else
ActiveSheet.Cells(i + 1, 3) Application.WorksheetFunction.Max(wsh.Range("J8:J200"))
End If
End With
Next
End With

Merci à toi

Antoine

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

Bonjour,

Solution tableur (tj à jour)

PJ: http://cjoint.com/?mCh4sad2in

Cas 1:Si les feuilles ont pour nom Feuil1,Feuille2,...

En H1: =MAX(INDIRECT("Feuil"&LIGNE()&"!K8:K20"))

Cas2: Si les feuilles n'ont pas de nom générique, écrire en colonne
L par ex les noms des feuilles:

En M1: =MAX(INDIRECT(L1&"!K8:K20"))

Cordialement JB
Avatar
LSteph
Bonjour Antoine,
Il semble pouvoir être quelque peu épuré aussi toutes les suppressions au
début
et remises ensuite de formatsmais je ne m'intéresserais ici qu'à l'objet du
fil,
moyennant également que les variables sont déjà déclarées en haut
Alors après ceci
' sélectionne la cellule B1 de la feuille "Sommaire"
Sheets("Sommaire").Select
et avant cela


For Each H In Worksheets("Sommaire").Hyperlinks
je te propose donc de remplacer toute la série de boucles successives par



ceci:
''''''
For Each wsh In ActiveWorkbook.Sheets
i = i + 1

ActiveSheet.Hyperlinks.Add Anchor:Îlls(i + 1, 1), Address:="", _
SubAddress:="'" & wsh.Name & "'" & "!A1", TextToDisplay:=wsh.Name
Cells(i + 1, 2) = wsh.Range("B8")
Cells(i + 1, 3) = wsh.Range("D3")
If Not LCase(Cells(i + 1, 3)) Like "en cours" Then Cells(i + 1, 3) = _
Application.WorksheetFunction.Max(wsh.Range("J8:J200"))
Cells(i + 1, 4) = wsh.Range("c2")
Next
'''''
''dis moi si cela convient
'lSteph




"Antoine76" a écrit dans le message de news:
%
Réflexion faite, pourquoi pas , et plus tôt que prévu !

J'ai repris le programme et l'ai adapté plus précisément aux cellules
"cibles" (colonne C au lieu de H en commençant à partir de la 2ème ligne),
adaptation qui n'a pas posée de problème.

Là où la situation est en fait un peu plus complexe; c'est qu'avant ce
morceau de programme que tu m'a débloqué, il y en une autre partie, qui va
rechercher dans toutes ces mêmes feuilles la valeur de la cellule D3 pour
les transférer au préalable sur chacune de ces mêmes cellules. La valeur
contenue dans ces cellules ne peut-être que "En Cours" ou "Soldé". Le
programme que tu m'a débloqué intervient alors seulement pour mettre à la
place, dans ces cellules transférées, la date de fin de l'arrêt de travail
pour le cas où il est "Soldé" (dans le cas où il est toujours "En Cours",
il doit alors uniquement rester "En Cours". Et c'est là que j'ai un autre
petit blocage, car je n'arrive pas à faire passer en VBA la logique de
fusion de ces 2 concepts : si la cellule Di (qui contient la valeur
transférée de la cellule D3 de chaque feuille j du classeur) a la valeur
"En
Cours", garder "En Cours" pour valeur ; Sinon (c'est à dire si sa valeur
est
égale à "Soldé"), dans ce cas, remplacer "Soldé" par la valeur que la
routine que tu m'as déboguée fournit (date où l'arrêt de travail a été
soldé, c'est à dire la valeur transférée par la routine que tu m'as
débogué). Ci- joint la 1ère et la 2ème partie de programme ; le problème
est
que je n'arrive pas les articuler !

PGM N° 1

With ActiveSheet.Range("C2")
i = 0
For Each wsh In ActiveWorkbook.Worksheets
.Offset(i) = wsh.Range("D3")
i = i + 1
Next
End With


PGM N° 2

With ActiveSheet.Range("C2")
i = 0
For Each wsh In ActiveWorkbook.Worksheets
i = i + 1
If ActiveSheet.Cells(i + 1, 3).Value = "En Cours" Then
Else
ActiveSheet.Cells(i + 1, 3) > Application.WorksheetFunction.Max(wsh.Range("J8:J200"))
End If
Next
End With

Je ne sais pas si j'ai su exprimer clairement ce que je recherche...
Sinon, j'ai mis le fichier sur Cjoint...
http://cjoint.com/?mBxdznWeEx
Je sais pas si tu vas réussir à comprendre ce que je recherche !

Avec mes remerciements

Antoine

"LSteph" a écrit dans le message de news:
#
Si,si "Merci!"
;o)
cela fait plaisir. ..

..si tu ne veux pas du nom de feuille en G
change le numéro de colonne ou enlève ceci:
ActiveSheet.Cells(i, 7) = wsh.Name

Si qqchose t'échappe dans le code demande le, il vaut mieux n'utiliser
que
des codes que l'on comprend!

A bientôt.

lSteph


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

Cela marche parfaitement !

Que dire de plus à part "merci" !

Antoine

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

Bonjour Antoine,
Résultat en G nom de feuille en H date Max
'*****
Sub testdate()
Dim wsh As Worksheet, i As Integer
For Each wsh In ActiveWorkbook.Worksheets
i = i + 1
ActiveSheet.Cells(i, 8) = _
Application.WorksheetFunction.Max(wsh.Range("k8:k200"))
ActiveSheet.Cells(i, 7) = wsh.Name
Next
End Sub
'****

'lSteph

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

Bonsoir

Je butte sur le problème suivant (XP - Excel 2000) : à partir de
chaque




feuille, je souhaite récupérer la date la plus récente de chaque
feuille
située dans la plage K8 à K200 (plage qui ne contient que des
dates),
et
la
transférer sur la colonne H (à partir de la cellule H1) de la 1ère
feuille.
Voici ce que j'ai essayé de faire à partir de la fonction Max de
Excel,




mais
qui bloque.
Dim c As Range, d As Date
With ActiveSheet.Range("H2")
i = 0
For Each f In ActiveWorkbook.Worksheets
Set c = Worksheets(i).Range("K8:K200")
d >> >> > Application.WorksheetFunction.Max("A10:A200")
.Offset(i) = d
i = i + 1
Next
End With

Je ne sais pas ce que cela vous évoque (qui soit remédiable, de
préférence


!) ?

Merci à tous

Antoine





















1 2