Exécuter macro si condition respectée

Bonsoir le forum,

J'ai un ptit souci dans l'exécution de ma macro.

Comment faire pour que lors de l'exécution d'une macro, elle passe à la feuille suivante si elle ne trouve pas de données à traiter dans la feuille actuelle?

Je vous joins mon fichier pour plus de clarté: fichier

Dans mon cas, vu que, par exemple, la feuille 'Médiation' ne contient pas de données je voudrais que la macro "Toutesmacro" ne s'exécute pas complètement.

Merci pour votre aide précieuse

Salut le forum

Vba-New, tu devrais revoir le principe d'inclure des Call's

C'est pas très esthétique comme principe.

Mytå

Bonjour,

on teste la colonne D

Dim Sh As Worksheet
Sub Toutesmacro2()
Dim Nbv As Long
    For Each Sh In Sheets
        Sh.Select
        Nbv = WorksheetFunction.CountA(Range("d9:d500"))
        If Nbv > 0 And Sh.Name <> "Récap" And Sh.Name <> "Suivi magasin " Then
                Application.ScreenUpdating = False
                Application.Calculation = xlCalculationManual
                'Call Défusion
                'suite traitement
                Application.Calculation = xlCalculationAutomatic
        End If
    Next Sh
Call NettoieEtDerniereCellule
End Sub

Amicalement

Claude.

Merci dubois pour la macro, c'est ce que je cherchais, merci myta pour le conseil (mais vu qu'on m'ai aidé à faire la macro et que je débute dans le VBA, je ne sais pas encore ce qui faut ou faut pas utiliser).

Est-ce que quelqu'un (dubois peut-être ) pourrait me dire s'il est possible de faire un msgbox qui me demanderait si je veux malgré tout exécuter la macro? Même s'il n'y a pas de données?

re,

Sub Toutesmacro2()
Dim Nbv As Long, Rep As Integer
    For Each Sh In Sheets
        Sh.Select
        Nbv = WorksheetFunction.CountA(Range("d9:d500"))
        If Sh.Name <> "Récap" And Sh.Name <> "Suivi magasin " Then
            If Nbv = 0 Then
            Rep = MsgBox("Aucune donnée ! on traite quand même ?", vbYesNo + vbCritical + vbDefaultButton2, "Tableaux ")
            If Rep <> vbYes Then GoTo Saute
                Application.ScreenUpdating = False
                Application.Calculation = xlCalculationManual
                'Call Défusion
                'suite traitement
                Application.Calculation = xlCalculationAutomatic
            End If
        End If
Saute:
    Next Sh
Call NettoieEtDerniereCellule
End Sub

Claude.

Salut le forum

Mauvaise ficelle , désolé

Mytå

Bonjour à tous,

Cette version t'indique la feuille en question,

Dim Sh As Worksheet
Sub Toutesmacro3()
Dim Nbv As Long, Rep As Integer
    Application.ScreenUpdating = False
    For Each Sh In Sheets
        Sh.Activate
        Nbv = WorksheetFunction.CountA(Range("d9:d500"))
        If Sh.Name <> "Récap" And Sh.Name <> "Suivi magasin " Then
            If Nbv < 1 Then
                Rep = MsgBox("Aucune donnée ! sur : " & Sh.Name & Chr(10) & _
                "on traite quand même ?", vbYesNo + vbCritical + vbDefaultButton2, "Excel-Pratique")
                If Rep = vbYes Then
                    Application.Calculation = xlCalculationManual
                    'Call Défusion
                    'suite traitement
                    Application.Calculation = xlCalculationAutomatic
                End If
            End If
        End If
    Next Sh
Call NettoieEtDerniereCellule
End Sub

Bonne journée

Claude.

Salut dubois et forum,

La macro que tu viens de me fournir généreusement ne s'exécute sur aucune feuille si on répond NON. Et si on répond OUI, elle s'exécute QUE sur les feuilles sur lesquelles je ne veux pas qu'elle s'exécute!

Manque-t-il un bout de code?

Bonjour,

Voici peut-être une solution :

Sub Toutesmacro3()
    Dim Nbv As Long, Rep As Integer

    Application.ScreenUpdating = False
    For Each Sh In Sheets
        Sh.Activate
        Nbv = WorksheetFunction.CountA(Range("d9:d500"))
        Rep = vbYes

        If Sh.Name <> "Récap" And Sh.Name <> "Suivi magasin " Then
            If Nbv < 1 Then Rep = MsgBox("Aucune donnée ! sur : " & Sh.Name & Chr(10) & _
                "on traite quand même ?", vbYesNo + vbCritical + vbDefaultButton2, "Excel-Pratique")

            If Rep = vbYes Then
                Application.Calculation = xlCalculationManual
                'Call Défusion
                'suite traitement
                Application.Calculation = xlCalculationAutomatic
            End If
        End If
    Next Sh

    Call NettoieEtDerniereCellule
End Sub

Merci readi, mais ça ne marche toujours pas.

J'essaie de trouver une solution de mon côté

Salut le forum,

Voilà ce que j'ai trouvé :

Sub Toutesmacro3()
Dim Nbv As Long, Rep As Integer
    Application.ScreenUpdating = False
    For Each Sh In Sheets
        Sh.Activate
        Nbv = WorksheetFunction.CountA(Range("D9:D" & [C65536].End(xlUp).Row))
        If Sh.Name <> "Récap" And Sh.Name <> "Suivi magasin " Then
            If Nbv < 1 Then
                Rep = MsgBox("Aucune donnée ! sur : " & Sh.Name & Chr(10) & _
                "on traite quand même ?", vbYesNo + vbCritical + vbDefaultButton2, "Excel-Pratique")
                If Rep = vbYes Then
                    Application.Calculation = xlCalculationManual
            Call Défusion
            Call corrigeOrtho
            Call supprLign
            Call créerColA
            Call donnePUTTC
            Call calculMontant
            Call tridécroi
            Call calcCumulRef
            Call calcCumulMontant
            Call calcCumulPourcent
            Call calcLimite
            Call Classe
            Call fusion
            Call intitulé
                    Application.Calculation = xlCalculationAutomatic
                End If
            Else
            Call Défusion
            Call corrigeOrtho
            Call supprLign
            Call créerColA
            Call donnePUTTC
            Call calculMontant
            Call tridécroi
            Call calcCumulRef
            Call calcCumulMontant
            Call calcCumulPourcent
            Call calcLimite
            Call Classe
            Call fusion
            Call intitulé

            End If
        End If
    Next Sh
Call NettoieEtDerniereCellule
End Sub

Ca marche mais le temps d'exécution est beaucoup plus long! Est-il possible de réduire celui-ci?

6demo.xlsx (42.30 Ko)

re,

Excuses ! je voulais éviter le Goto,

Dim Sh As Worksheet
Sub Toutesmacro4()
Dim Nbv As Long, Rep As Integer
    For Each Sh In Sheets
        Sh.Select
        Nbv = WorksheetFunction.CountA(Range("d9:d500"))
        If Sh.Name <> "Récap" And Sh.Name <> "Suivi magasin " Then
            If Nbv = 0 Then
                Rep = MsgBox("Aucune donnée ! sur : " & Sh.Name & Chr(10) & _
                "on traite quand même ?", vbYesNo + vbCritical + vbDefaultButton2, "Excel-Pratique")
                If Rep <> vbYes Then GoTo Saute
            End If
                Application.ScreenUpdating = False
                Application.Calculation = xlCalculationManual
                'Call Défusion
                MsgBox ("Traitement") 'pour tests
                'suite traitement
                Application.Calculation = xlCalculationAutomatic
        End If
Saute:
    Next Sh
Call NettoieEtDerniereCellule
End Sub

Claude.

Merci beaucoup claude! C'est ce que je voulais!

Rechercher des sujets similaires à "executer macro condition respectee"