Désactiver une Private Sub

Bonjour,

Dans une feuille Excel j'ai 2 private sub qui s'enchaînent.

Comment coder pour que la message box d'erreur qui peut s'afficher en cas de soucis via la private sub 1 fasse en sorte que la private sub 2 ne s'exécute pas ?

D'avance merci et bonne année !

Bonjour,

En cas de message d'erreurs, il faut ajouter une ligne "Exit Sub". Si on voit ton code, le conseil sera plus affiné.

Re-bonjour,

Je joins le code en l'ayant un peu raccourcis...

J'ai mis le commentaire après l'affichage de la MsgBox.

J'ai essayé quelques "bricoles" mais il doit me manquer quelque chose...

Private Sub CreerRep(peType As E_Type, piLig As Integer)

    Dim oShSource As Worksheet
    Dim sNumero As String
    Dim sNomNorme As String
    Dim sCheminRep As String
    Dim sNomModele As String
    Dim sCheminModele As String

    If goFSO Is Nothing Then
        Set goFSO = New FileSystemObject
    End If

    Set oShSource = Worksheets("Feuil1")

    sNumero = oShSource.Range("A" & piLig).Value

    sNomNorme = sNumero & "-" & (oShSource.Range("H" & piLig).Value) & " - "
    If peType = E_exemple1 Then
        sNomNorme = sNomNorme & "ex1"
        sNomModele = "Ex1.pdf"
        sCheminModele = "C:\Users\EXEMPLE 1\"
        sCheminRep = "C:\Users\EXEMPLE 1 PDF\"
    ElseIf peType = E_exemple2 Then
        sNomNorme = sNomNorme & "ex2"
        sNomModele = "ex2.pdf"
        sCheminModele = "C:\Users\EXEMPLE 2\"
        sCheminRep = "C:\Users\EXEMPLE 2 PDF\"

    Else
        MsgBox "Type inconnu : " & vbCrLf & peType, vbExclamation
        sNomNorme = sNomNorme & "Inconnu"
    End If
    sNomNorme = sNomNorme & " - " & oShSource.Range("C" & piLig).Value

    sNomNorme = sNomNorme & " - " & oShSource.Range("I" & piLig).Value

    Set oShSource = Nothing

    If Right(sCheminRep, 1) <> "\" Then
        sCheminRep = sCheminRep & "\"
    End If
    sCheminRep = sCheminRep & sNomNorme & "\"

    If goFSO.FolderExists(sCheminRep) Then

        MsgBox "Le répertoire existe déjà !" & vbCrLf & sCheminRep, vbExclamation
     '************************
     'Si cette message box se déclenche il faut que la private sub AlimCible ci-après ne se déclenche pas
     '************************
    Exit Sub

    Else
        goFSO.CreateFolder sCheminRep
    End If

    If Right(sCheminModele, 1) <> "\" Then
        sCheminModele = sCheminModele & "\"
    End If
    sCheminModele = sCheminModele & sNomModele

    If Dir(sCheminModele) = "" Then
        MsgBox "Modèle non trouvé : " & vbCrLf & sCheminModele, vbExclamation
    Else
        goFSO.CopyFile sCheminModele, sCheminRep & sNomNorme & ".pdf"

    End If
End Sub

Private Sub AlimCible(poSh As Worksheet, piLig As Integer)

    Dim oShSource As Worksheet
    Dim iCol As Integer

    Set oShSource = Worksheets("Feuil1")

    poSh.Rows("8:8").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    poSh.Range("A9:N9").Copy
    poSh.Range("A8").PasteSpecial xlPasteAll
    Application.CutCopyMode = False

    Set oShSource = Nothing

    Range("B8").Select

End Sub

Merci.

Re,

Je ne vois aucun enchainement ou appel entre deux procédures. Je ne peux faire aucun test faute de fichier qui va avec. Essaye de déboguer ligne par ligne de ton coté.

J'avais oublié cette partie du code. En fait l'incrémentation du registre est déclenchée par ce code et je n'arrive pas à faire en sorte que si l'entrée de répertoire existe déjà,alors l'AlimCible ne se fasse pas...

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

    Dim oShCible As Worksheet
    Dim bOK As Boolean
    Dim eType As E_Typ
    Dim iCol As Integer
    Dim sMsg As String

    bOK = False
    If Target.Column >= 29 And Target.Column <= 42 Then

        ElseIf Target.Value = "OUI" Then
            If Target.Column = 30 Then
                Set oShCible = Worksheets("EXEMPLE 1")
                eType = E_Ex1
                bOK = True

            ElseIf Target.Column = 31 Then
                Set oShCible = Worksheets("EXEMPLE 2")
                eType = E_Ex2
                bOK = True

        Else
                MsgBox "Pas normal !"
            End If

            AlimCible oShCible, Target.Row

            CreerRep eType, Target.Row

            Set oShCible = Nothing
        End If

     End If  

End Sub

Si la solution existe je prends de suite !

Merci d'avance.

Re,

Dans cette procédure suivante :

Private Sub CreerRep(peType As E_Type, piLig As Integer)

Remplace

Exit Sub

par

End

et teste.

De sortie j'essaye ce soir avec impatience...

Malheureusement j'ai essayé plusieurs solution mais rien n'y fait.

Je vais creuser encore...

Bonne soirée.

Bonsoir,

vous pouvez créer une variable boolean Public Si_Répertoire

Public Si_Répertoire as Boolean

Ensuite dans votre code inverser le lancement des différentes private sub :

Public Si_Répertoire As Boolean

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

    Dim oShCible As Worksheet
    Dim bOK As Boolean
    Dim eType As E_Typ
    Dim iCol As Integer
    Dim sMsg As String

    bOK = False
    If Target.Column >= 29 And Target.Column <= 42 Then

        ElseIf Target.Value = "OUI" Then
            If Target.Column = 30 Then
                Set oShCible = Worksheets("EXEMPLE 1")
                eType = E_Ex1
                bOK = True

            ElseIf Target.Column = 31 Then
                Set oShCible = Worksheets("EXEMPLE 2")
                eType = E_Ex2
                bOK = True

        Else
                MsgBox "Pas normal !"
            End If
Si_Répertoire = False

             CreerRep eType, Target.Row

            If Si_Répertoire = False Then
                AlimCible oShCible, Target.Row
            End If

            Set oShCible = Nothing
        End If

     End If

End Sub

ensuite dans la Sub où se trouve le test :

Private Sub CreerRep(peType As E_Type, piLig As Integer)

    Dim oShSource As Worksheet
    Dim sNumero As String
    Dim sNomNorme As String
    Dim sCheminRep As String
    Dim sNomModele As String
    Dim sCheminModele As String

    If goFSO Is Nothing Then
        Set goFSO = New FileSystemObject
    End If

    Set oShSource = Worksheets("Feuil1")

    sNumero = oShSource.Range("A" & piLig).Value

    sNomNorme = sNumero & "-" & (oShSource.Range("H" & piLig).Value) & " - "
    If peType = E_exemple1 Then
        sNomNorme = sNomNorme & "ex1"
        sNomModele = "Ex1.pdf"
        sCheminModele = "C:\Users\EXEMPLE 1\"
        sCheminRep = "C:\Users\EXEMPLE 1 PDF\"
    ElseIf peType = E_exemple2 Then
        sNomNorme = sNomNorme & "ex2"
        sNomModele = "ex2.pdf"
        sCheminModele = "C:\Users\EXEMPLE 2\"
        sCheminRep = "C:\Users\EXEMPLE 2 PDF\"

    Else
        MsgBox "Type inconnu : " & vbCrLf & peType, vbExclamation
        sNomNorme = sNomNorme & "Inconnu"
    End If
    sNomNorme = sNomNorme & " - " & oShSource.Range("C" & piLig).Value

    sNomNorme = sNomNorme & " - " & oShSource.Range("I" & piLig).Value

    Set oShSource = Nothing

    If Right(sCheminRep, 1) <> "\" Then
        sCheminRep = sCheminRep & "\"
    End If
    sCheminRep = sCheminRep & sNomNorme & "\"

    If goFSO.FolderExists(sCheminRep) Then

        MsgBox "Le répertoire existe déjà !" & vbCrLf & sCheminRep, vbExclamation
'************************
        'Si cette message box se déclenche il faut que la private sub AlimCible ci-après ne se déclenche pas
        '************************

        'ici on met Si_Répertoire à vrai car le dossier existe
        Si_Répertoire = True

        Exit Sub

    Else
        goFSO.CreateFolder sCheminRep
    End If

    If Right(sCheminModele, 1) <> "\" Then
        sCheminModele = sCheminModele & "\"
    End If
    sCheminModele = sCheminModele & sNomModele

    If Dir(sCheminModele) = "" Then
        MsgBox "Modèle non trouvé : " & vbCrLf & sCheminModele, vbExclamation
    Else
        goFSO.CopyFile sCheminModele, sCheminRep & sNomNorme & ".pdf"

    End If
End Sub

Private Sub AlimCible(poSh As Worksheet, piLig As Integer)

    Dim oShSource As Worksheet
    Dim iCol As Integer

    Set oShSource = Worksheets("Feuil1")

    poSh.Rows("8:8").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    poSh.Range("A9:N9").Copy
    poSh.Range("A8").PasteSpecial xlPasteAll
    Application.CutCopyMode = False

    Set oShSource = Nothing

    Range("B8").Select

End Sub

du coup on "chope" que le dossier existe, on passe la variable Si_Répertoire à vrai, du coup on ne lance pas la deuxième sub, du coup vous êtes content ?

@ bientôt

LouReeD

Bonjour,

C'est absolument parfait. J'ai trituré mon tableur dans tous les sens et avec ce code tout est comme il faut et il n'y a pas de bug.

Merci encore.

Bonne journée.

Bonjour,

ravis que cela vous convienne !

Merci de votre merci et bonne année @ vous !

@ bientôt

LouReeD

Rechercher des sujets similaires à "desactiver private sub"