Erreur d'exécution code

Bonjour,

J'essaye de copier une formule assez exhaustive avec du VBA mais j'ai une erreur d'exécution 1004 ("Erreur définie par l'application ou par l'objet"). Pourriez vous me montrez ou ce situe l'erreur s'il vous plait? L'erreur apparait ligne 67 soit la deuxième formule que j'insère en C & i.

PS: Je passe par du VBA car si je met toutes les formules directement sur le fichier, il se met à lagger et utilise 100% du processeur et donc entraine souvent des crashs.

Je vous remercie.

Sub factu()
Dim i As Integer
    Sheets("factures").Activate
    Columns("A:A").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("verif factu").Select
    Columns("A:A").Select
    ActiveSheet.Paste
    Sheets("factures").Select
    Columns("B:B").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("verif factu").Select
    Columns("J:J").Select
    ActiveSheet.Paste
    Sheets("factures").Select
    Columns("C:C").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("verif factu").Select
    Columns("K:K").Select
    ActiveSheet.Paste
    Sheets("factures").Select
    Columns("D:D").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("verif factu").Select
    Columns("L:L").Select
    ActiveSheet.Paste
    Sheets("factures").Select
    Columns("E:E").Select
    Application.CutCopyMode = False
    Selection.Copy
    Columns("E:H").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("verif factu").Select
    Columns("M:M").Select
    ActiveSheet.Paste
    Columns("M:N").Select
    Columns("M:N").EntireColumn.AutoFit
    Sheets("factures").Select
    Columns("L:L").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("verif factu").Select
    Columns("Q:Q").Select
    ActiveSheet.Paste
    Sheets("factures").Select
    Columns("N:N").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("verif factu").Select
    Columns("R:R").Select
    ActiveSheet.Paste
    Sheets("factures").Select
    Columns("K:K").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("verif factu").Select
    Columns("S:S").Select
    ActiveSheet.Paste
    dl = Range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To dl
    Range("B" & i).FormulaLocal = "=NB.CAR(A" & i & ")"
    Range("C" & i).FormulaLocal = "=SI(B " & i & "= 12;SI(ET(B " & i & "= 12;OU(CNUM(GAUCHE(A" & i & ";3))=132;CNUM(GAUCHE(A" & i & ";3))=241;CNUM(GAUCHE(A" & i & ";3))=345;CNUM(GAUCHE(A" & i & ";3))=402;CNUM(GAUCHE(A" & i & ";3))=431;CNUM(GAUCHE(A" & i & ";3))=18));DROITE(A" & i & ";9);SI(ET(B" & i & "=12;OU(CNUM(GAUCHE(A" & i & ";2))=86;CNUM(GAUCHE(A" & i & ";2))=83;CNUM(GAUCHE(A" & i & ";2))=82;CNUM(GAUCHE(A" & i & ";2))=60;CNUM(GAUCHE(A" & i & ";2))=51));DROITE(GAUCHE(A" & i & ";11);9);SI(ET(B" & i & "=12;CNUM(DROITE(GAUCHE(A" & i & ";3)*1))=1;OU(CNUM(GAUCHE(A" & i & ";2))=18;CNUM(GAUCHE(A" & i & ";2))=83));DROITE(A" & i & ";10);SI(ET(B" & i & "=12;CNUM(DROITE(GAUCHE(A" & i & ";3)*1))<>01;CNUM(GAUCHE(A" & i & ";2))=18);DROITE(GAUCHE(A" & i & ";11);9);""ERREUR"")))))"
    Range("D" & i).FormulaLocal = "=SI(B" & i & "=11;DROITE(A" & i & ";9);""FAUX"")"
    Range("E" & i).FormulaLocal = _
 "=SI(B" & i & "=12;SI(ET(B" & i & "=12;OU(CNUM(GAUCHE(A" & i & ";3))=132;CNUM(GAUCHE(A" & i & ";3))=241;CNUM(GAUCHE(A" & i & ";3))=345;CNUM(GAUCHE(A" & i & ";3))=402;CNUM(GAUCHE(A" & i & ";3))=431;CNUM(GAUCHE(A" & i & ";3))=18));DROITE(A" & i & ";9);SI(ET(B" & i & "=12;OU(CNUM(GAUCHE(A" & i & ";2))=86;CNUM(GAUCHE(A" & i & ";2))=83;CNUM(GAUCHE(A" & i & ";2))=82;CNUM(GAUCHE(A" & i & ";2))=60;CNUM(GAUCHE(A" & i & ";2))=51));DROITE(GAUCHE(A" & i & ";11);9);SI(ET(B" & i & "=12;CNUM(DROITE(GAUCHE(A" & i & ";3)*1))=1;OU(CNUM(GAUCHE(A" & i & ";2))=18;CNUM(GAUCHE(A" & i & ";2))=83));DROITE(A" & i & ";10);SI(ET(B" & i & "=12;CNUM(DROITE(GAUCHE(A" & i & ";3)*1))<>1;CNUM(GAUCHE(A" & i & ";2))=18);DROITE(GAUCHE(A" & i & ";11);9);""ERREUR"")))))"
    Range("F" & i).FormulaLocal = "=SI(B" & i & "=14;DROITE(GAUCHE(A" & i & ";13);10);""FAUX"")"
    Range("G" & i).FormulaLocal = "=SIERREUR(CNUM(C" & i & ");SIERREUR(CNUM(D" & i & ");SIERREUR(CNUM(E" & i & ");SIERREUR(CNUM(F" & i & ");""))))"
    Range("H" & i).FormulaLocal = "=NBCAR(G" & i & ")"
    Range("I" & i).FormulaLocal = "=GAUCHE(G" & i & ")"
    Next

End Sub

Bonjour,

Je vais vous poster le code mais mais l'erreur est aussi sur la ligne précédente. Dans NB.CAR car il ne faut pas le point --> NBCAR
Ligne suivante vous devez enlever l'espace après "B

En colonne G quelle est la formule que vous voulez avoir dans la feuille. Vous voulez contrôler les erreurs en C, D, E et F ? mais quel est le résultat attendu

Cordialement

Bonjour Dan,

En rectifiant mes données grâce à vos remarques, le code marche bien. Merci beaucoup.

La colonne G est la pour donner le résultat des colonnes précédentes sans erreur. La colonne B vérifie le nb de caractères en A, La colonne C est pour 12 caractères, D pour 11, E pour 13 et F pour 14. Tout marche à merveille.

Cependant, j'ai remarqué que sur certaines lignes, le code se décalait, je m'explique:

Prenons la formule en A ( NBCAR("A" & i) ). Il arrive que parfois, le formule ne prenne pas en compte le i mais plutôt i-1. Par exemple, en ligne 1897, j'ai bien NBCAR(A1897) mais à la la ligne suivante (1898) la formule donne NBCAR(A1897) et reprends son cours à la ligne d'après (1899) avec NBCAR(A1899).
D'où peut provenir ce décalage?

Merci!

1. La colonne G est la pour donner le résultat des colonnes précédentes sans erreur. La colonne B vérifie le nb de caractères en A, La colonne C est pour 12 caractères, D pour 11, E pour 13 et F pour 14. Tout marche à merveille.

Ok tant mieux car, de mon coté, lorsque j'arrive à cette ligne, j'ai une erreur dans le code. Mais si cela fonctionne chez vous c'est ok.

2. Votre code peut être simplifié comme ceci pourrait être celui-ci

Sub facture()
Dim i As Integer
Dim dl As Integer

With Sheets("factures")
    .Columns("A:A").Copy Sheets("verif factu").Columns("A:A")
    .Columns("B:D").Copy Sheets("verif factu").Columns("J:L")
    .Columns("E:H").Copy Sheets("verif factu").Columns("M:M")
    .Columns("L:L").Copy Sheets("verif factu").Columns("Q:Q")
    .Columns("N:N").Copy Sheets("verif factu").Columns("R:R")
    .Columns("K:K").Copy Sheets("verif factu").Columns("S:S")
End With
Sheets("verif factu").Columns("M:N").AutoFit

With Sheets("verif factu")
    dl = .Range("A" & .Rows.Count).End(xlUp).Row

    For i = 2 To dl
        .Range("B" & i).FormulaLocal = "=NBCAR(A" & i & ")"
        .Range("C" & i).FormulaLocal = "=SI(B" & i & "= 12;SI(ET(B" & i & "= 12;OU(CNUM(GAUCHE(A" & i & ";3))=132;CNUM(GAUCHE(A" & i & ";3))=241;CNUM(GAUCHE(A" & i & ";3))=345;CNUM(GAUCHE(A" & i & ";3))=402;CNUM(GAUCHE(A" & i & ";3))=431;CNUM(GAUCHE(A" & i & ";3))=18));DROITE(A" & i & ";9);SI(ET(B" & i & "=12;OU(CNUM(GAUCHE(A" & i & ";2))=86;CNUM(GAUCHE(A" & i & ";2))=83;CNUM(GAUCHE(A" & i & ";2))=82;CNUM(GAUCHE(A" & i & ";2))=60;CNUM(GAUCHE(A" & i & ";2))=51));DROITE(GAUCHE(A" & i & ";11);9);SI(ET(B" & i & "=12;CNUM(DROITE(GAUCHE(A" & i & ";3)*1))=1;OU(CNUM(GAUCHE(A" & i & ";2))=18;CNUM(GAUCHE(A" & i & ";2))=83));DROITE(A" & i & ";10);SI(ET(B" & i & "=12;CNUM(DROITE(GAUCHE(A" & i & ";3)*1))<>01;CNUM(GAUCHE(A" & i & ";2))=18);DROITE(GAUCHE(A" & i & ";11);9);""ERREUR"")))))"
        .Range("D" & i).FormulaLocal = "=SI(B" & i & "=11;DROITE(A" & i & ";9);""FAUX"")"
        .Range("E" & i).FormulaLocal = _
   "=SI(B5=13;SI(ET(B5=13;CNUM(DROITE(GAUCHE(A5;4);1))=1;OU(CNUM(GAUCHE(A5;3))=130;CNUM(GAUCHE(A5;3))=132;CNUM(GAUCHE(A5;3))=133;CNUM(GAUCHE(A5;3))=134;CNUM(GAUCHE(A5;3))=163;CNUM(GAUCHE(A5;3))=177;CNUM(GAUCHE(A5;3))=198;CNUM(GAUCHE(A5;3))=199;CNUM(GAUCHE(A5;3))=240;CNUM(GAUCHE(A5;3))=241;CNUM(GAUCHE(A5;3))=242;CNUM(GAUCHE(A5;3))=260;CNUM(GAUCHE(A5;3))=315;CNUM(GAUCHE(A5;3))=316;CNUM(GAUCHE(A5;3))=345;CNUM(GAUCHE(A5;3))=389;CNUM(GAUCHE(A5;3))=402;CNUM(GAUCHE(A5;3))=431;CNUM(GAUCHE(A5;3))=432;CNUM(GAUCHE(A5;3))=433;CNUM(GAUCHE(A5;3))=434;CNUM(GAUCHE(A5;3))=435;CNUM(GAUCHE(A5;3))=487;CNUM(GAUCHE(A5;3))=86;CNUM(GAUCHE(A5;3))=310;CNUM(GAUCHE(A5;3))=18;CNUM(GAUCHE(A5;3))=131;CNUM(GAUCHE(A5;3))=580;CNUM(GAUCHE(A5;3))=562));DROITE(A5;10);SI(ET(B5=13;CNUM(DROITE(GAUCHE(A5;4);1))<>1;OU(CNUM(GAUCHE(A5;3))=130;CNUM(GAUCHE(A5;3))=132;CNUM(GAUCHE(A5;3))=133;CNUM(GAUCHE(A5;3))=134;CNUM(GAUCHE(A5;3))=163;CNUM(GAUCHE(A5;3))=177;CNUM(GAUCHE(A5;3))=198;CNUM(GAUCHE(A5;3))=199;CNUM(GAUCHE(A5;3))=240;CNUM(GAUCHE(A5;3))=241;" & _
    "CNUM(GAUCHE(A5;3))=242;CNUM(GAUCHE(A5;3))=260;CNUM(GAUCHE(A5;3))=315;CNUM(GAUCHE(A5;3))=316;CNUM(GAUCHE(A5;3))=345;CNUM(GAUCHE(A5;3))=389;CNUM(GAUCHE(A5;3))=402;CNUM(GAUCHE(A5;3))=431;CNUM(GAUCHE(A5;3))=432;CNUM(GAUCHE(A5;3))=433;CNUM(GAUCHE(A5;3))=434;CNUM(GAUCHE(A5;3))=435;CNUM(GAUCHE(A5;3))=444;CNUM(GAUCHE(A5;3))=487;CNUM(GAUCHE(A5;3))=310;CNUM(GAUCHE(A5;3))=18;CNUM(GAUCHE(A5;3))=86;CNUM(GAUCHE(A5;3))=131;CNUM(GAUCHE(A5;3))=562;CNUM(GAUCHE(A5;3))=285));DROITE(GAUCHE(A5;12);9);SI(ET(B5=13;OU(CNUM(GAUCHE(A5;2))=18;CNUM(GAUCHE(A5;2))=86;CNUM(GAUCHE(A5;2))=83;CNUM(GAUCHE(A5;2))=82;CNUM(GAUCHE(A5;2))=51;CNUM(GAUCHE(A5;2))=60));DROITE(GAUCHE(A5;12);10);""ERREUR""))))"
        .Range("F" & i).FormulaLocal = "=SI(B" & i & "=14;DROITE(GAUCHE(A" & i & ";13);10);""FAUX"")"
        .Range("G" & i).FormulaLocal = "=SIERREUR(CNUM(C" & i & ");SIERREUR(CNUM(D" & i & ");SIERREUR(CNUM(E" & i & ");SIERREUR(CNUM(F" & i & ");""))))"
        .Range("H" & i).FormulaLocal = "=NBCAR(G" & i & ")"
        .Range("I" & i).FormulaLocal = "=GAUCHE(G" & i & ")"
    Next i
End With
End Sub

Faites le test

3. Prenons la formule en A ( NBCAR("A" & i) ). Il arrive que parfois, le formule ne prenne pas en compte le i mais plutôt i-1. Par exemple, en ligne 1897, j'ai bien NBCAR(A1897) mais à la la ligne suivante (1898) la formule donne NBCAR(A1897) et reprends son cours à la ligne d'après (1899) avec NBCAR(A1899).

Il faudrait voir votre fichier pour comprendre. Toutes vos lignes en colonne A comportent une valeur ?

Rechercher des sujets similaires à "erreur execution code"