Recherche de plage et copier/coller automatiques

Le
ThierryP
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 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 à jour des onglets d'édition, je cherche=
à :

- Trouver dans les onglets "Mois" la date inscrite en B1 (cellule bleue cla=
ir, toujours un lundi), onglet Edition (ça je sais faire) puis les lun=
dis 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 pour=
quoi.

- Une fois cette plage sélectionnée, trouver dans les onglets d'=
édition la date correspondant au premier jour de cette plage, qui serv=
ira 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
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichD
Le #26522552
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
Le #26522560
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
Le #26522605
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
Le #26522615
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
Le #26522616
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
Publicité
Poster une réponse
Anonyme