Erreur 13
martinre
-
Patrice33740 Messages postés 8930 Statut Membre -
Patrice33740 Messages postés 8930 Statut Membre -
Bonjour,
Je suis actuellement en stage dans une entreprise de TP et je souhaite mettre en place des macros pour automatiser les arrêtés de compte.
J'ai un problème sur une formule qui fonctionne avec "sum" mais qui ne fonctionne pas avec "if". En effet, je voudrai que la macro écrive la formule =SI(Produit<>0(ex:A15);Marge(ex:C15)/A15;""). Il faut que ca s'écrive dans la case D15.
La macro est donc :
La formule en gras m'indique une erreur 13 d'incompatibilité et je n'arrive pas a comprendre pourquoi puisque la formule pour une somme (ci dessous) fonctionne...
J'espère que quelqu'un pourra m'aider...
Je suis actuellement en stage dans une entreprise de TP et je souhaite mettre en place des macros pour automatiser les arrêtés de compte.
J'ai un problème sur une formule qui fonctionne avec "sum" mais qui ne fonctionne pas avec "if". En effet, je voudrai que la macro écrive la formule =SI(Produit<>0(ex:A15);Marge(ex:C15)/A15;""). Il faut que ca s'écrive dans la case D15.
La macro est donc :
Sub Totaux()
' définitions:
Dim Sheets As Integer
Dim CptLig As Integer
Dim CptCol As Integer
Dim NbLigne As Integer
Dim NbColonne As Integer
' Compte les éléments
NbOnglet = Worksheets.Count
For Sheets = 1 To NbOnglet
' Compte le nombre de ligne
NbLigne = Worksheets(Sheets).Cells.SpecialCells(xlCellTypeLastCell).Row
' Compte le nombre de colonne
NbColonne = Worksheets(Sheets).Cells.SpecialCells(xlCellTypeLastCell).Column
Next
' On parcourt tous les onglets
For Sheets = 1 To NbOnglet
' On parcourt les colonnes
For CptCol = 6 To NbColonne
' On remplace la somme dans les colonnes de pourcentage par des if
If CptCol = 9 Or CptCol = 13 Or CptCol = 21 Or CptCol = 25 Or CptCol = 29 Or CptCol = 33 Then
<bold>Worksheets(Sheets).Cells(NbLigne + 1, CptCol).Formula = "=if(" + Cells(NbLigne + 1, CptCol - 3).Address(0, 0) <> 0 + ";" + Cells(NbLigne + 1, CptCol - 1).Address(0, 0) / Cells(NbLigne + 1, CptCol - 3).Adress(0, 0) + ";" + "" + ")"</bold>
End If
Next
Next
La formule en gras m'indique une erreur 13 d'incompatibilité et je n'arrive pas a comprendre pourquoi puisque la formule pour une somme (ci dessous) fonctionne...
Worksheets(Sheets).Cells(NbLigne + 1, CptCol).Formula = "=sum(" + Cells(4, CptCol).Address(0, 0) + ":" + Cells(NbLigne, CptCol).Address(0, 0) + ")"
J'espère que quelqu'un pourra m'aider...
| EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI Merci d'y penser dans tes prochains messages. |
A voir également:
- Erreur 13
- Fifa 13 - Télécharger - Jeux vidéo
- Test redmi note 13 5g - Accueil - Téléphones
- Erreur 0x80070643 - Accueil - Windows
- Erreur 4201 france tv ✓ - Forum Réseaux sociaux
- Erreur 4101 france tv - Forum Lecteurs et supports vidéo
2 réponses
Bonjour,
Il y a de nombreuses erreurs sur cette ligne :
1) Sheets
est un mot du langage VBA, pour éviter toute ambigüité de compilation, il est impératif ne ne pas utiliser les mots du langage pour nommer des variables.
2) if(" + Cells
toujours pour éviter les ambigüités lors de la compilation, il est préférable d'utiliser "&" plutôt que "+" pour concaténer des chaines de caractères
3) Cells(NbLigne + 1, CptCol - 3).Address(0, 0) <> 0
a pour résultat True ou False, le "<> 0" doit être intégré à la chaine de caractères
4) CptCol - 3).Adress(0, 0)
en VBA adresse prend 2 d (Address)
5) + "" +
ajoute un seul double cote , pour en ajouter 2 il faut écrire : & """" &
PS:
6) + ";" +
En VBA, avec formula, le séparateur d'argument est la virgule, i.e. & "," &
Cependant tu peux aussi écrire les formules dans le langage courant (français) en utilisant FormulaLocal.
Ce qui pourrait donner :
Cordialement
Patrice
Il y a de nombreuses erreurs sur cette ligne :
1) Sheets
est un mot du langage VBA, pour éviter toute ambigüité de compilation, il est impératif ne ne pas utiliser les mots du langage pour nommer des variables.
2) if(" + Cells
toujours pour éviter les ambigüités lors de la compilation, il est préférable d'utiliser "&" plutôt que "+" pour concaténer des chaines de caractères
3) Cells(NbLigne + 1, CptCol - 3).Address(0, 0) <> 0
a pour résultat True ou False, le "<> 0" doit être intégré à la chaine de caractères
4) CptCol - 3).Adress(0, 0)
en VBA adresse prend 2 d (Address)
5) + "" +
ajoute un seul double cote , pour en ajouter 2 il faut écrire : & """" &
PS:
6) + ";" +
En VBA, avec formula, le séparateur d'argument est la virgule, i.e. & "," &
Cependant tu peux aussi écrire les formules dans le langage courant (français) en utilisant FormulaLocal.
Ce qui pourrait donner :
Worksheets(NoSheet).Cells(NbLigne + 1, CptCol).Formula = "=if(" & Cells(NbLigne + 1, CptCol - 3).Address(0, 0) & "<> 0 ," & Cells(NbLigne + 1, CptCol - 1).Address(0, 0) & "/" & Cells(NbLigne + 1, CptCol - 3).Address(0, 0) & ","""")"
Cordialement
Patrice
Merci Patrice ca fonctionne en effet ! Pas toujours facile pour un stagiaire de trouver directement les bonnes formules et certaines choses m'ont échappé...surtout quand on galère pendant 2j...
Re,
Pour faciliter la détection d'erreur, tu peux utiliser une variable intermédiaire (en cas d'erreur tu peux voir la valeur de la variable dans la fenêtre variables locales)
Exemple :
Pour faciliter la détection d'erreur, tu peux utiliser une variable intermédiaire (en cas d'erreur tu peux voir la valeur de la variable dans la fenêtre variables locales)
Exemple :
formule = "=if(" & Cells(NbLigne + 1, CptCol - 3).Address(0, 0) & _
"<> 0 ," & Cells(NbLigne + 1, CptCol - 1).Address(0, 0) & _
"/" & Cells(NbLigne + 1, CptCol - 3).Address(0, 0) & ","""")"
Worksheets(NoSheet).Cells(NbLigne + 1, CptCol).Formula = formule