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

  1. #1
    Membre à l'essai
    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

    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/ ca fonctionne 2/ ca s'optimise 3/ ca se refactorise

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

    Apprendre à programmer avec Access 2016 et Access 2019

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