J'ai cr=C3=A9=C3=A9 (avec l'aide d'un certain nombre de gourous d'Excel !!!=
) un ficher de gestion de planning atelier.
J'ai donc 12 onglets correspondant aux mois, plus 4 onglets qui ne servent =
qu'=C3=A0 imprimer le planning. Pour des raisons de confidentialit=C3=A9 je=
ne peux joindre le fichier lui-m=C3=AAme, j'ai donc cr=C3=A9=C3=A9 un peti=
t exemple pour comprendre l'organisation des onglets (voir fichier joint : =
https://www.cjoint.com/c/IGFoN0SXsBv .... u=
n petit fichier vaut mieux qu'un long discours !).
Pour automatiser la mise =C3=A0 jour des onglets d'=C3=A9dition, je cherche=
=C3=A0 :
- Trouver dans les onglets "Mois" la date inscrite en B1 (cellule bleue cla=
ir, toujours un lundi), onglet Edition (=C3=A7a je sais faire) puis les lun=
dis suivants (=C3=A7a je sais faire)
- Trouver la plage correspondant aux jours ouvr=C3=A9s autour de cette date=
(et des suivantes) et la s=C3=A9lectionner : =C3=A7a je sais faire MAIS ma=
proc=C3=A9dure plante parfois au changement de mois et je ne vois pas pour=
quoi....
- Une fois cette plage s=C3=A9lectionn=C3=A9e, trouver dans les onglets d'=
=C3=A9dition la date correspondant au premier jour de cette plage, qui serv=
ira de cellule de destination au copier/coller.
Sur le principe, la proc=C3=A9dure fonctionne mais plante parfois et je ne =
vois pas pourquoi....
Si une =C3=A2me charitable avait le courage de jeter un oeil sur mon souci,=
ma reconnaissance lui est acquise !
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
MichD
Bonjour, Je n'ai pas regardé tout le code, mais 2 commentaires à partir de ce que j'ai compris. A ) si tu veux utiliser la même procédure pour toutes les feuilles "Edition", tu devrais modifier ce début de procédure comme cela, car la plage nommée "Date_Réf" fait référence seulement à la feuille "Edition". '--------------------------------- Sub MàJ_Complète() With ActiveSheet If LCase(Left(Trim(.Name), 7)) <> "edition" Then MsgBox "La feuille active n'est pas EDITION...." Exit Sub Else If Weekday(.Range("B1")) <> vbMonday Then ' Sur l'onglet "Edition" MsgBox "La date doit correspondre à un Lundi": Exit Sub End If End If End With '--------------------------------- B ) Si l'objectif de la procédure est de trouver la cellule au nom du mois de la "Date" en B1" de la feuille édition, ceci est suffisant. '--------------------------------------- Function Trouve_Plage(Lundi) 'Cherche la plage à copier dans les onglets mensuels ' On trouve la feuille correspondante Feuille_Mois = Format(Lundi, "mmmm") With Worksheets(Feuille_Mois) Adresse = Application.Match(CLng(Lundi), .Range("A1:BK1"), 0) Set Trouve_Plage = .Cells(1, Adresse) End With End Sub '--------------------------------------- Dans ta procédure, la ligne de code suivante : Adresse = Cells(1, Adresse).Address va pointer vers cette cellule de la feuille visible à l'écran et pas nécessairement sur la feuille où tu as fait ta recherche. par conséquent, Set Trouve_Plage = Range(Adresse) ne représente pas nécessairement la cellule trouvée. MichD Le 31/07/19 à 10:40, ThierryP a écrit :
Bonjour le forum, J'ai créé (avec l'aide d'un certain nombre de gourous d'Excel !!!) un ficher de gestion de planning atelier. J'ai donc 12 onglets correspondant aux mois, plus 4 onglets qui ne servent qu'à imprimer le planning. Pour des raisons de confidentialité je ne peux joindre le fichier lui-même, j'ai donc créé un petit exemple pour comprendre l'organisation des onglets (voir fichier joint : https://www.cjoint.com/c/IGFoN0SXsBv .... un petit fichier vaut mieux qu'un long discours !). Pour automatiser la mise à jour des onglets d'édition, je cherche à : - Trouver dans les onglets "Mois" la date inscrite en B1 (cellule bleue clair, toujours un lundi), onglet Edition (ça je sais faire) puis les lundis suivants (ça je sais faire) - Trouver la plage correspondant aux jours ouvrés autour de cette date (et des suivantes) et la sélectionner : ça je sais faire MAIS ma procédure plante parfois au changement de mois et je ne vois pas pourquoi.... - Une fois cette plage sélectionnée, trouver dans les onglets d'édition la date correspondant au premier jour de cette plage, qui servira de cellule de destination au copier/coller. Sur le principe, la procédure fonctionne mais plante parfois et je ne vois pas pourquoi.... Si une âme charitable avait le courage de jeter un oeil sur mon souci, ma reconnaissance lui est acquise ! Merci d'avance, ThierryP
Bonjour,
Je n'ai pas regardé tout le code, mais 2 commentaires à partir de ce que
j'ai compris.
A ) si tu veux utiliser la même procédure pour toutes les feuilles
"Edition", tu devrais modifier ce début de procédure comme cela, car la
plage nommée "Date_Réf" fait référence seulement à la feuille "Edition".
'---------------------------------
Sub MàJ_Complète()
With ActiveSheet
If LCase(Left(Trim(.Name), 7)) <> "edition" Then
MsgBox "La feuille active n'est pas EDITION...."
Exit Sub
Else
If Weekday(.Range("B1")) <> vbMonday Then
' Sur l'onglet "Edition"
MsgBox "La date doit correspondre à un Lundi": Exit Sub
End If
End If
End With
'---------------------------------
B )
Si l'objectif de la procédure est de trouver la cellule au nom du mois
de la "Date" en B1" de la feuille édition, ceci est suffisant.
'---------------------------------------
Function Trouve_Plage(Lundi) 'Cherche la plage à copier dans les onglets
mensuels
' On trouve la feuille correspondante
Feuille_Mois = Format(Lundi, "mmmm")
With Worksheets(Feuille_Mois)
Adresse = Application.Match(CLng(Lundi), .Range("A1:BK1"), 0)
Set Trouve_Plage = .Cells(1, Adresse)
End With
End Sub
'---------------------------------------
Dans ta procédure, la ligne de code suivante :
Adresse = Cells(1, Adresse).Address
va pointer vers cette cellule de la feuille visible à l'écran et pas
nécessairement sur la feuille où tu as fait ta recherche. par
conséquent, Set Trouve_Plage = Range(Adresse) ne représente pas
nécessairement la cellule trouvée.
MichD
Le 31/07/19 à 10:40, ThierryP a écrit :
Bonjour le forum,
J'ai créé (avec l'aide d'un certain nombre de gourous d'Excel !!!) un ficher de gestion de planning atelier.
J'ai donc 12 onglets correspondant aux mois, plus 4 onglets qui ne servent qu'à imprimer le planning. Pour des raisons de confidentialité je ne peux joindre le fichier lui-même, j'ai donc créé un petit exemple pour comprendre l'organisation des onglets (voir fichier joint : https://www.cjoint.com/c/IGFoN0SXsBv .... un petit fichier vaut mieux qu'un long discours !).
Pour automatiser la mise à jour des onglets d'édition, je cherche à :
- Trouver dans les onglets "Mois" la date inscrite en B1 (cellule bleue clair, toujours un lundi), onglet Edition (ça je sais faire) puis les lundis suivants (ça je sais faire)
- Trouver la plage correspondant aux jours ouvrés autour de cette date (et des suivantes) et la sélectionner : ça je sais faire MAIS ma procédure plante parfois au changement de mois et je ne vois pas pourquoi....
- Une fois cette plage sélectionnée, trouver dans les onglets d'édition la date correspondant au premier jour de cette plage, qui servira de cellule de destination au copier/coller.
Sur le principe, la procédure fonctionne mais plante parfois et je ne vois pas pourquoi....
Si une âme charitable avait le courage de jeter un oeil sur mon souci, ma reconnaissance lui est acquise !
Bonjour, Je n'ai pas regardé tout le code, mais 2 commentaires à partir de ce que j'ai compris. A ) si tu veux utiliser la même procédure pour toutes les feuilles "Edition", tu devrais modifier ce début de procédure comme cela, car la plage nommée "Date_Réf" fait référence seulement à la feuille "Edition". '--------------------------------- Sub MàJ_Complète() With ActiveSheet If LCase(Left(Trim(.Name), 7)) <> "edition" Then MsgBox "La feuille active n'est pas EDITION...." Exit Sub Else If Weekday(.Range("B1")) <> vbMonday Then ' Sur l'onglet "Edition" MsgBox "La date doit correspondre à un Lundi": Exit Sub End If End If End With '--------------------------------- B ) Si l'objectif de la procédure est de trouver la cellule au nom du mois de la "Date" en B1" de la feuille édition, ceci est suffisant. '--------------------------------------- Function Trouve_Plage(Lundi) 'Cherche la plage à copier dans les onglets mensuels ' On trouve la feuille correspondante Feuille_Mois = Format(Lundi, "mmmm") With Worksheets(Feuille_Mois) Adresse = Application.Match(CLng(Lundi), .Range("A1:BK1"), 0) Set Trouve_Plage = .Cells(1, Adresse) End With End Sub '--------------------------------------- Dans ta procédure, la ligne de code suivante : Adresse = Cells(1, Adresse).Address va pointer vers cette cellule de la feuille visible à l'écran et pas nécessairement sur la feuille où tu as fait ta recherche. par conséquent, Set Trouve_Plage = Range(Adresse) ne représente pas nécessairement la cellule trouvée. MichD Le 31/07/19 à 10:40, ThierryP a écrit :
Bonjour le forum, J'ai créé (avec l'aide d'un certain nombre de gourous d'Excel !!!) un ficher de gestion de planning atelier. J'ai donc 12 onglets correspondant aux mois, plus 4 onglets qui ne servent qu'à imprimer le planning. Pour des raisons de confidentialité je ne peux joindre le fichier lui-même, j'ai donc créé un petit exemple pour comprendre l'organisation des onglets (voir fichier joint : https://www.cjoint.com/c/IGFoN0SXsBv .... un petit fichier vaut mieux qu'un long discours !). Pour automatiser la mise à jour des onglets d'édition, je cherche à : - Trouver dans les onglets "Mois" la date inscrite en B1 (cellule bleue clair, toujours un lundi), onglet Edition (ça je sais faire) puis les lundis suivants (ça je sais faire) - Trouver la plage correspondant aux jours ouvrés autour de cette date (et des suivantes) et la sélectionner : ça je sais faire MAIS ma procédure plante parfois au changement de mois et je ne vois pas pourquoi.... - Une fois cette plage sélectionnée, trouver dans les onglets d'édition la date correspondant au premier jour de cette plage, qui servira de cellule de destination au copier/coller. Sur le principe, la procédure fonctionne mais plante parfois et je ne vois pas pourquoi.... Si une âme charitable avait le courage de jeter un oeil sur mon souci, ma reconnaissance lui est acquise ! Merci d'avance, ThierryP
MichD
Si ce n'est pas suffisant, quel est le message d'erreur s'il y en a un? Quelle ligne de code est mise en jaune? MichD
Si ce n'est pas suffisant, quel est le message d'erreur s'il y en a un?
Quelle ligne de code est mise en jaune?
Si ce n'est pas suffisant, quel est le message d'erreur s'il y en a un? Quelle ligne de code est mise en jaune? MichD
ThierryP
Bonjour Denis, Comme toujours tes explications m'ont suffi !!! Et comme toujours, je me su is dit "mais pourquoi je n'y ai pas pensé tout seul"........... Il me reste juste à gérer le cas où le premier du mois est u n samedi ou un dimanche. Encore une fois merci pour tes judicieux conseils !! ThierryP P.S. : toujours aussi actif, malgré ce que tu disais il y a quelques m ois !!! Tant mieux pour nous :-)
Si ce n'est pas suffisant, quel est le message d'erreur s'il y en a un? Quelle ligne de code est mise en jaune? MichD
Bonjour Denis,
Comme toujours tes explications m'ont suffi !!! Et comme toujours, je me su is dit "mais pourquoi je n'y ai pas pensé tout seul"...........
Il me reste juste à gérer le cas où le premier du mois est u n samedi ou un dimanche.
Encore une fois merci pour tes judicieux conseils !!
ThierryP
P.S. : toujours aussi actif, malgré ce que tu disais il y a quelques m ois !!! Tant mieux pour nous :-)
Si ce n'est pas suffisant, quel est le message d'erreur s'il y en a un?
Quelle ligne de code est mise en jaune?
Bonjour Denis, Comme toujours tes explications m'ont suffi !!! Et comme toujours, je me su is dit "mais pourquoi je n'y ai pas pensé tout seul"........... Il me reste juste à gérer le cas où le premier du mois est u n samedi ou un dimanche. Encore une fois merci pour tes judicieux conseils !! ThierryP P.S. : toujours aussi actif, malgré ce que tu disais il y a quelques m ois !!! Tant mieux pour nous :-)
Si ce n'est pas suffisant, quel est le message d'erreur s'il y en a un? Quelle ligne de code est mise en jaune? MichD
MichD
Il me reste juste à gérer le cas où le premier du mois est un samedi ou un dimanche.
Si tu fais référence au fait que la cellule trouvée peut-être un samedi ou un dimanche, si ce que tu veux obtenir est le lundi suivant : '----------------------------- Function Trouve_Plage(Lundi) 'Cherche la plage à copier dans les onglets mensuels ' On trouve la feuille correspondante Feuille_Mois = Format(Lundi, "mmmm") With Worksheets(Feuille_Mois) Adresse = Application.Match(CLng(Lundi), .Range("A1:BK1"), 0) Set Trouve_Plage = .Cells(1, Adresse) If Weekday(Trouve_Plage) = vbSaturday Then Set Trouve_Plage = Trouve_Plage.Offset(, 2) ElseIf Weekday(Trouve_Plage) = vbSunday Then Set Trouve_Plage = Trouve_Plage.Offset(, 1) End If End With End Sub '----------------------------- MichD
Il me reste juste à gérer le cas où le premier du mois est un samedi ou un dimanche.
Si tu fais référence au fait que la cellule trouvée peut-être un samedi
ou un dimanche, si ce que tu veux obtenir est le lundi suivant :
'-----------------------------
Function Trouve_Plage(Lundi) 'Cherche la plage à copier dans les onglets
mensuels
' On trouve la feuille correspondante
Feuille_Mois = Format(Lundi, "mmmm")
With Worksheets(Feuille_Mois)
Adresse = Application.Match(CLng(Lundi), .Range("A1:BK1"), 0)
Set Trouve_Plage = .Cells(1, Adresse)
If Weekday(Trouve_Plage) = vbSaturday Then
Set Trouve_Plage = Trouve_Plage.Offset(, 2)
ElseIf Weekday(Trouve_Plage) = vbSunday Then
Set Trouve_Plage = Trouve_Plage.Offset(, 1)
End If
End With
Il me reste juste à gérer le cas où le premier du mois est un samedi ou un dimanche.
Si tu fais référence au fait que la cellule trouvée peut-être un samedi ou un dimanche, si ce que tu veux obtenir est le lundi suivant : '----------------------------- Function Trouve_Plage(Lundi) 'Cherche la plage à copier dans les onglets mensuels ' On trouve la feuille correspondante Feuille_Mois = Format(Lundi, "mmmm") With Worksheets(Feuille_Mois) Adresse = Application.Match(CLng(Lundi), .Range("A1:BK1"), 0) Set Trouve_Plage = .Cells(1, Adresse) If Weekday(Trouve_Plage) = vbSaturday Then Set Trouve_Plage = Trouve_Plage.Offset(, 2) ElseIf Weekday(Trouve_Plage) = vbSunday Then Set Trouve_Plage = Trouve_Plage.Offset(, 1) End If End With End Sub '----------------------------- MichD
MichD
Plutôt comme ceci, je n'avais pas remarqué que tu avais des cellules fusionnées. Le offset doit être adapté. '----------------------------- Function Trouve_Plage(Lundi) 'Cherche la plage à copier dans les onglets mensuels ' On trouve la feuille correspondante Feuille_Mois = Format(Lundi, "mmmm") With Worksheets(Feuille_Mois) Adresse = Application.Match(CLng(Lundi), .range("A1:BK1"), 0) Set Trouve_Plage = .Cells(1, Adresse) If Weekday(Trouve_Plage) = vbSaturday Then Set Trouve_Plage = Trouve_Plage.Offset(, 4) ElseIf Weekday(Trouve_Plage) = vbSunday Then Set Trouve_Plage = Trouve_Plage.Offset(, 2) End If End With End Sub '----------------------------- MicD
Plutôt comme ceci, je n'avais pas remarqué que tu avais des cellules
fusionnées. Le offset doit être adapté.
'-----------------------------
Function Trouve_Plage(Lundi) 'Cherche la plage à copier dans les onglets
mensuels
' On trouve la feuille correspondante
Feuille_Mois = Format(Lundi, "mmmm")
With Worksheets(Feuille_Mois)
Adresse = Application.Match(CLng(Lundi), .range("A1:BK1"), 0)
Set Trouve_Plage = .Cells(1, Adresse)
If Weekday(Trouve_Plage) = vbSaturday Then
Set Trouve_Plage = Trouve_Plage.Offset(, 4)
ElseIf Weekday(Trouve_Plage) = vbSunday Then
Set Trouve_Plage = Trouve_Plage.Offset(, 2)
End If
End With
End Sub
'-----------------------------
Plutôt comme ceci, je n'avais pas remarqué que tu avais des cellules fusionnées. Le offset doit être adapté. '----------------------------- Function Trouve_Plage(Lundi) 'Cherche la plage à copier dans les onglets mensuels ' On trouve la feuille correspondante Feuille_Mois = Format(Lundi, "mmmm") With Worksheets(Feuille_Mois) Adresse = Application.Match(CLng(Lundi), .range("A1:BK1"), 0) Set Trouve_Plage = .Cells(1, Adresse) If Weekday(Trouve_Plage) = vbSaturday Then Set Trouve_Plage = Trouve_Plage.Offset(, 4) ElseIf Weekday(Trouve_Plage) = vbSunday Then Set Trouve_Plage = Trouve_Plage.Offset(, 2) End If End With End Sub '----------------------------- MicD