Erreur d'execution 1004 incompréhensible

Xcited

XLDnaute Nouveau
Bonjour,

Sur une petite macro sur laquelle je planche depuis un long moment (je débute et suis au passage preneur de conseils), je suis confronté à une erreur que je ne saisis pas du tout "Erreur d'exécution 1004 - Erreur définie par l'application".

J'ai surligné la ligne fautive en rouge. En vert un bout de code très similaire et qui pourtant fonctionne parfaitement... C'est là que je ne comprends pas...

Confer ci-dessous pour repérer le code, j'ai essayé de les marquer comme j'ai pu...

ThisWorkbook.Worksheets("Tâches").Range("J2").Formula = Consommation & "="

ThisWorkbook.Worksheets("Tâches").Range("L2").Formula = Rafreest & "=SI(ET("

Pour décrire rapidement les fonctions remplies par ces deux morceau de code, il s'agit de deux formules qui s'éditent successivement pour opérer une addition ou un contrôle d'une même cellule sur plusieurs onglets différents.

Nota : NomRes, PreRes, MelRes et Trigramme sont des valeurs issues d'un formulaire sur lequel est situé le bouton déclencheur de la macro.

Code:
Private Sub CommandButton1_Click()


Dim LastRes As Object
Dim Ressource As String
Dim Consommation As String
Dim Rafreest As String
Dim i As Integer
Dim j As Integer
Dim k As Integer

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

'Retrait des filtres de tableaux pouvant générer des erreurs

ThisWorkbook.Sheets("Tâches").Range("A1").End(xlDown).AutoFilter Field:=1, Criteria1:="<>""""", Operator:=xlAnd
ThisWorkbook.Sheets("Tâches").Range("A1").End(xlDown).AutoFilter

'Création de l'entrée dans le tableau ressources

          Set LastRes = Sheets("Tableau des ressources").Range("A1").End(xlDown)

                    LastRes.Offset(1, 0).EntireRow.Insert
                    LastRes.Offset(1, 0).Value = LastRes.Offset(0, 0).Value + 1
                    LastRes.Offset(1, 2).Value = NomRes.Value
                    LastRes.Offset(1, 3).Value = PreRes.Value
                    LastRes.Offset(1, 1).Value = Trigramme
                    
                    If CheckBox1 = True Then
      
                            LastRes.Offset(1, 4).Value = "Externe"
                                Else
          
                            LastRes.Offset(1, 4).Value = "Interne"
                            
                    End If
                            
                    LastRes.Offset(1, 6).Value = MelRes.Value
                    LastRes.Offset(1, 5).Value = ComboBox1.Value
                    LastRes.Offset(1, 7).Formula = LastRes.Offset(0, 7).Formula

'Copie de l'onglet Autres pour insertion de l'onglet au nom de la ressource nouvellement créée

    Sheets("Autres").Copy Before:=Sheets("Autres")
    Sheets("Autres (2)").Range("W3:CE65500").ClearContents
    Sheets("Autres (2)").Name = Trigramme
    
'Création de la formule en J (tableau des tâches)
  
            ThisWorkbook.Worksheets("Tâches").Range("J2").ClearContents
            Consommation = ThisWorkbook.Worksheets("Tâches").Range("J2").Formula

'CODE FONCTIONNANT

            ThisWorkbook.Worksheets("Tâches").Range("J2").Formula = Consommation & "="
            
  For i = 2 To ThisWorkbook.Worksheets("Tableau des ressources").Range("B1").End(xlDown).Row
            Consommation = ThisWorkbook.Worksheets("Tâches").Range("J2").Formula
            Ressource = ThisWorkbook.Worksheets("Tableau des ressources").Range("B" & i)
            
            ThisWorkbook.Worksheets("Tâches").Range("J2").Formula = Consommation & "+" & Ressource & "!G3"
            
  Next i



'Création de la formule en L (tableau des tâches)

            ThisWorkbook.Worksheets("Tâches").Range("L2").ClearContents
            Rafreest = ThisWorkbook.Worksheets("Tâches").Range("L2").Formula

'CODE NE FONCTIONNANT PAS

            ThisWorkbook.Worksheets("Tâches").Range("L2").Formula = Rafreest & "=SI(ET("
            
  For j = 2 To ThisWorkbook.Worksheets("Tableau des ressources").Range("B1").End(xlDown).Row
            Rafreest = ThisWorkbook.Worksheets("Tâches").Range("L2").Formula
            Ressource = ThisWorkbook.Worksheets("Tableau des ressources").Range("B" & j)
            
            ThisWorkbook.Worksheets("Tâches").Range("L2").Formula = Rafreest & Ressource & "!W3="""";"
            
  Next j
  
            Rafreest = ThisWorkbook.Worksheets("Tâches").Range("L2").Formula
            ThisWorkbook.Worksheets("Tâches").Range("L2").Formula = Rafreest & ");"""";"
            
  For k = 2 To ThisWorkbook.Worksheets("Tableau des ressources").Range("B1").End(xlDown).Row
            Rafreest = ThisWorkbook.Worksheets("Tâches").Range("L2").Formula
            Ressource = ThisWorkbook.Worksheets("Tableau des ressources").Range("B" & k)
            
            ThisWorkbook.Worksheets("Tâches").Range("L2").Formula = Rafreest & Ressource & "!W3+"
            
  Next k
  
            Rafreest = ThisWorkbook.Worksheets("Tâches").Range("L2").Formula
            ThisWorkbook.Worksheets("Tâches").Range("L2").Formula = Rafreest & ")"
  

Application.ScreenUpdating = True
Application.CutCopyMode = False
Application.Calculation = xlCalculationAutomatic

Sheets("Tâches").Range("A1").End(xlDown).AutoFilter
Unload Addrsrc
End Sub

En fait, par tests successifs, c'est le signe "=" qui pose problème. Si je le retire ça marche, dès qu'il est présent ça ne marche plus. Même s'il est seul.

Pourtant dans la partie de code en vert, il y a un signe "=" et cela fonctionne...

EDIT : Fichier joint + explications sur le classeur Excel :


On considère 3+x onglets :

L'onglet 1 "Tableau des ressources" représente un tableau avec une ligne par personne effectuant un rapport intermédiaire de gestion.
L'onglet 2 "Tâches" représente le bilan de tous les rapports de gestion. Une ligne représente une "tâche étudiée". Deux colonnes sont impactées ici par la macro :

- Les cellules en colonne J du tableau "tâches" font la simple addition des cellules en G des onglets de rapports intermédiaires.
- Les cellules en L vérifient qu'au moins une cellule correspondante à la tâche étudiée a été saisie dans l'un des onglets de rapports intermédiaires.

Les onglets 3 à X "Autres" etc.sont des rapports de gestion remplis par des personnes. Il y a un onglet par personne remplissant un rapport de gestion (donc 1 à X personnes). Il y a une ligne par tâche étudiée.

A quoi sert la macro ? A rajouter des onglets de rapports intermédiaire automatiquement, sur le modèle de l'onglet 3 et donc modifier le le bilan des rapports de gestion (onglet 2) de sorte qu'il incorpore dans ses calculs les nouveaux onglets ajoutés.


Par avance merci de vos éclairages !

Ludovic
 

Pièces jointes

  • Allégé.xlsm
    44.7 KB · Affichages: 41
  • Allégé.zip
    25.8 KB · Affichages: 16
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Erreur d'execution 1004 incompréhensible

Bonjour,

A priori "Rafreest" est déjà une formule à laqulle tu rajoute un autre bout de formule, même pas complet, donc normale que cela bogue..... pour t'en direplus, il faudrait voir le contenu de la cellule où tu alimentes ta variable et connaitre le résultat attendu.... peut être qu'un tout petit fichier avec modèle de donnée traitée et ligne de code qui pose problème nous aiderait à t'aider...

bon après midi
@+
 

Xcited

XLDnaute Nouveau
Re : Erreur d'execution 1004 incompréhensible

Je recopie la même explication dans le post principal :

On considère 3+x onglets :

L'onglet 1 "Tableau des ressources" représente un tableau avec une ligne par personne effectuant un rapport intermédiaire de gestion.
L'onglet 2 "Tâches" représente le bilan de tous les rapports de gestion. Une ligne représente une "tâche étudiée". Deux colonnes sont impactées ici par la macro :

- Les cellules en colonne J du tableau "tâches" font la simple addition des cellules en G des onglets de rapports intermédiaires.
- Les cellules en L vérifient qu'au moins une cellule correspondante à la tâche étudiée a été saisie dans l'un des onglets de rapports intermédiaires.

Les onglets 3 à X "Autres" etc.sont des rapports de gestion remplis par des personnes. Il y a un onglet par personne remplissant un rapport de gestion (donc 1 à X personnes). Il y a une ligne par tâche étudiée.

A quoi sert la macro ? A rajouter des onglets de rapports intermédiaire automatiquement, sur le modèle de l'onglet 3 et donc modifier le le bilan des rapports de gestion (onglet 2) de sorte qu'il incorpore dans ses calculs les nouveaux onglets ajoutés.

Euh... ai-je été assez précis ? :D
 

Discussions similaires

Réponses
11
Affichages
413

Statistiques des forums

Discussions
290 902
Messages
1 911 283
Membres
177 117
dernier inscrit
Bicycle74
Haut Bas