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 ?