VBA passer à l'etape suivante

ConsultantJP

XLDnaute Occasionnel
Bonjour à tous,

J'ai crée un code VBA, un per anarchique à mon gout mais qui fonctionne très bien malgrès un petit bug dont je connais l'origine :

Mon code a pour objectif de filtrer des donnés sur une feuille d'aller filtrer en fonction du mois de faire un copier coller sur un autre classeur , et cela sur 4 feuilles différentes.

=> le problème est que si je n'ai pas de données dans une des feuilles ça bug, il faudrait que je puisse passer à la feuille suivante si le mois n'est pas présent dans la feuille.

De la meme maniere, dans le fichier en question, j'ai une boucle qui va dans x fichiers supprimer les donnés qui sont filtrés, et donc bug identique.

Voici mon code (par contre dsl, impossible de joindre le fichier car il trop lourd et confidentiel).

Si vous avez une idée ou si vous pouviez m'aiquiller, je vous en remercie bcp par avance!!

Code:
Sub FORMATAGE()

Dim MyFile, MyRep, MyOldFile

    MOI = ActiveWorkbook.Name
'
' On affiche le message d'attente
frm_Message.Show
frm_Message.Repaint

' On masque les traitements
Application.ScreenUpdating = False

' On récupère le chemin du fichier SYNTHESE
For w = 1 To Sheets.Count
    If InStr(UCase(Workbooks(w).Name), "SYNTHESE SUIVI ACTIVIT") > 0 Then
        MyRep = Workbooks(w).Path & IIf(Right(Workbooks(w).Path, 1) <> "\", "\", "")
        Exit For
    End If
Next w

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Suppression des données de la synthèse et enregistrement dans le fichier archive'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'on paramètre le fichier d'archive à ouvrir
myreparchive = MyRep & "Archive\"

MyFile = Dir(myreparchive & "Archive gestionnaire.xls")
MyOldFile = Dir(myreparchive & "Archive Données Gestionnaires" & " - " & frm_Mois.ComboBoxMois.Value & ".xls")

'on vérifie si un fichier de sauvegarde pour le mois n'a pas déjà été créé
If Dir(myreparchive & "Archive Données Gestionnaires" & " - " & frm_Mois.ComboBoxMois.Value & ".xls") <> "" Then
           
    'si oui, on va ouvrir le fichier en question, et sélectionner les dernières lignes de chaques fichier
    Workbooks.Open Filename:=myreparchive & "Archive Données Gestionnaires" & " - " & frm_Mois.ComboBoxMois.Value & ".xls"
    
    FichierArchive = ActiveWorkbook.Name

    Set wbarchive = Workbooks(MyOldFile)
    Set wsArchiveCE = wbarchive.Worksheets("Charge Entrante")
    Set wsArchiveAN = wbarchive.Worksheets("Contrôles")
    Set wsArchiveMail = wbarchive.Worksheets("NonConformité")
    Set wsArchivePertes = wbarchive.Worksheets("Suivi Pertes et Profits")
    
    intligneArchiveCE = 1
    'on récupère la dernière ligne de synthèse CE du fichier d'archive
    Do While wsArchiveCE.Cells(intligneArchiveCE, 1) <> ""
            intligneArchiveCE = intligneArchiveCE + 1
    Loop
    
    intligneArchiveAN = 1
    'on récupère la dernière ligne de synthèse AN du fichier d'archive
    Do While wsArchiveAN.Cells(intligneArchiveAN, 1) <> ""
            intligneArchiveAN = intligneArchiveAN + 1
    Loop
    
        intligneArchiveMail = 1
    'on récupère la dernière ligne de synthèse AN du fichier d'archive
    Do While wsArchiveMail.Cells(intligneArchiveMail, 1) <> ""
            intligneArchiveMail = intligneArchiveMail + 1
    Loop
        
                intligneArchivePertes = 1
    'on récupère la dernière ligne de synthèse AN du fichier d'archive
    Do While wsArchivePertes.Cells(intligneArchivePertes, 1) <> ""
            intligneArchivePertes = intligneArchivePertes + 1
    Loop
              
    'je repasse sur le fichier de synthèse d'activités
    Windows(MOI).Activate
    
    ' On sélectionne la feuille charge entrante dans le fichier de synthèse
    ActiveWorkbook.Sheets("Charges Entrantes").Activate
    
    'on sélectionne toutes les cellules
    ActiveWorkbook.Sheets("Charges Entrantes").Cells.Select
    
    'on met en place un filtre automatique avec comme critère la date choisie par le RE
    Selection.AutoFilter
    Selection.AutoFilter Field:=3, Criteria1:="" & frm_Mois.ComboBoxMois.Value
    
    'On se place sur la cellule A2
    ActiveSheet.Range("A2").Select
    
    If ActiveSheet.Range("A2").Value <> "" Then
    
        'on sélectionne toutes les données de la colone A filtrée
        ActiveSheet.Range(Selection, Selection.End(xlDown)).Select
    
        'on sélectionne toutes les lignes et on les copy
        Selection.EntireRow.Copy
                
    End If
    
    Windows(FichierArchive).Activate
    
    'on repasse sur l'onglet de synthèse
    wsArchiveCE.Activate
           
    ActiveSheet.Cells(intligneArchiveCE, 1).Select
    
    ActiveSheet.Paste
    
    Windows(MOI).Activate
    
    ' On sélectionne la feuille charge entrante dans le fichier de synthèse
    ActiveWorkbook.Sheets("Contrôles").Activate
    
    'on sélectionne toutes les cellules
    ActiveWorkbook.Sheets("Contrôles").Cells.Select
    
    'on met en place un filtre automatique avec comme critère la date choisie par le RE
    Selection.AutoFilter
    Selection.AutoFilter Field:=3, Criteria1:="" & frm_Mois.ComboBoxMois.Value
    
    'On se place sur la cellule A2
    ActiveSheet.Range("A2").Select
    
    If ActiveSheet.Range("A2").Value <> "" Then
    
        'on sélectionne toutes les données de la colone A filtrée
        ActiveSheet.Range(Selection, Selection.End(xlDown)).Select
    
        'on sélectionne toutes les lignes et on les supprime
        Selection.EntireRow.Copy
                
    End If
    
    Windows(FichierArchive).Activate
    
    'on repasse sur l'onglet de synthèse
    wsArchiveAN.Activate
    
    ActiveSheet.Cells(intligneArchiveAN, 1).Select
    
    ActiveSheet.Paste
    
    
        Windows(MOI).Activate
    ''''''''''''''''''''''''''''''
    ' On sélectionne la feuille charge entrante dans le fichier de synthèse
    ActiveWorkbook.Sheets("NonConformité").Activate
    
    'on sélectionne toutes les cellules
    ActiveWorkbook.Sheets("NonConformité").Cells.Select
    
    'on met en place un filtre automatique avec comme critère la date choisie par le RE
    Selection.AutoFilter
    Selection.AutoFilter Field:=3, Criteria1:="" & frm_Mois.ComboBoxMois.Value
    
    'On se place sur la cellule A2
    ActiveSheet.Range("A2").Select
    
    If ActiveSheet.Range("A2").Value <> "" Then
    
        'on sélectionne toutes les données de la colone A filtrée
        ActiveSheet.Range(Selection, Selection.End(xlDown)).Select
    
        'on sélectionne toutes les lignes et on les supprime
        Selection.EntireRow.Copy
                
    End If
    
    Windows(FichierArchive).Activate
    
    'on repasse sur l'onglet de synthèse
    wsArchiveMail.Activate
    
    ActiveSheet.Cells(intligneArchiveMail, 1).Select
    
    ActiveSheet.Paste
        Windows(MOI).Activate
    ''''''''''''''''''''''''''''''''''''''
    ' On sélectionne la feuille charge entrante dans le fichier de synthèse
    ActiveWorkbook.Sheets("Suivi Pertes et Profits").Activate
    
    'on sélectionne toutes les cellules
    ActiveWorkbook.Sheets("Suivi Pertes et Profits").Cells.Select
    
    'on met en place un filtre automatique avec comme critère la date choisie par le RE
    Selection.AutoFilter
    Selection.AutoFilter Field:=3, Criteria1:="" & frm_Mois.ComboBoxMois.Value
    
    'On se place sur la cellule A2
    ActiveSheet.Range("A2").Select
    
    If ActiveSheet.Range("A2").Value <> "" Then
    
        'on sélectionne toutes les données de la colone A filtrée
        ActiveSheet.Range(Selection, Selection.End(xlDown)).Select
    
        'on sélectionne toutes les lignes et on les supprime
        Selection.EntireRow.Copy
                
    End If
    
    Windows(FichierArchive).Activate
    
    'on repasse sur l'onglet de synthèse
    wsArchivePertes.Activate
    
    ActiveSheet.Cells(intligneArchivePertes, 1).Select
    
    ActiveSheet.Paste
    
    ActiveWorkbook.Save
    
    ActiveWorkbook.Close
    
    'sinon on commence la copie et on ouvrira le fichier modèle ensuite pour l'enregistrer
    Else
        
        Workbooks.Open myreparchive & MyFile, ReadOnly:=False
            
    FichierArchive = ActiveWorkbook.Name

    Set wbarchive = Workbooks(FichierArchive)
    Set wsArchiveCE = wbarchive.Worksheets("Charge Entrante")
    Set wsArchiveAN = wbarchive.Worksheets("Contrôles")
    Set wsArchiveMail = wbarchive.Worksheets("NonConformité")
    Set wsArchivePertes = wbarchive.Worksheets("Suivi Pertes et Profits")
    
    intligneArchiveCE = 1
    'on récupère la dernière ligne de synthèse CE du fichier d'archive
    Do While wsArchiveCE.Cells(intligneArchiveCE, 1) <> ""
            intligneArchiveCE = intligneArchiveCE + 1
    Loop
    
    intligneArchiveAN = 1
    'on récupère la dernière ligne de synthèse AN du fichier d'archive
    Do While wsArchiveAN.Cells(intligneArchiveAN, 1) <> ""
            intligneArchiveAN = intligneArchiveAN + 1
    Loop
    
    
        intligneArchiveMail = 1
    'on récupère la dernière ligne de synthèse AN du fichier d'archive
    Do While wsArchiveMail.Cells(intligneArchiveMail, 1) <> ""
            intligneArchiveMail = intligneArchiveMail + 1
    Loop
        
                intligneArchivePertes = 1
    'on récupère la dernière ligne de synthèse AN du fichier d'archive
    Do While wsArchivePertes.Cells(intligneArchivePertes, 1) <> ""
            intligneArchivePertes = intligneArchivePertes + 1
    Loop
        
        
    
    'je repasse sur le fichier de synthèse d'activités
    Windows(MOI).Activate
    
    ' On sélectionne la feuille charge entrante dans le fichier de synthèse
    ActiveWorkbook.Sheets("Charges Entrantes").Activate
    
    'on sélectionne toutes les cellules
    ActiveWorkbook.Sheets("Charges Entrantes").Cells.Select
    
    'on met en place un filtre automatique avec comme critère la date choisie par le RE
    Selection.AutoFilter
    Selection.AutoFilter Field:=3, Criteria1:="" & frm_Mois.ComboBoxMois.Value
    
    'On se place sur la cellule A2
    ActiveSheet.Range("A2").Select
    
    If ActiveSheet.Range("A2").Value <> "" Then
    
        'on sélectionne toutes les données de la colone A filtrée
        ActiveSheet.Range(Selection, Selection.End(xlDown)).Select
    
        'on sélectionne toutes les lignes et on les copy
        Selection.EntireRow.Copy
                
    End If
    
    Windows(FichierArchive).Activate
    
    'on repasse sur l'onglet de synthèse
    wsArchiveCE.Activate
           
    ActiveSheet.Cells(intligneArchiveCE, 1).Select
    
    ActiveSheet.Paste
    
    Windows(MOI).Activate
    
    
    ' On sélectionne la feuille charge entrante dans le fichier de synthèse
    ActiveWorkbook.Sheets("Contrôles").Activate
    
    'on sélectionne toutes les cellules
    ActiveWorkbook.Sheets("Contrôles").Cells.Select
    
    'on met en place un filtre automatique avec comme critère la date choisie par le RE
    Selection.AutoFilter
    Selection.AutoFilter Field:=3, Criteria1:="" & frm_Mois.ComboBoxMois.Value
    
    'On se place sur la cellule A2
    ActiveSheet.Range("A2").Select
    
    If ActiveSheet.Range("A2").Value <> "" Then
    
        'on sélectionne toutes les données de la colone A filtrée
        ActiveSheet.Range(Selection, Selection.End(xlDown)).Select
    
        'on sélectionne toutes les lignes et on les supprime
        Selection.EntireRow.Copy
                
    End If
    
    Windows(FichierArchive).Activate
    
    'on repasse sur l'onglet de synthèse
    wsArchiveAN.Activate
    
    ActiveSheet.Cells(intligneArchiveAN, 1).Select
    
    ActiveSheet.Paste
    
    
        Windows(MOI).Activate
    ''''''''''''''''''''''''''''''
    ' On sélectionne la feuille charge entrante dans le fichier de synthèse
    ActiveWorkbook.Sheets("NonConformité").Activate
    
    'on sélectionne toutes les cellules
    ActiveWorkbook.Sheets("NonConformité").Cells.Select
    
    'on met en place un filtre automatique avec comme critère la date choisie par le RE
    Selection.AutoFilter
    Selection.AutoFilter Field:=3, Criteria1:="" & frm_Mois.ComboBoxMois.Value
    
    'On se place sur la cellule A2
    ActiveSheet.Range("A2").Select
    
    If ActiveSheet.Range("A2").Value <> "" Then
    
        'on sélectionne toutes les données de la colone A filtrée
        ActiveSheet.Range(Selection, Selection.End(xlDown)).Select
    
        'on sélectionne toutes les lignes et on les supprime
        Selection.EntireRow.Copy
                
    End If
    
    Windows(FichierArchive).Activate
    
    'on repasse sur l'onglet de synthèse
    wsArchiveMail.Activate
    
    ActiveSheet.Cells(intligneArchiveMail, 1).Select
    
    ActiveSheet.Paste
        Windows(MOI).Activate
    ''''''''''''''''''''''''''''''''''''''
    
    ' On sélectionne la feuille charge entrante dans le fichier de synthèse
    ActiveWorkbook.Sheets("Suivi Pertes et Profits").Activate
    
    'on sélectionne toutes les cellules
    ActiveWorkbook.Sheets("Suivi Pertes et Profits").Cells.Select
    
    'on met en place un filtre automatique avec comme critère la date choisie par le RE
    Selection.AutoFilter
    Selection.AutoFilter Field:=3, Criteria1:="" & frm_Mois.ComboBoxMois.Value
    
    'On se place sur la cellule A2
    ActiveSheet.Range("A2").Select
    
    If ActiveSheet.Range("A2").Value <> "" Then
    
        'on sélectionne toutes les données de la colone A filtrée
        ActiveSheet.Range(Selection, Selection.End(xlDown)).Select
    
        'on sélectionne toutes les lignes et on les supprime
        Selection.EntireRow.Copy
        

 
   
    End If
                
   ' on repasse sur l'onglet de synthèse
    wsArchivePertes.Activate
    
    ActiveSheet.Cells(intligneArchivePertes, 1).Select
    
    ActiveSheet.Paste
    Windows(FichierArchive).Activate
    

        
        'on enregistre le nouveau fichier avec comme extension le mois dont on a archivé les données
        ActiveWorkbook.SaveAs Filename:=myreparchive & "Archive Données Gestionnaires" & " - " & frm_Mois.ComboBoxMois.Value & ".xls"
        
        'on ferme le fichier créé
        ActiveWorkbook.Close
     
End If

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Suppression des données dans les fichiers gestionnaires'
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''

' On paramètre les noms des fichiers à ouvrir
MyFile = Dir(MyRep & "Suivi d'Activité *.xls")

    Do While MyFile <> ""    ' Commence la boucle.
        Workbooks.Open MyRep & MyFile, ReadOnly:=False

        ' On reférence le classeur et la feuille Distante
        Set wbGest = Workbooks(MyFile)
        Set wsGestCE = wbGest.Worksheets("Charge Entrante")
        Set wsGestAN = wbGest.Worksheets("Contrôles")
        Set wsGestMail = wbGest.Worksheets("NonConformité")
        Set wsGestPertes = wbGest.Worksheets("Suivi Pertes et Profits")
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'Suppression des données dans la feuille Charge entrante'
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''

        ' On sélectionne la feuille charge entrante dans le fichier des gestionnaires
        wsGestCE.Activate

        'on sélectionne toutes les cellules
        wsGestCE.Cells.Select

        'on met en place un filtre automatique avec comme critère la date choisie par le RE
        Selection.AutoFilter
        Selection.AutoFilter Field:=3, Criteria1:="" & frm_Mois.ComboBoxMois.Value


        'On se place sur la cellule A2
        ActiveSheet.Range("A2").Select

        If ActiveSheet.Range("A2").Value <> "" Then
            'on sélectionne toutes les données de la colone A filtrée
            ActiveSheet.Range(Selection, Selection.End(xlDown)).Select

            'on sélectionne toutes les lignes et on les supprime
            Selection.EntireRow.Delete
        End If

        'on resélectionne l'ensemble des cellules
        wsGestCE.Cells.Select

        'on enlève le filtre automatique
        Selection.AutoFilter

        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'Suppresion des données dans la feuille Activités Annexes'
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        ' On sélectionne la feuille charge entrante dans le fichier des gestionnaires
        wsGestAN.Activate

        'on sélectionne toutes les cellule
        wsGestAN.Cells.Select

        'on met en place un filtre automatique avec comme critère la date choisie par le RE
        Selection.AutoFilter
        Selection.AutoFilter Field:=3, Criteria1:="" & frm_Mois.ComboBoxMois.Value

        'On se place sur la cellule A2
        ActiveSheet.Range("A2").Select

        If ActiveSheet.Range("A2").Value <> "" Then
            'on sélectionne toutes les données de la colone A filtrée
            ActiveSheet.Range(Selection, Selection.End(xlDown)).Select

            'on sélectionne toutes les lignes et on les supprime
            Selection.EntireRow.Delete
        End If

        'on resélectionne l'ensemble des cellules
        wsGestAN.Cells.Select

        'on enlève le filtre automatique
        Selection.AutoFilter
        
                ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'Suppresion des données dans la feuille Activités MAILS
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        ' On sélectionne la feuille charge entrante dans le fichier des gestionnaires
        wsGestMail.Activate

        'on sélectionne toutes les cellule
        wsGestMail.Cells.Select

        'on met en place un filtre automatique avec comme critère la date choisie par le RE
        Selection.AutoFilter
        Selection.AutoFilter Field:=3, Criteria1:="" & frm_Mois.ComboBoxMois.Value

        'On se place sur la cellule A2
        ActiveSheet.Range("A2").Select

        If ActiveSheet.Range("A2").Value <> "" Then
            'on sélectionne toutes les données de la colone A filtrée
            ActiveSheet.Range(Selection, Selection.End(xlDown)).Select

            'on sélectionne toutes les lignes et on les supprime
            Selection.EntireRow.Delete
        End If

        'on resélectionne l'ensemble des cellules
        wsGestMail.Cells.Select

        'on enlève le filtre automatique
        Selection.AutoFilter

                ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'Suppresion des données dans la feuille Activités MAILS
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        ' On sélectionne la feuille charge entrante dans le fichier des gestionnaires
        wsGestPertes.Activate

        'on sélectionne toutes les cellule
        wsGestPertes.Cells.Select

        'on met en place un filtre automatique avec comme critère la date choisie par le RE
        Selection.AutoFilter
        Selection.AutoFilter Field:=3, Criteria1:="" & frm_Mois.ComboBoxMois.Value

        'On se place sur la cellule A2
        ActiveSheet.Range("A2").Select

        If ActiveSheet.Range("A2").Value <> "" Then
            'on sélectionne toutes les données de la colone A filtrée
            ActiveSheet.Range(Selection, Selection.End(xlDown)).Select

            'on sélectionne toutes les lignes et on les supprime
            Selection.EntireRow.Delete
        End If

        'on resélectionne l'ensemble des cellules
        wsGestPertes.Cells.Select

        'on enlève le filtre automatique
        Selection.AutoFilter


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Enregistrement et fermeture du fichier des gestionnaires'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

    ' On sélectionne la feuille MENU
    wbGest.Worksheets("Menu").Select

    ' On quitte en sauvegardant
    wbGest.Close savechanges:=True

    MyFile = Dir

    Loop

    Windows(MOI).Activate
    Sheets("Menu").Select
    
    Sheets("Charges Entrantes").Activate
    Rows("1:1").Select
    Selection.AutoFilter
    Rows("2:2").Select
    Selection.EntireRow.Hidden = True
    
    Sheets("Contrôles").Activate
    Rows("1:1").Select
    Selection.AutoFilter
    Rows("2:2").Select
    Selection.EntireRow.Hidden = True
 
    Sheets("NonConformité").Activate
    Rows("1:1").Select
    Selection.AutoFilter
    Rows("2:2").Select
    Selection.EntireRow.Hidden = True
 
     Sheets("Suivi Pertes et Profits").Activate
    Rows("1:1").Select
    Selection.AutoFilter
    Rows("2:2").Select
    Selection.EntireRow.Hidden = True
 
     Sheets("Menu").Select
 
    ' On masque le message d'attente
    Unload frm_Message
    
    Synthèse
    
    'Affichage de la confirmation de l'archivage des données
    MsgBox "Les données ont été archivées dans le dossier " & myreparchive & ". Elles ont été supprimées des fichiers des gestionnaires et la synthèse à été mise à jour."

End Sub
 
Dernière édition:
C

Compte Supprimé 979

Guest
Re : VBA passer à l'etape suivante

Bonsoir ConsultantJP et bienvenue sur le forum

Lorsque tu as des erreurs,
tu peux utiliser : On Error Resume Next et On Error Goto 0

La récupération de la dernière ligne d'un tableau ne se fait pas
par : Do .... While (trop long)

Tu trouveras ci joint un fichier avec ton code modifié
sous toute réserve pour le bon fonctionnement

A+
 

Pièces jointes

  • ConsultantJP.xls
    48 KB · Affichages: 138
  • ConsultantJP.xls
    48 KB · Affichages: 126
  • ConsultantJP.xls
    48 KB · Affichages: 136

Discussions similaires

Réponses
21
Affichages
1 K

Statistiques des forums

Discussions
314 655
Messages
2 111 604
Membres
111 217
dernier inscrit
aladinkabeya2