Ignorer erreur VBA pour poursuivre la macro

Résolu
Nai Messages postés 709 Date d'inscription   Statut Membre Dernière intervention   -  
Nai Messages postés 709 Date d'inscription   Statut Membre Dernière intervention   -

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


Bien à vous,
Naï
ps: je surveille tous mes sujets non résolus, si solution vous avez, je la lirais à coup sûr :)

1 réponse

  1. Bruno83200_6929 Messages postés 725 Date d'inscription   Statut Membre Dernière intervention   171
     

    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
    1. danielc0 Messages postés 2192 Date d'inscription   Statut Membre Dernière intervention   287
       

      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
      1. Nai Messages postés 709 Date d'inscription   Statut Membre Dernière intervention   56 > danielc0 Messages postés 2192 Date d'inscription   Statut Membre Dernière intervention  
         

        Bonjour et merci aussi :)

        Simple et efficace.

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

        Merci :)

        0
    2. Nai Messages postés 709 Date d'inscription   Statut Membre Dernière intervention   56
       

      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