Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Copier/Coller sur une autre feuille, sous condition. Worksheet_Change déjà utilisé.

3 réponses
Avatar
Joseph.Allard
Bonjour,

je dispose d'un fichier Excel avec notamment quatre feuilles:
"Hypoth=E8ses"
"Hypoth=E8ses initiales"
"2=E8me jeu d'hypoth=E8ses"
"3=E8me jeu d'hypoth=E8ses"

La Cellule Hypoth=E8ses!D2 contient une liste de validation avec les
valeurs suivantes:
"Mode Saisie", "Hypoth=E8ses initiales", "2=E8me jeu d'hypoth=E8ses" et
"3=E8me jeu d'hypoth=E8ses".

Je souhaite que lorsque l'une des 3 derni=E8res valeurs est
s=E9lectionn=E9e, le tableau G6:X86 de la feuille correspondante vienne
se coller en G6 de la feuille "Hypoth=E8ses". Lorsque "Mode Saisie" est
s=E9lectionn=E9, je souhaite vider le tableau G6:X86 de la feuille
"Hypoth=E8ses".

Je pense que je devrais pouvoir le r=E9aliser en utilisant
Worksheet_Change avec D2 comme cellule cible. Le probl=E8me c'est que
j'utilise d=E9j=E0 la m=E9thode Worksheet_Change sur cette feuille avec la
macro suivante (qui fonctionne convenablement, mais qui pourrait
certainement =EAtre optimis=E9e) :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$N$5" Then Exit Sub

If UCase(Target) =3D "2005" Then
Columns("G:M").Hidden =3D True
Feuil8.Columns("J:P").Hidden =3D True
ElseIf UCase(Target) =3D "2006" Then
Columns("G").Hidden =3D False
Columns("H:M").Hidden =3D True
Feuil8.Columns("J").Hidden =3D False
Feuil8.Columns("K:P").Hidden =3D True
ElseIf UCase(Target) =3D "2007" Then
Columns("G:H").Hidden =3D False
Columns("I:M").Hidden =3D True
Feuil8.Columns("J:K").Hidden =3D False
Feuil8.Columns("L:P").Hidden =3D True
ElseIf UCase(Target) =3D "2008" Then
Columns("G:I").Hidden =3D False
Columns("J:M").Hidden =3D True
Feuil8.Columns("J:L").Hidden =3D False
Feuil8.Columns("M:P").Hidden =3D True
ElseIf UCase(Target) =3D "2009" Then
Columns("G:J").Hidden =3D False
Columns("K:M").Hidden =3D True
Feuil8.Columns("J:M").Hidden =3D False
Feuil8.Columns("N:P").Hidden =3D True
ElseIf UCase(Target) =3D "2010" Then
Columns("G:K").Hidden =3D False
Columns("L:M").Hidden =3D True
Feuil8.Columns("J:N").Hidden =3D False
Feuil8.Columns("O:P").Hidden =3D True
ElseIf UCase(Target) =3D "2011" Then
Columns("G:L").Hidden =3D False
Columns("M").Hidden =3D True
Feuil8.Columns("J:O").Hidden =3D False
Feuil8.Columns("P").Hidden =3D True
ElseIf UCase(Target) =3D "2012" Then
Columns("G:M").Hidden =3D False
Feuil8.Columns("J:P").Hidden =3D False
End If
End Sub

J'ai donc ins=E9rer une nouvelle feuille =E0 mon classeur, "Mode", pour
tenter l'op=E9ration avec un Worksheet_Calculation. La cellule A1 de
Mode reprend simplement la cellule D2 de
"Hypoth=E8ses".(A1=3DHypoth=E8ses!D2). Et =E7a coince, mes t=E2tonnements
n'ont men=E9 =E0 rien.

3 réponses

Avatar
Daniel
Bonjour.
Mets la macro suivante dans le code de la feuille "Hypothèses" :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$D$2" Then Exit Sub
If Target.Value = "Hypothèses initiales" Or Target.Value = _
"2ème jeu d'hypothèses" _
Or Target.Value = "3ème jeu d'hypothèses" Then
Sheets(Target.Value).Range("G6:X86").Copy Range("G6")
ElseIf Target.Value = "Mode Saisie" Then
Range("G6:X86").ClearContents
End If
End Sub

Cordialement.
Daniel
a écrit dans le message de news:

Bonjour,

je dispose d'un fichier Excel avec notamment quatre feuilles:
"Hypothèses"
"Hypothèses initiales"
"2ème jeu d'hypothèses"
"3ème jeu d'hypothèses"

La Cellule Hypothèses!D2 contient une liste de validation avec les
valeurs suivantes:
"Mode Saisie", "Hypothèses initiales", "2ème jeu d'hypothèses" et
"3ème jeu d'hypothèses".

Je souhaite que lorsque l'une des 3 dernières valeurs est
sélectionnée, le tableau G6:X86 de la feuille correspondante vienne
se coller en G6 de la feuille "Hypothèses". Lorsque "Mode Saisie" est
sélectionné, je souhaite vider le tableau G6:X86 de la feuille
"Hypothèses".

Je pense que je devrais pouvoir le réaliser en utilisant
Worksheet_Change avec D2 comme cellule cible. Le problème c'est que
j'utilise déjà la méthode Worksheet_Change sur cette feuille avec la
macro suivante (qui fonctionne convenablement, mais qui pourrait
certainement être optimisée) :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$N$5" Then Exit Sub

If UCase(Target) = "2005" Then
Columns("G:M").Hidden = True
Feuil8.Columns("J:P").Hidden = True
ElseIf UCase(Target) = "2006" Then
Columns("G").Hidden = False
Columns("H:M").Hidden = True
Feuil8.Columns("J").Hidden = False
Feuil8.Columns("K:P").Hidden = True
ElseIf UCase(Target) = "2007" Then
Columns("G:H").Hidden = False
Columns("I:M").Hidden = True
Feuil8.Columns("J:K").Hidden = False
Feuil8.Columns("L:P").Hidden = True
ElseIf UCase(Target) = "2008" Then
Columns("G:I").Hidden = False
Columns("J:M").Hidden = True
Feuil8.Columns("J:L").Hidden = False
Feuil8.Columns("M:P").Hidden = True
ElseIf UCase(Target) = "2009" Then
Columns("G:J").Hidden = False
Columns("K:M").Hidden = True
Feuil8.Columns("J:M").Hidden = False
Feuil8.Columns("N:P").Hidden = True
ElseIf UCase(Target) = "2010" Then
Columns("G:K").Hidden = False
Columns("L:M").Hidden = True
Feuil8.Columns("J:N").Hidden = False
Feuil8.Columns("O:P").Hidden = True
ElseIf UCase(Target) = "2011" Then
Columns("G:L").Hidden = False
Columns("M").Hidden = True
Feuil8.Columns("J:O").Hidden = False
Feuil8.Columns("P").Hidden = True
ElseIf UCase(Target) = "2012" Then
Columns("G:M").Hidden = False
Feuil8.Columns("J:P").Hidden = False
End If
End Sub

J'ai donc insérer une nouvelle feuille à mon classeur, "Mode", pour
tenter l'opération avec un Worksheet_Calculation. La cellule A1 de
Mode reprend simplement la cellule D2 de
"Hypothèses".(A1=Hypothèses!D2). Et ça coince, mes tâtonnements
n'ont mené à rien.
Avatar
Joseph.Allard
C'est bon, j'ai trouvé!
Je poste le code pour info et si vous avez des idées d'optimisation.
Et je ne passe donc bien par une feuille supllémentaire cachée.

Dans le code de ma feuille "Hypothèses":
Private Sub Worksheet_Calculate()
Application.EnableEvents = False
Call Macro10
Application.EnableEvents = True
End Sub

Dans un module:
Sub Macro10()
If sheets("Mode").Range("A1") = "Mode Hypothèses initiales" Then
sheets("Hypothèses initiales").Select
sheets("Hypothèses initiales").Range("G6:X86").Select
Application.CutCopyMode = False
Selection.Copy
sheets("Hypothèses").Activate
sheets("Hypothèses").Range("G6").Select
ActiveSheet.Paste
sheets("Hypothèses").Range("N5").Select
ElseIf sheets("Mode").Range("A1") = "2ème jeu d'hypothèses" Then
sheets("Hypothèses2").Select
sheets("Hypothèses2").Range("G6:X86").Select
Application.CutCopyMode = False
Selection.Copy
sheets("Hypothèses").Activate
sheets("Hypothèses").Range("G6").Select
ActiveSheet.Paste
sheets("Hypothèses").Range("N5").Select
ElseIf sheets("Mode").Range("A1") = "3ème jeu d'hypothèses" Then
sheets("Hypothèses3").Select
sheets("Hypothèses3").Range("G6:X86").Select
Application.CutCopyMode = False
Selection.Copy
sheets("Hypothèses").Activate
sheets("Hypothèses").Range("G6").Select
ActiveSheet.Paste
sheets("Hypothèses").Range("N5").Select
ElseIf sheets("Mode").Range("A1") = "Mode Saisie" Then
sheets("Hypothèses").Range("G6:X86").Select
Selection.ClearContents
sheets("Hypothèses").Range("N5").Select
End If
End Sub
Avatar
Joseph.Allard
Merci Daniel pour la réponse.

En fait, je ne peux réutiliser Worksheet_Change dans cette fauille, je
l'utilise déjà (sinon, j'obtiens un message d'erreur "expression
ambigue"). C'est pour cela que je passe par un Worksheet_Calculate et
par le truchement d'une feuille chachée.

Cordialement,
Joseph

Daniel wrote:
Bonjour.
Mets la macro suivante dans le code de la feuille "Hypothèses" :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$D$2" Then Exit Sub
If Target.Value = "Hypothèses initiales" Or Target.Value = _
"2ème jeu d'hypothèses" _
Or Target.Value = "3ème jeu d'hypothèses" Then
Sheets(Target.Value).Range("G6:X86").Copy Range("G6")
ElseIf Target.Value = "Mode Saisie" Then
Range("G6:X86").ClearContents
End If
End Sub

Cordialement.
Daniel
a écrit dans le message de news:

Bonjour,

je dispose d'un fichier Excel avec notamment quatre feuilles:
"Hypothèses"
"Hypothèses initiales"
"2ème jeu d'hypothèses"
"3ème jeu d'hypothèses"

La Cellule Hypothèses!D2 contient une liste de validation avec les
valeurs suivantes:
"Mode Saisie", "Hypothèses initiales", "2ème jeu d'hypothèses" et
"3ème jeu d'hypothèses".

Je souhaite que lorsque l'une des 3 dernières valeurs est
sélectionnée, le tableau G6:X86 de la feuille correspondante vienne
se coller en G6 de la feuille "Hypothèses". Lorsque "Mode Saisie" est
sélectionné, je souhaite vider le tableau G6:X86 de la feuille
"Hypothèses".

Je pense que je devrais pouvoir le réaliser en utilisant
Worksheet_Change avec D2 comme cellule cible. Le problème c'est que
j'utilise déjà la méthode Worksheet_Change sur cette feuille avec la
macro suivante (qui fonctionne convenablement, mais qui pourrait
certainement être optimisée) :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$N$5" Then Exit Sub

If UCase(Target) = "2005" Then
Columns("G:M").Hidden = True
Feuil8.Columns("J:P").Hidden = True
ElseIf UCase(Target) = "2006" Then
Columns("G").Hidden = False
Columns("H:M").Hidden = True
Feuil8.Columns("J").Hidden = False
Feuil8.Columns("K:P").Hidden = True
ElseIf UCase(Target) = "2007" Then
Columns("G:H").Hidden = False
Columns("I:M").Hidden = True
Feuil8.Columns("J:K").Hidden = False
Feuil8.Columns("L:P").Hidden = True
ElseIf UCase(Target) = "2008" Then
Columns("G:I").Hidden = False
Columns("J:M").Hidden = True
Feuil8.Columns("J:L").Hidden = False
Feuil8.Columns("M:P").Hidden = True
ElseIf UCase(Target) = "2009" Then
Columns("G:J").Hidden = False
Columns("K:M").Hidden = True
Feuil8.Columns("J:M").Hidden = False
Feuil8.Columns("N:P").Hidden = True
ElseIf UCase(Target) = "2010" Then
Columns("G:K").Hidden = False
Columns("L:M").Hidden = True
Feuil8.Columns("J:N").Hidden = False
Feuil8.Columns("O:P").Hidden = True
ElseIf UCase(Target) = "2011" Then
Columns("G:L").Hidden = False
Columns("M").Hidden = True
Feuil8.Columns("J:O").Hidden = False
Feuil8.Columns("P").Hidden = True
ElseIf UCase(Target) = "2012" Then
Columns("G:M").Hidden = False
Feuil8.Columns("J:P").Hidden = False
End If
End Sub

J'ai donc insérer une nouvelle feuille à mon classeur, "Mode", pour
tenter l'opération avec un Worksheet_Calculation. La cellule A1 de
Mode reprend simplement la cellule D2 de
"Hypothèses".(A1=Hypothèses!D2). Et ça coince, mes tâtonnements
n'ont mené à rien.