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
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
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.