pb de transfert d'une date de chaque feuille sur la 1ère feuille
12 réponses
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
!) ?
Re, bonjour, outre le fait que en amont de ce fil j'ai essayé de faire selon ta demande par macro, il est clair que sur le principe JB a parfaitement raison, par formule l'utilisation de indirect serait tout a fait appropriée ici et possiblement moins lourde comme solution.
Malheureusement, je ne peut pas me tourner vers une formule directe dans la cellule, car toutes les feuilles ont un nom défini Rien empêche de laisser en macro l'inventaire des noms de feuilles dans une
colonne. En plus tu n'aurais plus besoin de triturer à chaque fois les formats par macro mettre une MEFC pour délimiter le tableau, le cas échéant. Par ailleurs le recours ici à un auto_open n'est pas forcément la bonne solution: -déjà le cas échéant amha préférable une private sub Workbook_open() dans le thisworkbook - de plus la nécessité de mettre à jour sommaire semble plutôt relever de l'ajout et/ou la mise à jour de feuilles correspondant à un salarié (si j'ai bien compris!). Donc auto open pas vraiment indispensable, plutôt un moyen de mise à jour à la demande ou sur un autre évènement.
Mais c'est toi qui vois
Amicalement.
lSteph
"Antoine76" a écrit dans le message de news: %
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
Re, bonjour,
outre le fait que en amont de ce fil j'ai essayé de faire selon ta demande
par macro,
il est clair que sur le principe JB a parfaitement raison, par formule
l'utilisation de indirect serait tout a fait appropriée ici et possiblement
moins lourde comme solution.
Malheureusement, je ne peut pas me tourner vers une formule directe dans
la
cellule, car toutes les feuilles ont un nom défini
Rien empêche de laisser en macro l'inventaire des noms de feuilles dans une
colonne.
En plus tu n'aurais plus besoin de triturer à chaque fois les formats par
macro
mettre une MEFC pour délimiter le tableau, le cas échéant.
Par ailleurs le recours ici à un auto_open n'est pas forcément la bonne
solution:
-déjà le cas échéant amha préférable une private sub Workbook_open()
dans le thisworkbook
- de plus la nécessité de mettre à jour sommaire semble plutôt relever de
l'ajout et/ou
la mise à jour de feuilles correspondant à un salarié (si j'ai bien
compris!).
Donc auto open pas vraiment indispensable,
plutôt un moyen de mise à jour à la demande ou sur un autre évènement.
Mais c'est toi qui vois
Amicalement.
lSteph
"Antoine76" <awerel@mageos.com> a écrit dans le message de news:
%23PovMR5CGHA.984@tk2msftngp13.phx.gbl...
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" <boisgontier@hotmail.com> a écrit dans le message de news:
1135753053.628932.301950@g44g2000cwa.googlegroups.com...
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:
Re, bonjour, outre le fait que en amont de ce fil j'ai essayé de faire selon ta demande par macro, il est clair que sur le principe JB a parfaitement raison, par formule l'utilisation de indirect serait tout a fait appropriée ici et possiblement moins lourde comme solution.
Malheureusement, je ne peut pas me tourner vers une formule directe dans la cellule, car toutes les feuilles ont un nom défini Rien empêche de laisser en macro l'inventaire des noms de feuilles dans une
colonne. En plus tu n'aurais plus besoin de triturer à chaque fois les formats par macro mettre une MEFC pour délimiter le tableau, le cas échéant. Par ailleurs le recours ici à un auto_open n'est pas forcément la bonne solution: -déjà le cas échéant amha préférable une private sub Workbook_open() dans le thisworkbook - de plus la nécessité de mettre à jour sommaire semble plutôt relever de l'ajout et/ou la mise à jour de feuilles correspondant à un salarié (si j'ai bien compris!). Donc auto open pas vraiment indispensable, plutôt un moyen de mise à jour à la demande ou sur un autre évènement.
Mais c'est toi qui vois
Amicalement.
lSteph
"Antoine76" a écrit dans le message de news: %
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
Antoine76
Je viens de l'installer : C'est clair, c'est simple (quand on le lit!), et ça fonctionne net et sans bavure ! Que dire de plus, si ce n'est que c'est exactement ce que j'attendais, et que j'aurais bien voulu le "pondre" tout seul (reste de fierté sans doute), et enfin que je ne connaissais pas l'usage de If Not ...Like et que.... Merci(bis ou plutôt tiers!)
Antoine
"LSteph" a écrit dans le message de news:
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
Je viens de l'installer : C'est clair, c'est simple (quand on le lit!), et
ça fonctionne net et sans bavure !
Que dire de plus, si ce n'est que c'est exactement ce que j'attendais, et
que j'aurais bien voulu le "pondre" tout seul (reste de fierté sans doute),
et enfin que je ne connaissais pas l'usage de If Not ...Like et que....
Merci(bis ou plutôt tiers!)
Antoine
"LSteph" <lecocosteph@frite.fr> a écrit dans le message de news:
uNq7fW5CGHA.2908@TK2MSFTNGP09.phx.gbl...
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" <awerel@mageos.com> a écrit dans le message de news:
%23tybkKzCGHA.3528@TK2MSFTNGP12.phx.gbl...
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" <lecocosteph@frite.fr> a écrit dans le message de news:
#nmzWwwCGHA.532@TK2MSFTNGP15.phx.gbl...
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" <awerel@mageos.com> a écrit dans le message de news:
u40OFnwCGHA.2912@tk2msftngp13.phx.gbl...
Cela marche parfaitement !
Que dire de plus à part "merci" !
Antoine
"LSteph" <lecocosteph@frite.fr> a écrit dans le message de news:
uqpKjQwCGHA.3820@TK2MSFTNGP12.phx.gbl...
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" <awerel@mageos.com> a écrit dans le message de news:
O8yAjxvCGHA.3856@TK2MSFTNGP12.phx.gbl...
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
Je viens de l'installer : C'est clair, c'est simple (quand on le lit!), et ça fonctionne net et sans bavure ! Que dire de plus, si ce n'est que c'est exactement ce que j'attendais, et que j'aurais bien voulu le "pondre" tout seul (reste de fierté sans doute), et enfin que je ne connaissais pas l'usage de If Not ...Like et que.... Merci(bis ou plutôt tiers!)
Antoine
"LSteph" a écrit dans le message de news:
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