l'ordre dans Private Sub

  • Initiateur de la discussion Initiateur de la discussion Ilino
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Ilino

XLDnaute Barbatruc
Bonjour Forum
j'ai une question d'ordre générale : comment faire pour séparer les code dans la meme Private Sub Worksheet_Change ( exemple) ?
pourquoi cette question ??
je suis entrain de créer des codes et au En même temps je rajoute ces codes dans la même Private sub
y a t il une facon de faire l-ordre dans la Private sub ???
Grazie
 
Re : l'ordre dans Private Sub

Bonjour Ilino,

voici un exemple simple
l'ordre d'écriture du code n'a pas d'importance
Code:
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
'
' ici le code qui gère le changement en A1:A10
'
Exit Sub
End If

If Not Intersect(Target, Range("B1:B10")) Is Nothing Then
'
' ici le code qui gère le changement en B1:B10
'
Exit Sub
End If

If Not Intersect(Target, Range("C1:C10")) Is Nothing Then
'
' ici le code qui gère le changement en C1:C10
'
Exit Sub
End If

End Sub
à+
Philippe
 
Dernière édition:
Re : l'ordre dans Private Sub

Bonjour phlaurent55

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

'.....1 PARTIE

If Intersect(Target, [C6,C38,C56,E56,C90,C106,C116,F116,F170,H170,C294,F294,C372,F384,C42,C414]) Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Rows("40:67").Hidden = [C38] <> "Oui"
If [C56] <> "Oui" Then Rows("58:67").Hidden = True
If [E56] < 5 Then _
  Rows(68).Offset(2 * [E56] - 10).Resize(10 - 2 * [E56]).Hidden = True

'If [C38] = "Pas de Jonction" Or [C38] = "" Then CommandButton4.Visible = True And CommandButton5.Visible = True 'visible
Rows("8:39").Hidden = [C6] = "Non" Or [C6] = ""
Rows("78:111").Hidden = [C38] = "Pas de Jonction" Or [C38] = ""
Rows("92:95").Hidden = [C90] = "Non" Or [C90] = ""
Rows("108:111").Hidden = [C106] = "Non" Or [C106] = ""

Rows("118:157").Hidden = [C116] <> "Oui"
If [F116] < 5 Then _
  Rows(158).Offset(8 * [F116] - 40).Resize(40 - 8 * [F116]).Hidden = True
  
Rows("162:167").Hidden = [C38] = "Pas de Jonction" Or [C38] = ""

Rows("172:291").Hidden = [F170] <> "Oui"
If [H170] < 60 Then _
  Rows(292).Offset(2 * [H170] - 120).Resize(120 - 2 * [H170]).Hidden = True


Rows("296:315").Hidden = [C294] <> "Oui"
If [F294] < 10 Then _
  Rows(316).Offset(2 * [F294] - 20).Resize(20 - 2 * [F294]).Hidden = True

'Target.Select 'facultatif

Rows("344:393").Hidden = [C38] = "Pas de Jonction" Or [C38] = ""


Rows("374:377").Hidden = [C372] <> "Oui"

Rows("386:393").Hidden = [F384] <> "Oui"

Rows("416:419").Hidden = [C414] <> "Oui"




'....... 2 PARTIE

If Target.Address <> "$H$16" Then Exit Sub
Me.CommandButton8.Visible = Target.Value > 0

'Rows("344:377").Hidden = [C42] <> "Pylône ( Coupure )" Or [C42] <> "Pylône ( Piqûre)" Or [C42] <> "Poteau"
'[C38] = "Pas de Jonction" Or [C38] = "" Or


'.....3 PARTIE

If  Intersect(Target, Range("C72,C82,C98")) Is Nothing Then Exit Sub
If Range("C72") <> "Mixte" Or Range("C82") = "" Or Range("C98") = "" Or (Range("C82") <> Range("C98")) Then Exit Sub
    If MsgBox(" Attention , La nature de la liaison complète ( SAR_SDR) est" & Chr(10) _
        & Chr(10) & "   ..........................   " & [C72] & "   ..........................   " _
        & Chr(10) & "" & Chr(10) & "   Verifier les réponses C et D   ", vbYesNo, " Bonjour " & Application.UserName) = vbNo Then
        Exit Sub
    Else
        Range("C82:D82").ClearContents
        Range("C98:D98").ClearContents
    End If







End Sub

je veux séparer ces 3 parties mais ça n'a pas fonctionnée
GRAZIE
 
Dernière édition:
Re : l'ordre dans Private Sub

Re,

dans le code ci-dessus, il y a 2 procédures différentes

1- Private Sub Worksheet_Change(ByVal Target As Range)
2- Private Sub Worksheet_SelectionChange(ByVal Target As Range)

...... normal que ça ne réponde pas à tes attentes 🙁

à+
Philippe

Edit: ....... le temps que je poste ma réponse, la question a été modifiée et le code présenté n'est plus le même 😡
 
Dernière édition:
Re : l'ordre dans Private Sub

Re, bonjour Philippe,

place des "not" devant les "if", enlève les "exix sub" et rajoute des "end if" à la fin :
Code:
If  Not Intersect(Target, Range("C72,C82,C98")) Is Nothing Then 
If Range("C72") <> "Mixte" Or Range("C82") = "" Or Range("C98") = "" Or (Range("C82") <> Range("C98")) Then Exit Sub
    If MsgBox(" Attention , La nature de la liaison complète ( SAR_SDR) est" & Chr(10) _
        & Chr(10) & "   ..........................   " & [C72] & "   ..........................   " _
        & Chr(10) & "" & Chr(10) & "   Verifier les réponses C et D   ", vbYesNo, " Bonjour " & Application.UserName) = vbNo Then
        Exit Sub
    Else
        Range("C82:D82").ClearContents
        Range("C98:D98").ClearContents
    End If

End If

bon après midi
@+
 
Re : l'ordre dans Private Sub

Bonjour à tous.


En suivant la même idée que celle de Pierrot93, peut-être comme ceci ?​
VB:
Private Sub Worksheet_Change(ByVal Target As Range)

'.....1 PARTIE

    If Not Intersect(Target, [C6,C38,C56,E56,C90,C106,C116,F116,F170,H170,C294,F294,C372,F384,C42,C414]) Is Nothing Then
        Application.ScreenUpdating = False
        Rows("40:67").Hidden = [C38] <> "Oui"
        If [C56] <> "Oui" Then Rows("58:67").Hidden = True
        If [E56] < 5 Then _
          Rows(68).Offset(2 * [E56] - 10).Resize(10 - 2 * [E56]).Hidden = True

'If [C38] = "Pas de Jonction" Or [C38] = "" Then CommandButton4.Visible = True And CommandButton5.Visible = True 'visible
        Rows("8:39").Hidden = [C6] = "Non" Or [C6] = ""
        Rows("78:111").Hidden = [C38] = "Pas de Jonction" Or [C38] = ""
        Rows("92:95").Hidden = [C90] = "Non" Or [C90] = ""
        Rows("108:111").Hidden = [C106] = "Non" Or [C106] = ""

        Rows("118:157").Hidden = [C116] <> "Oui"
        If [F116] < 5 Then _
          Rows(158).Offset(8 * [F116] - 40).Resize(40 - 8 * [F116]).Hidden = True
 
        Rows("162:167").Hidden = [C38] = "Pas de Jonction" Or [C38] = ""

        Rows("172:291").Hidden = [F170] <> "Oui"
        If [H170] < 60 Then _
          Rows(292).Offset(2 * [H170] - 120).Resize(120 - 2 * [H170]).Hidden = True

        Rows("296:315").Hidden = [C294] <> "Oui"
        If [F294] < 10 Then _
          Rows(316).Offset(2 * [F294] - 20).Resize(20 - 2 * [F294]).Hidden = True

'Target.Select 'facultatif

        Rows("344:393").Hidden = [C38] = "Pas de Jonction" Or [C38] = ""

        Rows("374:377").Hidden = [C372] <> "Oui"

        Rows("386:393").Hidden = [F384] <> "Oui"

        Rows("416:419").Hidden = [C414] <> "Oui"

    End If

'....... 2 PARTIE

    If Target.Address = "$H$16" Then
        Me.CommandButton8.Visible = Target.Value > 0

'Rows("344:377").Hidden = [C42] <> "Pylône ( Coupure )" Or [C42] <> "Pylône ( Piqûre)" Or [C42] <> "Poteau"
'[C38] = "Pas de Jonction" Or [C38] = "" Or

    End If

'.....3 PARTIE

    If Not Intersect(Target, Range("C72,C82,C98")) Is Nothing Then
        If Not (Range("C72") <> "Mixte" Or Range("C82") = "" Or Range("C98") = "" Or (Range("C82") <> Range("C98"))) Then
            If MsgBox(" Attention , La nature de la liaison complète ( SAR_SDR) est" & Chr(10) _
                & Chr(10) & "   ..........................   " & [C72] & "   ..........................   " _
                & Chr(10) & "" & Chr(10) & "   Verifier les réponses C et D   ", vbYesNo, " Bonjour " & Application.UserName) <> vbNo Then
                Range("C82:D82").ClearContents
                Range("C98:D98").ClearContents
            End If
    End If

End Sub
Sans garantie, car je n'ai pas la moindre idée de ce que ce code doit faire...​


ROGER2327
#6887


Vendredi 6 Haha 141 (Sainte Tourte, lyrique et Sainte Bévue, sociologique - fête Suprême Quarte)
20 Vendémiaire An CCXXII, 6,2352h - pressoir
2013-W41-5T14:57:52Z
 
Re : l'ordre dans Private Sub

Bonjour
donc la règle d'une maniéré générale est la suivante
1. place des "not" devant les "if"
2. enlève les "exix sub" si Elles existent
3. et rajoute des "end if" à la fin
Code:
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
'
' ici le code qui gère le changement en A1:A10
'
End If

If Not Intersect(Target, Range("B1:B10")) Is Nothing Then
'
' ici le code qui gère le changement en B1:B10
'
End If

If Not Intersect(Target, Range("C1:C10")) Is Nothing Then
'
' ici le code qui gère le changement en C1:C10
'
End If

End Sub
N'est ce pas ???😱
 
Re : l'ordre dans Private Sub

Bonjour à tous.


En suivant la même idée que celle de Pierrot93, peut-être comme ceci ?​
VB:
Private Sub Worksheet_Change(ByVal Target As Range)

'.....1 PARTIE

    If Not Intersect(Target, [C6,C38,C56,E56,C90,C106,C116,F116,F170,H170,C294,F294,C372,F384,C42,C414]) Is Nothing Then
        Application.ScreenUpdating = False
        Rows("40:67").Hidden = [C38] <> "Oui"
        If [C56] <> "Oui" Then Rows("58:67").Hidden = True
        If [E56] < 5 Then _
          Rows(68).Offset(2 * [E56] - 10).Resize(10 - 2 * [E56]).Hidden = True

'If [C38] = "Pas de Jonction" Or [C38] = "" Then CommandButton4.Visible = True And CommandButton5.Visible = True 'visible
        Rows("8:39").Hidden = [C6] = "Non" Or [C6] = ""
        Rows("78:111").Hidden = [C38] = "Pas de Jonction" Or [C38] = ""
        Rows("92:95").Hidden = [C90] = "Non" Or [C90] = ""
        Rows("108:111").Hidden = [C106] = "Non" Or [C106] = ""

        Rows("118:157").Hidden = [C116] <> "Oui"
        If [F116] < 5 Then _
          Rows(158).Offset(8 * [F116] - 40).Resize(40 - 8 * [F116]).Hidden = True
 
        Rows("162:167").Hidden = [C38] = "Pas de Jonction" Or [C38] = ""

        Rows("172:291").Hidden = [F170] <> "Oui"
        If [H170] < 60 Then _
          Rows(292).Offset(2 * [H170] - 120).Resize(120 - 2 * [H170]).Hidden = True

        Rows("296:315").Hidden = [C294] <> "Oui"
        If [F294] < 10 Then _
          Rows(316).Offset(2 * [F294] - 20).Resize(20 - 2 * [F294]).Hidden = True

'Target.Select 'facultatif

        Rows("344:393").Hidden = [C38] = "Pas de Jonction" Or [C38] = ""

        Rows("374:377").Hidden = [C372] <> "Oui"

        Rows("386:393").Hidden = [F384] <> "Oui"

        Rows("416:419").Hidden = [C414] <> "Oui"

    End If

'....... 2 PARTIE

    If Target.Address = "$H$16" Then
        Me.CommandButton8.Visible = Target.Value > 0

'Rows("344:377").Hidden = [C42] <> "Pylône ( Coupure )" Or [C42] <> "Pylône ( Piqûre)" Or [C42] <> "Poteau"
'[C38] = "Pas de Jonction" Or [C38] = "" Or

    End If

'.....3 PARTIE

    If Not Intersect(Target, Range("C72,C82,C98")) Is Nothing Then
        If Not (Range("C72") <> "Mixte" Or Range("C82") = "" Or Range("C98") = "" Or (Range("C82") <> Range("C98"))) Then
            If MsgBox(" Attention , La nature de la liaison complète ( SAR_SDR) est" & Chr(10) _
                & Chr(10) & "   ..........................   " & [C72] & "   ..........................   " _
                & Chr(10) & "" & Chr(10) & "   Verifier les réponses C et D   ", vbYesNo, " Bonjour " & Application.UserName) <> vbNo Then
                Range("C82:D82").ClearContents
                Range("C98:D98").ClearContents
            End If
    End If

End Sub
Sans garantie, car je n'ai pas la moindre idée de ce que ce code doit faire...​


ROGER2327
#6887


Vendredi 6 Haha 141 (Sainte Tourte, lyrique et Sainte Bévue, sociologique - fête Suprême Quarte)
20 Vendémiaire An CCXXII, 6,2352h - pressoir
2013-W41-5T14:57:52Z
Re,
peut etre c'est une question idiote ????
dans la partie 2 pourquoi tu n'as pas ajouté le "Not" devant If??????😕😱🙁
 
Re : l'ordre dans Private Sub

Re...

Re,
peut etre c'est une question idiote ????
dans la partie 2 pourquoi tu n'as pas ajouté le "Not" devant If??????😕😱🙁
... parce que j'ai remplacé
Target.Address <> "$H$16"
par
Target.Address = "$H$16"


ROGER2327
#6888


Vendredi 6 Haha 141 (Sainte Tourte, lyrique et Sainte Bévue, sociologique - fête Suprême Quarte)
20 Vendémiaire An CCXXII, 6,7119h - pressoir
2013-W41-5T16:06:31Z
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
521
Retour