IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

erreur 1004 à cause de blancs et parenthèses dans les noms des feuilles copiées


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2016
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2016
    Messages : 19
    Points : 13
    Points
    13
    Par défaut erreur 1004 à cause de blancs et parenthèses dans les noms des feuilles copiées
    Bonjour le forum, vous allez bien ?

    Je ne dois pas être le premier à avoir le problème ci-dessous, suis sûr qu'il doit y avoir des post là-dessus, mais ça fait une heure que je cherche sans trouver... Donc voici ma question.

    Le but de ma macro événement SheetActivate est que, quand on copie une feuille, la feuille "TOTAL RENTREE" reçoive une série de formule en ligne 5.
    Cela fonctionne parfaitement quand on active une feuille dont le sheet.name ne contient pas de caractère spécial.

    Mais dès que le nom de ma feuille contient un blanc ou une parenthèse, je reçois "Erreur 1004. Erreur définie par l'application ou par l'objet".
    Or, quand on fait une copie, automatiquement cette copie reçoit dans son nom un blanc et un numéro entre parenthèses. Ex. "BURINS (3)"

    Je joins un fichier de test.
    et voici aussi le code incriminé:
    L'erreur se produit sur chaque ligne à partir de .Range("A5").FormulaR1C1 = "=" & ActiveSheet.Name & "!R1C23"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
     
        Dim FOrigine As Worksheet 'est la feuille d'origine
        Set FOrigine = Sh
        Debug.Print "FOrigine.name = " & FOrigine.Name
        Debug.Print "Activesheet.name = " & ActiveSheet.Name
     
        Select Case True
            Case ActiveSheet.Name = "TOTAL RENTREE" Or ActiveSheet.Name = "NC" Or ActiveSheet.Name = "!!!!!"
                'Ne rien faire si on active l'une de ces feuilles, surtout si on vient d'activer TOTAL RENTREE !!
            Case Else
                Application.DisplayAlerts = False
                With Sheets("TOTAL RENTREE")
                    '.Range("A5").FormulaR1C1 = "=" & "BURINS (3)" & "!R1C23"
                    .Range("A5").FormulaR1C1 = "=" & ActiveSheet.Name & "!R1C23"
                    .Range("B5").FormulaR1C1 = "=" & ActiveSheet.Name & "!R3C4"
                    .Range("C5").FormulaR1C1 = "=" & ActiveSheet.Name & "!R1C4"
                    .Range("D5").FormulaR1C1 = "=" & ActiveSheet.Name & "!R1C3"
                    .Range("E5").FormulaR1C1 = "=" & ActiveSheet.Name & "!R1C7"
                    .Range("F5").FormulaR1C1 = "=" & ActiveSheet.Name & "!R2C7"
                    .Range("G5").FormulaR1C1 = "=" & ActiveSheet.Name & "!R3C7"
                    .Range("H5").FormulaR1C1 = "=" & ActiveSheet.Name & "!R4C7"
                    .Range("I5").FormulaR1C1 = "=" & ActiveSheet.Name & "!R1C9"
                    .Range("J5").FormulaR1C1 = "=" & ActiveSheet.Name & "!R2C9"
                    .Range("K5").FormulaR1C1 = "=" & ActiveSheet.Name & "!R3C9"
                    .Range("L5").FormulaR1C1 = "=" & ActiveSheet.Name & "!R4C9"
                    .Range("M5").FormulaR1C1 = "=" & ActiveSheet.Name & "!R1C11"
                    .Range("N5").FormulaR1C1 = "=" & ActiveSheet.Name & "!R2C11"
                    .Range("O5").FormulaR1C1 = "=" & ActiveSheet.Name & "!R3C11"
                    .Range("P5").FormulaR1C1 = "=" & ActiveSheet.Name & "!R4C11"
                    .Range("R5").FormulaR1C1 = "=" & ActiveSheet.Name & "!R1C14"
                    .Range("S5").FormulaR1C1 = "=" & ActiveSheet.Name & "!R2C14"
                    .Range("T5").FormulaR1C1 = "=RC[-2]-RC[-1]"
                    .Range("U5").FormulaR1C1 = "=" & ActiveSheet.Name & "!R1C16"
                    .Range("V5").FormulaR1C1 = "=" & ActiveSheet.Name & "!R2C16"
                    .Range("W5").FormulaR1C1 = "=" & ActiveSheet.Name & "!R3C14"
                End With
                Application.DisplayAlerts = True
        End Select
     
    End Sub
    A noter,
    si j'écris en dur comme dans la ligne 14 ci-dessus qui est commentée (donc si je remplace la variable par "BURINS (3)"
    --> je reçois la même erreur 1004. Donc ce sont bien les blancs et parenthèses qui posent problème.

    Quelqu'un a-t-il une solution? Un contournement ? Un post dans le forum ?

    Merci d'avance !

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 250
    Points
    34 250
    Par défaut
    Salut,

    tu peux faire un essai en essayant de faire une formule de base qui pointe vers ta feuille avec espace.

    Tu constateras que des apostrophes (') viennent encadrer le nom de la feuille.

    Il suffit de mettre le code en conséquence avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("A5").FormulaR1C1 = "='" & ActiveSheet.Name & "'!R1C23"
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Septembre 2019
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Quel bête type je suis ! :-)
    Merci beaucoup, cela marche très bien.
    Je ne peux pas fermer la discussion actuellement (problème sur mon compte), mais ceci est bel et bien résolu grâce à l'apostrophe.

Discussions similaires

  1. [MySQL] decalage dans les nom des colonnes avec les checkbox
    Par tortue_22 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 24/04/2009, 12h58
  2. Réponses: 13
    Dernier message: 22/04/2009, 16h43
  3. [E-02] Recherche de redondance dans le nom des feuilles d'un classeur
    Par Karatégirl77 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 27/11/2008, 15h01
  4. Faut-il utiliser des underscores ou des espaces dans les noms des fichiers ?
    Par Invité dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 07/05/2008, 19h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo