Vba Problème d'enchainement d'instruction

Arpette

XLDnaute Impliqué
Bonjour à toutes et à tous,

J'ai problème avec ma macro, quand je cliques un le bouton enregister, je veux qu'elle s'exécute avec le code du module 4 et qu'elle ferme le classeur. J'ai également du code sur la feuille 1 qui fonctionne quand je l'utilise pour ma rechercheV.
Le problème est, que si je cliques sur enregistrer, le code se déroule correctement, mais il enchaine sur la feuille 1, il ouvre le fichier "Mes Clients" et ensuite j'ai un message comme quoi "Windows("APPARAUX.xls").Activate" l'indice n'appartient pas à la sélection. D'où mes questions :
pourquoi à l'enregistrement mon classeur ne se ferme pas et pourquoi quand il enchaine sur la feuille 1, j'ai une erreur.
Merci de votre aide.

Code:
Sub Enregister()
    ' Enregistrer Sous
    
    Dim Lechemin As String
    Dim LeFichier As String
    Dim NomRep As String
    
   '\***************************************************************************************************************************
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    Lechemin = ActiveWorkbook.Path
            
    Nom = Cells(4, 3)
        
    NomClient = Cells(35, 11).Value
    
    NomRep = NomClient
    
    Marque = Cells(9, 8).Value
    
    Numserie = Cells(11, 8).Value
              
    Jour = Format(Cells(45, 9), "dd-MM-YYYY")
    
    LeFichier = Nom & " _ " & NomClient & " _ " & Marque & " _ " & Numserie & " _ " & Jour
   '\***************************************************************************************************************************
    Lechemin = "C:\Documents and Settings\JFL CONTROLE\Bureau\Trames\CONTROLES CLIENTS\"
    
    If Dir(Lechemin & NomRep, 16) = "" Then MkDir Lechemin & NomRep
       
    ActiveWorkbook.SaveAs Lechemin & NomRep & "\" & LeFichier

    ActiveWorkbook.ActiveSheet.Select
    Cells.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
   '\***************************************************************************************************************************
        ThisWorkbook.Close SaveChanges:=True
   '\***************************************************************************************************************************
    Application.ScreenUpdating = True
End Sub
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Intersect(Target, Range("K35:Z35")) Is Nothing Then Exit Sub

    Dim rng As Range
    Dim Clients As Worksheet
    Dim x As Range
    Dim Lechemin As String
    Dim MonClasseur As Excel.Workbook
    Dim WB1 As Workbook
    
    Set WB1 = ThisWorkbook
    Lechemin = "C:\Documents and Settings\JFL CONTROLE\Bureau\Mes Clients\Mes Clients"

    Set MonClasseur = Excel.Workbooks.Open(Lechemin)
    Windows("APPARAUX.xls").Activate 'Cest ici que j'ai l'erreur quand j'utilise la macro précédente
    Worksheets("Page 1").Select
    Set rng = Worksheets("Page 1").Range("K35")
    Set Clients = MonClasseur.Sheets("Feuil1")
        Set x = Clients.Columns("A:G").Find(Range("K35").Value, , xlValues, xlWhole, , , False)
        If Not x Is Nothing Then
            Range("K36").Value = x.Offset(0, 1).Value
            Range("I37").Value = x.Offset(0, 2).Value
            Range("I38").Value = x.Offset(0, 3).Value
            Range("I39").Value = x.Offset(0, 4).Value
            Range("K41").Value = x.Offset(0, 5).Value
            Range("K42").Value = x.Offset(0, 6).Value
            
       If Range("K35") = "" Then
            Range("K36").Value = ""
            Range("I37").Value = ""
            Range("I38").Value = ""
            Range("I39").Value = ""
            Range("K41").Value = ""
            Range("K42").Value = ""
        End If

    Set rng = Worksheets("Page 1").Range("Z35")
    Set Clients = MonClasseur.Sheets("Feuil1")
    Set x = Clients.Columns("A:G").Find(Range("Z35").Value, , xlValues, xlWhole, , , False)
        If Not x Is Nothing Then
            Range("Z36").Value = x.Offset(0, 1).Value
            Range("X37").Value = x.Offset(0, 2).Value
            Range("X38").Value = x.Offset(0, 3).Value
            Range("X39").Value = x.Offset(0, 4).Value
            Range("Z41").Value = x.Offset(0, 5).Value
            Range("Z42").Value = x.Offset(0, 6).Value
        If Range("Z35") = "" Then
            Range("X36").Value = ""
            Range("X37").Value = ""
            Range("X38").Value = ""
            Range("X39").Value = ""
            Range("Z41").Value = ""
            Range("Z42").Value = ""
        End If

 MonClasseur.Close

Application.ScreenUpdating = True
Application.EnableEvents = True
End If
End If
End Sub
 

Arpette

XLDnaute Impliqué
Re : Vba Problème d'enchainement d'instruction

Bonjour à toutes et à tous,

J'ai problème avec ma macro, quand je cliques un le bouton enregister, je veux qu'elle s'exécute avec le code du module 4 et qu'elle ferme le classeur. J'ai également du code sur la feuille 1 qui fonctionne quand je l'utilise pour ma rechercheV.
Le problème est, que si je cliques sur enregistrer, le code se déroule correctement, mais il enchaine sur la feuille 1, il ouvre le fichier "Mes Clients" et ensuite j'ai un message comme quoi "Windows("APPARAUX.xls").Activate" l'indice n'appartient pas à la sélection. D'où mes questions :
pourquoi à l'enregistrement mon classeur ne se ferme pas et pourquoi quand il enchaine sur la feuille 1, j'ai une erreur.
Merci de votre aide.

Code:
Sub Enregister()
    ' Enregistrer Sous
    
    Dim Lechemin As String
    Dim LeFichier As String
    Dim NomRep As String
    
   '\***************************************************************************************************************************
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    Lechemin = ActiveWorkbook.Path
            
    Nom = Cells(4, 3)
        
    NomClient = Cells(35, 11).Value
    
    NomRep = NomClient
    
    Marque = Cells(9, 8).Value
    
    Numserie = Cells(11, 8).Value
              
    Jour = Format(Cells(45, 9), "dd-MM-YYYY")
    
    LeFichier = Nom & " _ " & NomClient & " _ " & Marque & " _ " & Numserie & " _ " & Jour
   '\***************************************************************************************************************************
    Lechemin = "C:\Documents and Settings\JFL CONTROLE\Bureau\Trames\CONTROLES CLIENTS\"
    
    If Dir(Lechemin & NomRep, 16) = "" Then MkDir Lechemin & NomRep
       
    ActiveWorkbook.SaveAs Lechemin & NomRep & "\" & LeFichier

    ActiveWorkbook.ActiveSheet.Select
    Cells.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
   '\***************************************************************************************************************************
        ThisWorkbook.Close SaveChanges:=True
   '\***************************************************************************************************************************
    Application.ScreenUpdating = True
End Sub
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Intersect(Target, Range("K35:Z35")) Is Nothing Then Exit Sub

    Dim rng As Range
    Dim Clients As Worksheet
    Dim x As Range
    Dim Lechemin As String
    Dim MonClasseur As Excel.Workbook
    Dim WB1 As Workbook
    
    Set WB1 = ThisWorkbook
    Lechemin = "C:\Documents and Settings\JFL CONTROLE\Bureau\Mes Clients\Mes Clients"

    Set MonClasseur = Excel.Workbooks.Open(Lechemin)
    Windows("APPARAUX.xls").Activate 'Cest ici que j'ai l'erreur quand j'utilise la macro précédente
    Worksheets("Page 1").Select
    Set rng = Worksheets("Page 1").Range("K35")
    Set Clients = MonClasseur.Sheets("Feuil1")
        Set x = Clients.Columns("A:G").Find(Range("K35").Value, , xlValues, xlWhole, , , False)
        If Not x Is Nothing Then
            Range("K36").Value = x.Offset(0, 1).Value
            Range("I37").Value = x.Offset(0, 2).Value
            Range("I38").Value = x.Offset(0, 3).Value
            Range("I39").Value = x.Offset(0, 4).Value
            Range("K41").Value = x.Offset(0, 5).Value
            Range("K42").Value = x.Offset(0, 6).Value
            
       If Range("K35") = "" Then
            Range("K36").Value = ""
            Range("I37").Value = ""
            Range("I38").Value = ""
            Range("I39").Value = ""
            Range("K41").Value = ""
            Range("K42").Value = ""
        End If

    Set rng = Worksheets("Page 1").Range("Z35")
    Set Clients = MonClasseur.Sheets("Feuil1")
    Set x = Clients.Columns("A:G").Find(Range("Z35").Value, , xlValues, xlWhole, , , False)
        If Not x Is Nothing Then
            Range("Z36").Value = x.Offset(0, 1).Value
            Range("X37").Value = x.Offset(0, 2).Value
            Range("X38").Value = x.Offset(0, 3).Value
            Range("X39").Value = x.Offset(0, 4).Value
            Range("Z41").Value = x.Offset(0, 5).Value
            Range("Z42").Value = x.Offset(0, 6).Value
        If Range("Z35") = "" Then
            Range("X36").Value = ""
            Range("X37").Value = ""
            Range("X38").Value = ""
            Range("X39").Value = ""
            Range("Z41").Value = ""
            Range("Z42").Value = ""
        End If

 MonClasseur.Close

Application.ScreenUpdating = True
Application.EnableEvents = True
End If
End If
End Sub
Bonsoir le forum, personne à une idée....
@+
 

Arpette

XLDnaute Impliqué
Re : Vba Problème d'enchainement d'instruction

Salut Arpette,
Je ne comprend pas vraiment le problème, mais tu n'ouvre jamais le fichier APPARAUX.xls.
Cordialement

Bonsoir Efgé, si dans les deux cas j'ouvre le fichier Apparaux, le problème est quand je cliques sur le bouton enregistrer qui est rattaché à un module, la macro enchaine sur la feuille 1 qui ouvre le classeur "mes clients" et ensuite elle ne revient pas sur le classeur "Apparaux" et bug puisque je ne suis pas sur le bon classeur.
@+
 

Efgé

XLDnaute Barbatruc
Re : Vba Problème d'enchainement d'instruction

Re
Avant de faire dormir mes yeux,
Essai de déclarer toutes tes variables en Public.
Ensuite avec des points d'arret regarde où tu en est.
D'autres pourront surement trouver ....
Cordialement
 

Pierrot93

XLDnaute Barbatruc
Re : Vba Problème d'enchainement d'instruction

Bonjour,

pas bien compris, mais si tu as du code dans l'événement "change" d'une feuille, normal que celui-ci se déclenche si ta procédure "enregistrer" agit sur cette même feuille :
Code:
Cells.Select
    Selection.Copy
    Selection.PasteSpecial

bonne journée
@+
 

Arpette

XLDnaute Impliqué
Re : Vba Problème d'enchainement d'instruction

Bonjour,

pas bien compris, mais si tu as du code dans l'événement "change" d'une feuille, normal que celui-ci se déclenche si ta procédure "enregistrer" agit sur cette même feuille :
Code:
Cells.Select
    Selection.Copy
    Selection.PasteSpecial

bonne journée
@+

Bonjour Pierrot et merci de t'intéresser à mon problème. Oui le bouton "enregistrer" agit sur la même feuille que l'évènement "change" et je pense que le problème vient du fait qu'à l'enregistrement, je fais enregistrer sous ( avec non différent)et je ferme le classeur d'origine. Donc quand l'évenement "change" se lance, il ne trouve plus le classeur d'origine qu'il doit activer. Alors comment faire pour que l'évenement "change" ne se déclanche pas après l'enregistrement.

Merci pour ton aide.
@+
 

Pierrot93

XLDnaute Barbatruc
Re : Vba Problème d'enchainement d'instruction

Re,

désactive peut être ponctuellement les procédures événementielles, comme effectué dans la procédure "change" d'ailleurs :
Code:
Application.EnableEvents = False
'ton code
Application.EnableEvents = True

@+
 

Arpette

XLDnaute Impliqué
Re : Vba Problème d'enchainement d'instruction

Re,

désactive peut être ponctuellement les procédures événementielles, comme effectué dans la procédure "change" d'ailleurs :
Code:
Application.EnableEvents = False
'ton code
Application.EnableEvents = True

@+
re, Pierrot j'ai mis les codes en début et fin de mon module enregistrer, ça a fonctionné, mais maintenant plus aucune macro avec des procédures évenementielles
@+
 

Pierrot93

XLDnaute Barbatruc
Re : Vba Problème d'enchainement d'instruction

Re,

l'instruction ci-dessous n'a pas dû être exécutée :
Code:
Application.EnableEvents = True
lance la manuellement... et teste ensuite le code pas à pas pour voir ce qui cloche.... touche F8 dans l'éditeur vba en mettant un point d'arrêt sur les événementielles...
 

Arpette

XLDnaute Impliqué
Re : Vba Problème d'enchainement d'instruction

Re,

l'instruction ci-dessous n'a pas dû être exécutée :
Code:
Application.EnableEvents = True
lance la manuellement... et teste ensuite le code pas à pas pour voir ce qui cloche.... touche F8 dans l'éditeur vba en mettant un point d'arrêt sur les événementielles...

Re, merci Pierrot en fait je fermais le classeur avant de remettre l'évenementielle à true. Par contre, j'ai 45 macros où je dois corriger ce module. Y-t-il un moyen, pour modifier en masse.
Merci pour ton aide
@+