• Initiateur de la discussion Initiateur de la discussion atlonia
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

atlonia

XLDnaute Occasionnel
Bonsoir a tous,

J'ai une gestion d'erreur a declarer:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim NF As Worksheet
If Not Intersect(Target, Range("a2")) Is Nothing Then
With Range("A1:O39")
.Copy
Set NF = Worksheets.Add
NF.Range("A1").PasteSpecial xlPasteAll
NF.Name = "SEM " & Me.Range("A2")
End With
Range("B4:O39").ClearContents
End If
Me.Activate
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

Pour la ligne en gras, générée sur le classeur ci-joint lorsque je change le N° de semaine de la case "A2" et que je reviens sur celle que je viens de quitter.

Aprés avoir lu quelques pages sur le Web a ce sujet, j'avoue que je n'ai pas trés bien compris ce qu'il fallait que je fasse avec "On error Resume next" qui semble être le solution, a moins que je ne me trompe.

Quelqu'un peut-il éclairer ma lanterne?

Merci du temps que vous voudrez bien m'accorder...!
 

Pièces jointes

Dernière édition:
Re : Gestion d'erreurs

Bonjour Atlonia 🙂,
Comme dirais Jeanpierre, à utiliser avec modération, la méthode "On Error Resume Next" se met seule dans une ligne juste avant le risque de déclencher une erreur et doit être annulée juste dans la ligne d'après avec un "On Error Goto 0". Elle ne doit être utilisée que si tu es sûre que ton erreur sans être traitée ne génerera aucun problème, par exemple si une instruction plante parce que l'action demandée a déjà été effectuée.
Bon courage 😎
 
Re : Gestion d'erreurs

Bonsoir le fil,
Pour compléter, la feuille sera créée mais pas renommée, car la ligne sera ignorée.
C'est normal puisque la cellule A2 est liée à la macro ajout de feuille.Si tu reviens sur une feuille déjà existante, bug!
A+
kjin
 
Re : Gestion d'erreurs

Bonjour le fil 🙂,
Jeanpierre, toute mes excuses, j'ai du effectivement inverser, "J'ai la mémoire qui flanche, je m'souviens plus très bien..." 😱
Kjin, bonne synthèse, je ne m'étais pas penché sur la macro proprement dite.
Atlonia, maintenant que Kjin a posé correctement le problème, je pense que la solution serait en début de sub :
Code:
Dim AF as Worksheet
For Each AF In ActiveWorkbook
If AF.Name = "SEM " & Me.Range("A2") Then Exit Sub
Next AF
Je ne garanti pas la syntaxe, je l'ai tapé direct, je n'ai pas le temps de tester...
Bonne journée 😎
 
Re : Gestion d'erreurs

Bonsoir a tous,

Je rentre du travail, et je viens de tester la solution de JNP, et voila ce que ça donne:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim AF As Worksheet
For Each AF In ActiveWorkbook
If AF.Name = "SEM " & Me.Range("A2") Then Exit Sub
Next AF
Dim NF As Worksheet
If Not Intersect(Target, Range("a2")) Is Nothing Then
With Range("A1:O39")
.Copy
Set NF = Worksheets.Add
NF.Range("A1").PasteSpecial xlPasteAll
NF.Name = "SEM " & Me.Range("A2")
End With
Range("B4:O39").ClearContents
End If
Me.Activate
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

Une erreur sur la ligne en gras!

Comme il dit ne pas avoirtesté, peut-être une erreur de syntaxe ou d'adressage, comme je mne m'y connais pas, Quelqu'un a-t-il une solution?
 
Re : Gestion d'erreurs

Bonsoir atlonia, JNP, jeanpierre, kjin

Test ceci :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim NF As Worksheet, Feuille As Worksheet
If Not Intersect(Target, Range("a2")) Is Nothing Then
    For Each Feuille In ThisWorkbook.Worksheets
     If Target.Value = Val(Right(Feuille.Name, 2)) Then
       MsgBox "Feuille déjà existante", vbInformation, "Erreur:"
       Exit Sub
     End If
    Next
With Range("A1:O39")
    .Copy
    Set NF = Worksheets.Add
    NF.Range("A1").PasteSpecial xlPasteAll
    NF.Name = "SEM " & Me.Range("A2")
End With
Range("B4:O39").ClearContents
End If
Me.Activate
End Sub
La macro teste si la valeur de A2 correspond au deux derniers chiffres de tes feuilles existantes. Si c'est le cas une alerte s'affiche et la macro se termine. Si tout est bon la macro continue et crée ta nouvelle feuille.

A+
 
Dernière édition:
Re : Gestion d'erreurs

Re le fil, bonsoir bqtr,
Peut-être une autre solution testée sur ton fichier:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Trouv As Boolean, NouvFeuil As String, Ws As Byte
Application.ScreenUpdating = False
Trouv = False
NouvFeuil = "SEM " & Sheets(1).Range("A2").Value
For Ws = 1 To ActiveWorkbook.Sheets.Count
If ActiveWorkbook.Sheets(Ws).Name = NouvFeuil Then
Trouv = True
Exit Sub
End If
Next Ws
If Trouv = False Then
If Not Intersect(Target, Range("A2")) Is Nothing Then
ActiveWorkbook.Sheets.Add , After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = NouvFeuil
Sheets(1).Activate
Range("A1:O39").Copy
Sheets(NouvFeuil).Range("A1").PasteSpecial xlPasteAll
Range("B4:O39").ClearContents
End If
End If
Application.ScreenUpdating = True
End Sub

A toi de voir
A+
kjin
 
Re : Gestion d'erreurs

Bonsoir atlonia, JNP, jeanpierre, kjin

Test ceci :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim NF As Worksheet, Feuille As Worksheet
If Not Intersect(Target, Range("a2")) Is Nothing Then
    For Each Feuille In ThisWorkbook.Worksheets
     If Target.Value = Val(Right(Feuille.Name, 2)) Then
       MsgBox "Feuille déjà existante", vbInformation, "Erreur:"
       Exit Sub
     End If
    Next
With Range("A1:O39")
    .Copy
    Set NF = Worksheets.Add
    NF.Range("A1").PasteSpecial xlPasteAll
    NF.Name = "SEM " & Me.Range("A2")
End With
Range("B4:O39").ClearContents
End If
Me.Activate
End Sub
La macro teste si la valeur de A2 correspond au deux derniers chiffres de tes feuilles existantes. Si c'est le cas une alerte s'affiche et la macro se termine. Si tout est bon la macro continue et crée ta nouvelle feuille.

A+

Merci bqtr,

cette fonction a l'air de parfaitement fontionner, mais est-il possible de proposer dans la "Msg box" l'ouverture de la feuille en question ?

ca serait une alternative plus sympa, au lieu de simplement fermer la box et d rapeler la feuille par les onglets?

Merci de ton aide!
 
Re : Gestion d'erreurs

Re le fil, bonsoir bqtr,
Peut-être une autre solution testée sur ton fichier:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Trouv As Boolean, NouvFeuil As String, Ws As Byte
Application.ScreenUpdating = False
Trouv = False
NouvFeuil = "SEM " & Sheets(1).Range("A2").Value
For Ws = 1 To ActiveWorkbook.Sheets.Count
If ActiveWorkbook.Sheets(Ws).Name = NouvFeuil Then
Trouv = True
Exit Sub
End If
Next Ws
If Trouv = False Then
If Not Intersect(Target, Range("A2")) Is Nothing Then
ActiveWorkbook.Sheets.Add , After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = NouvFeuil
Sheets(1).Activate
Range("A1:O39").Copy
Sheets(NouvFeuil).Range("A1").PasteSpecial xlPasteAll
Range("B4:O39").ClearContents
End If
End If
Application.ScreenUpdating = True
End Sub

A toi de voir
A+
kjin

Merci de ton aide égalemnt Kjin,

J'ai testé tra fonction, mais elle semble ne rien faire, c'est-a-dire que lorsque je change mon N° dans la case A2, rien ne change sauf les dates, et aucune page n'est enregistrée ni modifiée pour celles existantes!

Je n'ai pas bien compris le but de cette fonction, peut-tu me donner une petite explication?

Merci encore
 
Re : Gestion d'erreurs

Re,

Essaye ceci :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim NF As Worksheet, Feuille As Worksheet
If Not Intersect(Target, Range("a2")) Is Nothing Then
    For Each Feuille In ThisWorkbook.Worksheets
     If Target.Value = Val(Right(Feuille.Name, 2)) Then
        If MsgBox("Feuille déjà existante, Afficher la feuille", vbInformation + vbYesNo, "Erreur:") = vbYes Then
          Feuille.Activate
          Exit Sub
        Else
          Exit Sub
        End If
     End If
    Next
With Range("A1:O39")
    .Copy
    Set NF = Worksheets.Add
    NF.Range("A1").PasteSpecial xlPasteAll
    NF.Name = "SEM " & Me.Range("A2")
End With
Range("B4:O39").ClearContents
End If
Me.Activate
End Sub

A+
 
Re : Gestion d'erreurs

Re le fil,
Je viens de retélécharger ton fichier, fait un simple copier coller du code que je t'ai fourni plus haut et tous fonctionne correctement, donc je ne sais pas.
😕
Mais l'essentiel c'est que ton pb soit résolu .
A+
kjin
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
9
Affichages
508
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Retour