Utiliser une macro sur plusieurs feuilles

Bonjour,

Actuellement j'utilise la macro ci-dessous sur la feuille active, je souhaiterais avoir la possibilité de l'utiliser sur toutes les feuilles ormis les onglet "Feuil1", "Feuil2" et "Feuil3".

Sub valider()
'
' valider Macro
'

'
    Set wst = Worksheets("Recap")
    Set wss = Worksheets(ActiveSheet.Name)
    ' dernière ligne+1 de récap sera par défaut la ligne où l'on va sauver les données
    dlt = wst.Range("A" & wst.Rows.Count).End(xlUp).Row + 1
    ' on recherche la parcelle dans Base parcelle
    Set re = wst.Range("A1:A" & dlt).Find(wss.Range("A3"), lookat:=xlWhole)
    ' si on la trouve
    If Not re Is Nothing Then
     ans = MsgBox("il existe déjà des données pour cette parcelle, on les remplace ? Lors de la validation des données veillez vérifier si la parcelle est également saisie dans les tableaux de production", vbYesNo)
     If ans = vbYes Then
      ' on veut remplacer on mémorise la ligne à modifier
      dlt = re.Row
     Else
     'on ne veut pas remplacer, c'est fini
      Exit Sub
     End If
    End If
    ' à adapter
    ' copie des données de enregistrement vers recap, dans la ligne dlt
    'Copie du numéro
     wst.Range("A" & dlt) = wss.Range("A3")
     wst.Range("B" & dlt) = wss.Range("B3")
     wst.Range("B" & dlt).NumberFormat = "0.00"
Set wst = Nothing
    Set re = Nothing
    Set wss = Nothing
   End Sub

Merci

Bonjour Doudel, bonjour le forum,

Essaie comme ça :

Sub valider()
Dim wst As Worksheet
Dim wss As Worksheet
Dim dlt As Long
Dim re As Range
Dim ans As intteger

Select Case ActiveSheet.Name
    Case "Feuil1", "Feuil2", "Feuil3"
        Exit Sub
    Case Else
        Set wst = Worksheets("Recap")
        Set wss = Worksheets(ActiveSheet.Name)
        ' dernière ligne+1 de récap sera par défaut la ligne où l'on va sauver les données
        dlt = wst.Range("A" & wst.Rows.Count).End(xlUp).Row + 1
        ' on recherche la parcelle dans Base parcelle
        Set re = wst.Range("A1:A" & dlt).Find(wss.Range("A3"), lookat:=xlWhole)
        ' si on la trouve
        If Not re Is Nothing Then
            ans = MsgBox("il existe déjà des données pour cette parcelle, on les remplace ? Lors de la validation des données veillez vérifier si la parcelle est également saisie dans les tableaux de production", vbYesNo)
            If ans = vbYes Then
            ' on veut remplacer on mémorise la ligne à modifier
                dlt = re.Row
            Else
                'on ne veut pas remplacer, c'est fini
                Exit Sub
            End If
        End If
        ' à adapter
        ' copie des données de enregistrement vers recap, dans la ligne dlt
        'Copie du numéro
        wst.Range("A" & dlt) = wss.Range("A3")
        wst.Range("B" & dlt) = wss.Range("B3")
        wst.Range("B" & dlt).NumberFormat = "0.00"
        Set wst = Nothing
        Set re = Nothing
        Set wss = Nothing
End Select
End Sub

Ca ne change rien, ça ne modifie que la feuille active

Re,

D'accord !... Je n'étais pas sûr tu voulais modifier chaque fois toutes les feuilles sauf les trois ou si tu voulais modifier la feuille active sauf si c'était une des trois. Le nouveau code pour la première option :

Sub valider()
Dim O As Worksheet
Dim wst As Worksheet
Dim wss As Worksheet
Dim dlt As Long
Dim re As Range
Dim ans As intteger

For Each O In Sheets
    Select Case ActiveSheet.Name
        Case "Feuil1", "Feuil2", "Feuil3"
    Case Else
        Set wst = Worksheets("Recap")
        Set wss = O
        ' dernière ligne+1 de récap sera par défaut la ligne où l'on va sauver les données
        dlt = wst.Range("A" & wst.Rows.Count).End(xlUp).Row + 1
        ' on recherche la parcelle dans Base parcelle
        Set re = wst.Range("A1:A" & dlt).Find(wss.Range("A3"), lookat:=xlWhole)
        ' si on la trouve
        If Not re Is Nothing Then
            ans = MsgBox("il existe déjà des données pour cette parcelle, on les remplace ? Lors de la validation des données veillez vérifier si la parcelle est également saisie dans les tableaux de production", vbYesNo)
            If ans = vbYes Then
                ' on veut remplacer on mémorise la ligne à modifier
                dlt = re.Row
            Else
                'on ne veut pas remplacer, c'est fini
                Exit Sub
            End If
        End If
        ' à adapter
        ' copie des données de enregistrement vers recap, dans la ligne dlt
        'Copie du numéro
        wst.Range("A" & dlt) = wss.Range("A3")
        wst.Range("B" & dlt) = wss.Range("B3")
        wst.Range("B" & dlt).NumberFormat = "0.00"
        Set wst = Nothing
        Set re = Nothing
        Set wss = Nothing
    End Select
nest O
End Sub

Effectivement je souhaite que la macro travail sur toutes les feuilles sauf les trois citées, j'ai testé le nouveau code mais j'ai une erreur qui me dit que :

capture

Re,

Vu que visiblement tu as l'air bègue des mains (expression sétoise !), envoie ton fichier !...

ThauThème a écrit :

Re,

Vu que visiblement tu as l'air bègue des mains (expression sétoise !), envoie ton fichier !...

Ça doit être ça le problème, je me disais aussi

14placettes.xlsm (29.89 Ko)

bonjour

je pense a un truc comme ça

et mettre les codeName ses mieux

Sub Test1()
Dim Ws As Worksheet
   For Each Ws In Worksheets
      Select Case Ws.Name
         Case Feuil1.Name, Feuil2.Name, Feuil3.Name
         Case Else
            Sheets(Ws.Name).Select
             MsgBox Ws.Name
         ' Code
      End Select
   Next
End Sub

A+

Maurice

Re,

Bon comme disait Coluche, Y'a des fois, J'm'demande !...

Dans ton exemple il n'y a aucun onglet nommé Feuil1, Feuil2 ou Feuil3. Tu veux exclure trois onglets et ton fichier exemple n'en comporte que 4. Ce qui revient à agir sur un seul. C'est du foutage de gueule ?!...

À Sète on me parle plus de bégaiement des mains dans pareil cas mais plutôt de trumasse épaisse...

ThauThème a écrit :

Re,

Bon comme disait Coluche, Y'a des fois, J'm'demande !...

Dans ton exemple il n'y a aucun onglet nommé Feuil1, Feuil2 ou Feuil3. Tu veux exclure trois onglets et ton fichier exemple n'en comporte que 4. Ce qui revient à agir sur un seul. C'est du foutage de gueule ?!...

À Sète on me parle plus de bégaiement des mains dans pareil cas mais plutôt de trumasse épaisse...

Je te remercie pour ton aide, je vais chercher.

Rechercher des sujets similaires à "utiliser macro feuilles"