Dans un classeur, j'ai 2 feuilles du nom de: Devis1page, Devis2pages.
Je voudrais quand Devis1page en J3
si je rentre un N° de feuille qui correspondrai
à Devis2pages j'ai un message d'erreur.
J'ai écrit cela mais ça ne fonctionne pas.
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Dim vNom As String
vNom = ("Devis1page")
If Target.Address = "$J$6" Then
ValideSaisie
LectureDeJ6
ActiveSheet.Unprotect
EcritureDeB10
ActiveSheet.Protect
ElseIf Target.Address = "$J$3" Then
RéouvreDevis1page Target.Value
If vNom = ("Devis2pages") Then
Message = MsgBox("ERREUR, c'est un Devis 2 Pages", ,
"FERRE Jean-Raymond")
ActiveSheet.Unprotect
Range("B10,B11,J3").Select
Selection.ClearContents
ActiveSheet.Protect
Range("J3").Select
Range("J3").Activate
Else
MaValeurDeB10
MaValeurDeJ6
ActiveSheet.Protect
End If
End If
End Sub
Si quelqu'un veut bien m'aider à corriger !!
Merci par avance.
Peponne31
zz_Clignote2 Message = MsgBox("Ce N° de devis n'existe pas !", , "FERRE Jean-Raymond") Range("B10,B11,J3").ClearContents Range("J3").Select Range("J3").Activate
Else
Set Cl = Workbooks.Open(Chemin & Fich & ".xls") 'ici peut être indiqué le nom de la feuille pour 'plus de clarté : Set Fe = Cl.Worksheets("Feuil1") Set Fe = Cl.ActiveSheet 'si la feuille contient un saut de page 'c'est une feuille à 2 pages à l'impression If Fe.HPageBreaks.Count >= 1 Then
Message = MsgBox("ERREUR, c'est un Devis 2 Pages", _ , _ "FERRE Jean-Raymond") ActiveSheet.Unprotect Range("B10,B11,J3").Select Selection.ClearContents ActiveSheet.Protect Range("J3").Select Range("J3").Activate
"Peponne31" a écrit dans le message de news: > PS: > > Mes feuilles ont pour nom d'onglet Devis1page et Devis2pages. > Si ça peut faciliter pour la recopie !! > Merci à toi > Peponne31 > > > "Hervé" a écrit : > >> Bonjour Peponne31, >> >> C'est normal, comme je te l'ai dit dans mon exemple, la proc >> "RéouvreDevis1page(Target.Value)" devrait retourner un objet feuille >> (c'est >> juste une idée) ne connaissant pas cette procédure j'ai fait cette >> supposition. Montre nous cette procédure pour voir les modifications à >> apporter soit à mon code soit à la procédure. >> >> Hervé. >> >> >> "Peponne31" a écrit dans le message >> de >> news: >> > Bonjour Hervé, >> > >> > Merci pour ton aide, j'ai encore un souci au niveau de: >> > Set Fe = RéouvreDevis1page(Target.Value) >> > Erreur de compilation: >> > Fonction ou variable attendue >> > Merci encore pour ton aide >> > >> > Peponne31 >> > >> > "Hervé" a écrit : >> > >> >> >> >> Bonsoir Peponne31, >> >> >> >> Je pense avoir compris ce que tu désire réaliser. >> >> Pour savoir si le devis que tu souhaite ouvrir se trouve sur une ou >> >> deux >> >> pages (à l'impression bien sûr !) il suffit de connaître le nombre de >> >> saut >> >> de pages, si il est égal à zéro, c'est un devis sur une page, dans le >> >> cas >> >> contraire, c'est un devis sur deux pages (ou plus si tu le désire, il >> >> suffit >> >> d'adapter). >> >> J'ai un peu modifié ta procédure. En admettant que la valeur est >> >> changée >> >> dans J3, la proc "RéouvreDevis1page(Target.Value)" devrait retourner >> >> un >> >> objet feuille (je pense que le nom de la feuille est la valeur en J3 >> >> ?) >> >> ensuite, un contrôle est fait sur le nombre de sauts de pages >> >> horizontaux, >> >> si il y à au moins un saut de page, le devis est sur deux pages et ton >> >> message d'erreur sera affiché. Adapte au mieux et revient si tu a >> >> d'autres >> >> soucis. >> >> >> >> Private Sub Worksheet_Change(ByVal Target As Range) >> >> >> >> Dim vNom As String >> >> Dim Fe As Worksheet >> >> >> >> Application.ScreenUpdating = False >> >> >> >> vNom = ("Devis1page") >> >> >> >> If Target.Address = "$J$6" Then >> >> >> >> ValideSaisie >> >> LectureDeJ6 >> >> ActiveSheet.Unprotect >> >> EcritureDeB10 >> >> ActiveSheet.Protect >> >> >> >> ElseIf Target.Address = "$J$3" Then >> >> >> >> 'ici, la proc "RéouvreDevis1page" devrait >> >> 'retourner un objet feuille >> >> Set Fe = RéouvreDevis1page(Target.Value) >> >> >> >> 'si la feuille contient un saut de page >> >> 'c'est une feuille à 2 pages à l'impression >> >> If Fe.HPageBreaks.Count >= 1 Then >> >> >> >> Message = MsgBox("ERREUR, c'est un Devis 2 Pages", _ >> >> , _ >> >> "FERRE Jean-Raymond") >> >> ActiveSheet.Unprotect >> >> Range("B10,B11,J3").Select >> >> Selection.ClearContents >> >> ActiveSheet.Protect >> >> Range("J3").Select >> >> Range("J3").Activate >> >> >> >> Else >> >> >> >> MaValeurDeB10 >> >> MaValeurDeJ6 >> >> ActiveSheet.Protect >> >> >> >> End If >> >> End If >> >> >> >> Application.ScreenUpdating = True >> >> >> >> Set Fe = Nothing >> >> >> >> End Sub >> >> >> >> 'exemple de fonction (très simple) que retourne une feuille >> >> Function RéouvreDevis1page(C As String) As Worksheet >> >> >> >> Set RéouvreDevis1page = Worksheets(C) >> >> >> >> End Function >> >> >> >> Hervé. >> >> >> >> >> >> "Peponne31" a écrit dans le >> >> message >> >> de >> >> news: >> >> > Bonsoir FS >> >> > >> >> > Merci pour ta réponse, mais ce n'est pas ce que je recherche >> >> > les feuille Devis1page et Devis2pages sont des formulaires qui me >> >> > servent >> >> > à >> >> > réaliser des devis en maçonnerie. Ces devis sont imprimé soit sur >> >> > une >> >> > feuille >> >> > ou sur 2 feuilles papier tout dépand du travail à faire. C'est pour >> >> > cela >> >> > que >> >> > dans le classeur j'ai une feuille nommée Devis1page et une autre >> >> > Devis2pages >> >> > .Si je veux modifier un devis je le rappelle par son N° en J3 et ça >> >> > fonctionne, mais je ne sais pas faire la differance entre 1 feuille >> >> > et >> >> > 2 >> >> > feuilles, si je rappelle un devis sur 2 feuilles dans le formulaire >> >> > Devis1page il y va avec des erreurs dans les cellules, c'est pour ça >> >> > que >> >> > je >> >> > voudrais interdire la recopie d'un devis 2 pages sur sur le >> >> > formulaire >> >> > Devis1page et vice versa. >> >> > Merci >> >> > >> >> > "FS" a écrit : >> >> > >> >> >> Bonsoir, >> >> >> >> >> >> Pour empêcher toute recopie (ou copie) une solution radicale : >> >> >> >> >> >> Private Sub Workbook_SheetSelectionChange( _ >> >> >> ByVal Sh As Object, ByVal Target As Range) >> >> >> Application.CutCopyMode = False >> >> >> End Sub >> >> >> >> >> >> A recopier dans le module ThisWorkbook du classeur qui t'intéresse. >> >> >> Attention, ça empêche tout copier/coller (tant que les macros sont >> >> >> activées). >> >> >>
Bonjour Hervé,
Je viens de mètre en application ta solution,
et j'ai une erreur d' exécution 1004
C:_FERRE Jean-REaymonddevis.xls introuvable
le répertoire na pas changé d' emplacement,
je présume qu'il ne prend pas en compte le N° du devis en J3
j'ai ceci en surbrillance:
Set Cl = Workbooks.Open(Chemin & Fich & ".xls")
je te remerci pour le temps que tu me consacre
Peponne31
"Hervé" a écrit :
Bonsoir,
Teste ceci (pas testé !) :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cl As Workbook
Dim Fe As Worksheet
Dim Chemin As String
zz_Clignote2
Message = MsgBox("Ce N° de devis n'existe pas !", , "FERRE
Jean-Raymond")
Range("B10,B11,J3").ClearContents
Range("J3").Select
Range("J3").Activate
Else
Set Cl = Workbooks.Open(Chemin & Fich & ".xls")
'ici peut être indiqué le nom de la feuille pour
'plus de clarté : Set Fe = Cl.Worksheets("Feuil1")
Set Fe = Cl.ActiveSheet
'si la feuille contient un saut de page
'c'est une feuille à 2 pages à l'impression
If Fe.HPageBreaks.Count >= 1 Then
Message = MsgBox("ERREUR, c'est un Devis 2 Pages", _
, _
"FERRE Jean-Raymond")
ActiveSheet.Unprotect
Range("B10,B11,J3").Select
Selection.ClearContents
ActiveSheet.Protect
Range("J3").Select
Range("J3").Activate
"Peponne31" <Peponne31@discussions.microsoft.com> a écrit dans le message de
news:7B8F59C9-35CC-46DC-A9E1-7BA68B666BB7@microsoft.com...
> PS:
>
> Mes feuilles ont pour nom d'onglet Devis1page et Devis2pages.
> Si ça peut faciliter pour la recopie !!
> Merci à toi
> Peponne31
>
>
> "Hervé" a écrit :
>
>> Bonjour Peponne31,
>>
>> C'est normal, comme je te l'ai dit dans mon exemple, la proc
>> "RéouvreDevis1page(Target.Value)" devrait retourner un objet feuille
>> (c'est
>> juste une idée) ne connaissant pas cette procédure j'ai fait cette
>> supposition. Montre nous cette procédure pour voir les modifications à
>> apporter soit à mon code soit à la procédure.
>>
>> Hervé.
>>
>>
>> "Peponne31" <Peponne31@discussions.microsoft.com> a écrit dans le message
>> de
>> news:95A7C250-FC3E-43EA-9766-169C31381587@microsoft.com...
>> > Bonjour Hervé,
>> >
>> > Merci pour ton aide, j'ai encore un souci au niveau de:
>> > Set Fe = RéouvreDevis1page(Target.Value)
>> > Erreur de compilation:
>> > Fonction ou variable attendue
>> > Merci encore pour ton aide
>> >
>> > Peponne31
>> >
>> > "Hervé" a écrit :
>> >
>> >>
>> >> Bonsoir Peponne31,
>> >>
>> >> Je pense avoir compris ce que tu désire réaliser.
>> >> Pour savoir si le devis que tu souhaite ouvrir se trouve sur une ou
>> >> deux
>> >> pages (à l'impression bien sûr !) il suffit de connaître le nombre de
>> >> saut
>> >> de pages, si il est égal à zéro, c'est un devis sur une page, dans le
>> >> cas
>> >> contraire, c'est un devis sur deux pages (ou plus si tu le désire, il
>> >> suffit
>> >> d'adapter).
>> >> J'ai un peu modifié ta procédure. En admettant que la valeur est
>> >> changée
>> >> dans J3, la proc "RéouvreDevis1page(Target.Value)" devrait retourner
>> >> un
>> >> objet feuille (je pense que le nom de la feuille est la valeur en J3
>> >> ?)
>> >> ensuite, un contrôle est fait sur le nombre de sauts de pages
>> >> horizontaux,
>> >> si il y à au moins un saut de page, le devis est sur deux pages et ton
>> >> message d'erreur sera affiché. Adapte au mieux et revient si tu a
>> >> d'autres
>> >> soucis.
>> >>
>> >> Private Sub Worksheet_Change(ByVal Target As Range)
>> >>
>> >> Dim vNom As String
>> >> Dim Fe As Worksheet
>> >>
>> >> Application.ScreenUpdating = False
>> >>
>> >> vNom = ("Devis1page")
>> >>
>> >> If Target.Address = "$J$6" Then
>> >>
>> >> ValideSaisie
>> >> LectureDeJ6
>> >> ActiveSheet.Unprotect
>> >> EcritureDeB10
>> >> ActiveSheet.Protect
>> >>
>> >> ElseIf Target.Address = "$J$3" Then
>> >>
>> >> 'ici, la proc "RéouvreDevis1page" devrait
>> >> 'retourner un objet feuille
>> >> Set Fe = RéouvreDevis1page(Target.Value)
>> >>
>> >> 'si la feuille contient un saut de page
>> >> 'c'est une feuille à 2 pages à l'impression
>> >> If Fe.HPageBreaks.Count >= 1 Then
>> >>
>> >> Message = MsgBox("ERREUR, c'est un Devis 2 Pages", _
>> >> , _
>> >> "FERRE Jean-Raymond")
>> >> ActiveSheet.Unprotect
>> >> Range("B10,B11,J3").Select
>> >> Selection.ClearContents
>> >> ActiveSheet.Protect
>> >> Range("J3").Select
>> >> Range("J3").Activate
>> >>
>> >> Else
>> >>
>> >> MaValeurDeB10
>> >> MaValeurDeJ6
>> >> ActiveSheet.Protect
>> >>
>> >> End If
>> >> End If
>> >>
>> >> Application.ScreenUpdating = True
>> >>
>> >> Set Fe = Nothing
>> >>
>> >> End Sub
>> >>
>> >> 'exemple de fonction (très simple) que retourne une feuille
>> >> Function RéouvreDevis1page(C As String) As Worksheet
>> >>
>> >> Set RéouvreDevis1page = Worksheets(C)
>> >>
>> >> End Function
>> >>
>> >> Hervé.
>> >>
>> >>
>> >> "Peponne31" <Peponne31@discussions.microsoft.com> a écrit dans le
>> >> message
>> >> de
>> >> news:2F1841AA-B6E5-4FC5-B12C-0C73E470B051@microsoft.com...
>> >> > Bonsoir FS
>> >> >
>> >> > Merci pour ta réponse, mais ce n'est pas ce que je recherche
>> >> > les feuille Devis1page et Devis2pages sont des formulaires qui me
>> >> > servent
>> >> > à
>> >> > réaliser des devis en maçonnerie. Ces devis sont imprimé soit sur
>> >> > une
>> >> > feuille
>> >> > ou sur 2 feuilles papier tout dépand du travail à faire. C'est pour
>> >> > cela
>> >> > que
>> >> > dans le classeur j'ai une feuille nommée Devis1page et une autre
>> >> > Devis2pages
>> >> > .Si je veux modifier un devis je le rappelle par son N° en J3 et ça
>> >> > fonctionne, mais je ne sais pas faire la differance entre 1 feuille
>> >> > et
>> >> > 2
>> >> > feuilles, si je rappelle un devis sur 2 feuilles dans le formulaire
>> >> > Devis1page il y va avec des erreurs dans les cellules, c'est pour ça
>> >> > que
>> >> > je
>> >> > voudrais interdire la recopie d'un devis 2 pages sur sur le
>> >> > formulaire
>> >> > Devis1page et vice versa.
>> >> > Merci
>> >> >
>> >> > "FS" a écrit :
>> >> >
>> >> >> Bonsoir,
>> >> >>
>> >> >> Pour empêcher toute recopie (ou copie) une solution radicale :
>> >> >>
>> >> >> Private Sub Workbook_SheetSelectionChange( _
>> >> >> ByVal Sh As Object, ByVal Target As Range)
>> >> >> Application.CutCopyMode = False
>> >> >> End Sub
>> >> >>
>> >> >> A recopier dans le module ThisWorkbook du classeur qui t'intéresse.
>> >> >> Attention, ça empêche tout copier/coller (tant que les macros sont
>> >> >> activées).
>> >> >>
zz_Clignote2 Message = MsgBox("Ce N° de devis n'existe pas !", , "FERRE Jean-Raymond") Range("B10,B11,J3").ClearContents Range("J3").Select Range("J3").Activate
Else
Set Cl = Workbooks.Open(Chemin & Fich & ".xls") 'ici peut être indiqué le nom de la feuille pour 'plus de clarté : Set Fe = Cl.Worksheets("Feuil1") Set Fe = Cl.ActiveSheet 'si la feuille contient un saut de page 'c'est une feuille à 2 pages à l'impression If Fe.HPageBreaks.Count >= 1 Then
Message = MsgBox("ERREUR, c'est un Devis 2 Pages", _ , _ "FERRE Jean-Raymond") ActiveSheet.Unprotect Range("B10,B11,J3").Select Selection.ClearContents ActiveSheet.Protect Range("J3").Select Range("J3").Activate
"Peponne31" a écrit dans le message de news: > PS: > > Mes feuilles ont pour nom d'onglet Devis1page et Devis2pages. > Si ça peut faciliter pour la recopie !! > Merci à toi > Peponne31 > > > "Hervé" a écrit : > >> Bonjour Peponne31, >> >> C'est normal, comme je te l'ai dit dans mon exemple, la proc >> "RéouvreDevis1page(Target.Value)" devrait retourner un objet feuille >> (c'est >> juste une idée) ne connaissant pas cette procédure j'ai fait cette >> supposition. Montre nous cette procédure pour voir les modifications à >> apporter soit à mon code soit à la procédure. >> >> Hervé. >> >> >> "Peponne31" a écrit dans le message >> de >> news: >> > Bonjour Hervé, >> > >> > Merci pour ton aide, j'ai encore un souci au niveau de: >> > Set Fe = RéouvreDevis1page(Target.Value) >> > Erreur de compilation: >> > Fonction ou variable attendue >> > Merci encore pour ton aide >> > >> > Peponne31 >> > >> > "Hervé" a écrit : >> > >> >> >> >> Bonsoir Peponne31, >> >> >> >> Je pense avoir compris ce que tu désire réaliser. >> >> Pour savoir si le devis que tu souhaite ouvrir se trouve sur une ou >> >> deux >> >> pages (à l'impression bien sûr !) il suffit de connaître le nombre de >> >> saut >> >> de pages, si il est égal à zéro, c'est un devis sur une page, dans le >> >> cas >> >> contraire, c'est un devis sur deux pages (ou plus si tu le désire, il >> >> suffit >> >> d'adapter). >> >> J'ai un peu modifié ta procédure. En admettant que la valeur est >> >> changée >> >> dans J3, la proc "RéouvreDevis1page(Target.Value)" devrait retourner >> >> un >> >> objet feuille (je pense que le nom de la feuille est la valeur en J3 >> >> ?) >> >> ensuite, un contrôle est fait sur le nombre de sauts de pages >> >> horizontaux, >> >> si il y à au moins un saut de page, le devis est sur deux pages et ton >> >> message d'erreur sera affiché. Adapte au mieux et revient si tu a >> >> d'autres >> >> soucis. >> >> >> >> Private Sub Worksheet_Change(ByVal Target As Range) >> >> >> >> Dim vNom As String >> >> Dim Fe As Worksheet >> >> >> >> Application.ScreenUpdating = False >> >> >> >> vNom = ("Devis1page") >> >> >> >> If Target.Address = "$J$6" Then >> >> >> >> ValideSaisie >> >> LectureDeJ6 >> >> ActiveSheet.Unprotect >> >> EcritureDeB10 >> >> ActiveSheet.Protect >> >> >> >> ElseIf Target.Address = "$J$3" Then >> >> >> >> 'ici, la proc "RéouvreDevis1page" devrait >> >> 'retourner un objet feuille >> >> Set Fe = RéouvreDevis1page(Target.Value) >> >> >> >> 'si la feuille contient un saut de page >> >> 'c'est une feuille à 2 pages à l'impression >> >> If Fe.HPageBreaks.Count >= 1 Then >> >> >> >> Message = MsgBox("ERREUR, c'est un Devis 2 Pages", _ >> >> , _ >> >> "FERRE Jean-Raymond") >> >> ActiveSheet.Unprotect >> >> Range("B10,B11,J3").Select >> >> Selection.ClearContents >> >> ActiveSheet.Protect >> >> Range("J3").Select >> >> Range("J3").Activate >> >> >> >> Else >> >> >> >> MaValeurDeB10 >> >> MaValeurDeJ6 >> >> ActiveSheet.Protect >> >> >> >> End If >> >> End If >> >> >> >> Application.ScreenUpdating = True >> >> >> >> Set Fe = Nothing >> >> >> >> End Sub >> >> >> >> 'exemple de fonction (très simple) que retourne une feuille >> >> Function RéouvreDevis1page(C As String) As Worksheet >> >> >> >> Set RéouvreDevis1page = Worksheets(C) >> >> >> >> End Function >> >> >> >> Hervé. >> >> >> >> >> >> "Peponne31" a écrit dans le >> >> message >> >> de >> >> news: >> >> > Bonsoir FS >> >> > >> >> > Merci pour ta réponse, mais ce n'est pas ce que je recherche >> >> > les feuille Devis1page et Devis2pages sont des formulaires qui me >> >> > servent >> >> > à >> >> > réaliser des devis en maçonnerie. Ces devis sont imprimé soit sur >> >> > une >> >> > feuille >> >> > ou sur 2 feuilles papier tout dépand du travail à faire. C'est pour >> >> > cela >> >> > que >> >> > dans le classeur j'ai une feuille nommée Devis1page et une autre >> >> > Devis2pages >> >> > .Si je veux modifier un devis je le rappelle par son N° en J3 et ça >> >> > fonctionne, mais je ne sais pas faire la differance entre 1 feuille >> >> > et >> >> > 2 >> >> > feuilles, si je rappelle un devis sur 2 feuilles dans le formulaire >> >> > Devis1page il y va avec des erreurs dans les cellules, c'est pour ça >> >> > que >> >> > je >> >> > voudrais interdire la recopie d'un devis 2 pages sur sur le >> >> > formulaire >> >> > Devis1page et vice versa. >> >> > Merci >> >> > >> >> > "FS" a écrit : >> >> > >> >> >> Bonsoir, >> >> >> >> >> >> Pour empêcher toute recopie (ou copie) une solution radicale : >> >> >> >> >> >> Private Sub Workbook_SheetSelectionChange( _ >> >> >> ByVal Sh As Object, ByVal Target As Range) >> >> >> Application.CutCopyMode = False >> >> >> End Sub >> >> >> >> >> >> A recopier dans le module ThisWorkbook du classeur qui t'intéresse. >> >> >> Attention, ça empêche tout copier/coller (tant que les macros sont >> >> >> activées). >> >> >>