[VBA] Erreur d'exécution 1004 suite à l'ajout d'une formule par VBA.[RESOLU]

Adrien

XLDnaute Junior
Bonjour à tous,

Me revoici avec un problème qui va sûrement paraître simple mais dont la fonction "Recherche" ne m'a pas apporté la solution tellement l'erreur 1004 intervient souvent.

Donc, je suis toujours dans mon long code de Bulletin.

Aujourd'hui, j'ai attaqué l'incrémentation par macro d'une formule matricielle permettant de faire une sorte de moyenne modifiée dont voici la formule originelle pour la première ligne qui se trouve être dans la ligne 7, commençant obligatoirement en C7 mais allant aléatoirement de la ligne C7 à IV7 pour la fin :

Code:
=SI(ESTERREUR(SOMME(SI(ESTNUM(DECALER(C8;;;1;NB($A$7:$G$7)));DECALER(C8;;;1;NB($A$7:$G$7))))/SOMME(SI(ESTNUM(DECALER(C8;;;1;NB($A$7:$G$7)));DECALER($C$7;;;1;NB($A$7:$G$7))))*10);SI(A13="";"";"Absent");(SOMME(SI(ESTNUM(DECALER(C8;;;1;NB($A$7:$G$7)));DECALER(C8;;;1;NB($A$7:$G$7))))/SOMME(SI(ESTNUM(DECALER(C8;;;1;NB($A$7:$G$7)));DECALER($C$7;;;1;NB($A$7:$G$7))))*10))

Formule qui permet donc d'inscrire aussi le texte "Absent" lorsqu'un élève a été absent pour cette matière.


Donc, j'ai ajouté récemment une fonction de TRI par noms des élèves dans mon classeur. Je me suis rendu compte qu'il gardait les points des anciennes places des élèves et ai donc mis une formule pour à chaque fois renouveler les formules.

Voici mon code :

Code:
Private Sub CommandButton3_Click()
Sheets("Lire - 1").Range("B8:IV50").Select
 ActiveWorkbook.Worksheets("Lire - 1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Lire - 1").Sort.SortFields.Add Key:=Range("B8"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Lire - 1").Sort
        .SetRange Range("B8:IV50")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
ActiveSheet.Range("IV8").End(xlToLeft).Select
    Selection.FormulaArray = _
        "=IF(ISERROR(SUM(IF(ISNUMBER(OFFSET(RC[-1],,,1,COUNT(R7C1:R7C7))),OFFSET(RC[-1],,,1,COUNT(R7C1:R7C7))))/SUM(IF(ISNUMBER(OFFSET(RC[-1],,,1,COUNT(R7C1:R7C7))),OFFSET(R7C3,,,1,COUNT(R7C1:R7C7))))*10),IF(R[5]C[-3]="""","""",""Absent""),(SUM(IF(ISNUMBER(OFFSET(RC[-1],,,1,COUNT(R7C1:R7C7))),OFFSET(RC[-1],,,1,COUNT(R7C1:R7C7))))/SUM(IF(ISNUMBER(OFFSET(RC[-1],,,1,COUNT(R7C1:" & _
        "OFFSET(R7C3,,,1,COUNT(R7C1:R7C7))))*10))"
    Selection.AutoFill Destination:=Range(ActiveCell, ActiveCell + 40), Type:=xlFillDefault
End Sub

Voilà. Mais j'obtiens une erreur à la ligne de l'incrémentation de la formule

Selection.FormulaArray = _
"=IF(ISERROR(SUM(IF(ISNUMBER(OFFSET(RC[-1],,,1,COUNT(R7C1:R7C7))),OFFSET(RC[-1],,,1,COUNT(R7C1:R7C7))))/SUM(IF(ISNUMBER(OFFSET(RC[-1],,,1,COUNT(R7C1:R7C7))),OFFSET(R7C3,,,1,COUNT(R7C1:R7C7))))*10),IF(R[5]C[-3]="""","""",""Absent""),(SUM(IF(ISNUMBER(OFFSET(RC[-1],,,1,COUNT(R7C1:R7C7))),OFFSET(RC[-1],,,1,COUNT(R7C1:R7C7))))/SUM(IF(ISNUMBER(OFFSET(RC[-1],,,1,COUNT(R7C1:" & _
"OFFSET(R7C3,,,1,COUNT(R7C1:R7C7))))*10))"


Erreur 1004

J'ai obtenu ce code par enregistrement de macro, et je ne sais donc pas si il est vraiment potable étant donné que je n'ai encore jamais travaillé sur ce plan en VBA.

Merci à tous,

Adrien
 
Dernière édition:

bond

XLDnaute Occasionnel
Re : [VBA] Erreur d'exécution 1004 suite à l'ajout d'une formule par VBA.

La formule est la même
benh, non : Les zones couvertes sont différentes, l'une est matricelle et pas l'autre !
formule qui apparemment à l'air correcte
vague, ça veut dire oui ?
je n'arrive pas à insérer en VBA.
ça , j'ai bien compris. mais avant de résoudre ça, le pb en VBA pouvant être lié à sa syntaxe :
1) il faudrait être sur de la formule, de son résultat,
2) il faudrait la confirmation de LA formule (laquelle),

Bref, j'insiste
Ton fichier en l'état actuel serait bienvenue vu les nombreuses variantes présentes dans cette discussion.
Précise ton objectif : Quelle formule ? Quelle destination ?... enfin tout ce qui permettrai de comprendre ton projet pour ceux qui ne sont pas dedans...

C'est possible de t'aider, mais il faut que l'énoncé du pb soit clair et précis, et ce n'est toujours pas le cas pour avancer.
 

Adrien

XLDnaute Junior
Re : [VBA] Erreur d'exécution 1004 suite à l'ajout d'une formule par VBA.

Bonjour,

J'ai déjà envoyé mon fichier ... Je ne vois pas en quoi envoyer le gros puisqu'il comporte les mêmes formules mais répétées.

Mon objectif : La formule matricielle en VBA.

Destination : Une cellule

Je pense que j'ai oublié les accolades lorsque j'ai mis la mienne. Mais dans le fichier elles y étaient.

Merci,

Adrien
 

Adrien

XLDnaute Junior
Re : [VBA] Erreur d'exécution 1004 suite à l'ajout d'une formule par VBA.

Bonsoir,

Eh ben voilà, je pense que mon problème est enfin résolu. Après de longues heures, jours, semaines à passer sur ce code qui commence sérieusement à m'échauffer les oreilles, je pense avoir résolu un problème de plus.

Donc, ayant constaté que mon sujet tombait dans l'oubli et que personne ne trouvait de solution (même si je pense plutôt que je me suis une fois de plus exprimé comme une lanterne), j'ai cherché tout seul.

Bon, je le dis tout de suite, j'ai dû abandonner mon problème premier.

Au lieu d'incrémenter ma formule dans la feuille, j'ai simplement fait un offset sur une variable de cellule pour revenir à une plage sans la formule à changer ...

Bon, là, je sais ce que vous allez penser en lisant ces lignes : "Mais B**** de M**** ce petit c*** voulait simplement faire ça ?? Pourquoi il l'a pas dit plus tôt ?'

Donc, sachant cela, je poste quand même afin que le sujet soit résolu, en m'excusant tout de même par le temps passé par certains sur cette demande.

Mais bon ... J'ai que 16 ans et pas encore eu de cours d'informatique de quelque type que ce soit, alors j'espère que vous serez tout de même indulgents.

Donc, je n'ai pas cherché midi à quatorze heures, mais bien midi à midi de l'année d'après ...


Je colle mon code ci-dessous afin d'aider d'éventuelles personnes coincées comme moi.

Code:
Private Sub CommandButton3_Click()
Dim Plage

Sheets("Accueil").Select
ActiveSheet.Range("A1").Select
   ActiveWorkbook.Worksheets("Accueil").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Accueil").Sort.SortFields.Add Key:=Range("B8"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Accueil").Sort
        .SetRange Range("B8:B50")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
    
Sheets("Lire - 1").Select
ActiveSheet.Range("A1").Select
Selection.Range("IV50").Select
Selection.End(xlToLeft).Select
Selection.Offset(0, -1).Select
ActiveSheet.Range(Selection.Address & ":" & "B8").Select
Plage = Selection
   ActiveWorkbook.Worksheets("Lire - 1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Lire - 1").Sort.SortFields.Add Key:=Range("B8"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Lire - 1").Sort
        .SetRange Range(Selection.Address & ":" & "B8")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

Sheets("Lire - 2").Select
ActiveSheet.Range("A1").Select
Selection.Range("IV50").Select
Selection.End(xlToLeft).Select
Selection.Offset(0, -1).Select
ActiveSheet.Range(Selection.Address & ":" & "B8").Select
Plage = Selection
ActiveWorkbook.Worsheets("Lire - 2").Sort.SortFields.Clear
ActiveWorkbook.Worksheets
End Sub


Merci à tous et au revoir.
 

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16