Ignorer erreur VBA pour poursuivre la macro

Résolu
Nai Messages postés 707 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 11 octobre 2024 - Modifié le 30 sept. 2024 à 18:44
Nai Messages postés 707 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 11 octobre 2024 - 2 oct. 2024 à 22:26

Bonjour toutes et tous !

J'utilise un fichier crée par mes soins pour répondre aux besoins de gestion du budget de la famille.

Je souhaite pouvoir dupliquer le mois précédent en reprenant toute la feuille.

Toutes les feuilles sont renommées à l'aide de la cellule A1, avec :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set Target = Range("A1")
If Target = "" Then Exit Sub
Application.ActiveSheet.Name = VBA.Left(Target, 31)
Exit Sub
End Sub

Pour la duplication, j'utilise :

Sub ajouter()

    Sheets(1).Select
    Sheets(1).Copy After:=Sheets(Sheets.Count)
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "SUITE"
    Range("A2").Select
End Sub

Cette dernière macro entre en conflit avec la première.

Je souhaite pouvoir :

  • Ignorer le message d'erreur
  • Sélectionner la cellule A1
  • Ignorer le message d'erreur
  • Renommer la cellule A1

Il existe probablement un moyen plus simple, mais je ne vois pas comment éviter le conflit.

Je vous remercie de votre aide :)

voir le fichier : https://www.cjoint.com/c/NIEqSPG4FR4

Office 2016


A voir également:

1 réponse

Bruno83200_6929 Messages postés 282 Date d'inscription jeudi 18 juin 2020 Statut Membre Dernière intervention 23 octobre 2024 57
30 sept. 2024 à 19:52

Bonjour,

Le conflit vient probablement du fait que la première macro qui renomme la feuille à partir de la cellule A1 se déclenche à chaque modification de la cellule ou de la sélection, y compris lors de l'exécution de la deuxième macro.

Pour éviter cela, il est possible de désactiver temporairement les événements pendant l'exécution de la macro de duplication, ce qui empêchera la première macro de se déclencher pendant cette période.

Voici une version modifiée de ta macro ajouter pour éviter ce conflit :

Sub ajouter()

    ' Désactiver les événements pour éviter le déclenchement de la macro de renommage
    Application.EnableEvents = False
    
    ' Copier la première feuille et la placer à la fin
    Sheets(1).Copy After:=Sheets(Sheets.Count)
    
    ' Sélectionner la cellule A1 et définir un nouveau nom pour la feuille
    With ActiveSheet
        .Range("A1").Select
        On Error Resume Next ' Ignorer l'erreur si la feuille ne peut pas être renommée immédiatement
        .Name = Left(.Range("A1").Value, 31)
        On Error GoTo 0 ' Désactiver l'ignoration des erreurs
    End With
    
    ' Réactiver les événements
    Application.EnableEvents = True

End Sub

1
danielc0 Messages postés 1352 Date d'inscription mardi 5 juin 2018 Statut Membre Dernière intervention 25 décembre 2024 155
Modifié le 1 oct. 2024 à 11:49

Bonjour à tous,

Essaie :

Sub ajouter()
  Sheets(1).Copy After:=Sheets(Sheets.Count)
  Range("E1").FormulaR1C1 = "SUITE"
  Range("A1") = ""
  Range("A2").Select
End Sub

Daniel

0
Nai Messages postés 707 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 11 octobre 2024 55 > danielc0 Messages postés 1352 Date d'inscription mardi 5 juin 2018 Statut Membre Dernière intervention 25 décembre 2024
2 oct. 2024 à 22:26

Bonjour et merci aussi :)

Simple et efficace.

J'ai gardé la proposition de Bruno qui correspond davantage à ma demande.

Merci :)

0
Nai Messages postés 707 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 11 octobre 2024 55
2 oct. 2024 à 22:25

Bonjour et merci pour cette réponse complète ! :)

Il me manquait ce petit bout :

Application.EnableEvents = True

Avec ça, tout rentre dans l'ordre et ça pourrait me resservir.

Encore merci :)

1