Code erreur identification : attendu

Bonjour à tous,

Je débute seulement sur excel VBA. Je crée actuellement un fichier afin de suivre mes performances économiques pro.

Cependant, lorsque je souhaite valider mon "codage", j'ai un message d'erreur qui apparaît avec "Attendu : identificateur". Je n'arrive pas à trouver mon erreur, quelqu'un peut-il m'aider svp ?

Je vous partage la capture d'écran du code que j'ai créé.

Bonne journée,

vba1

Salut Nathou,

Les arguments passés à ta fonction sont des variables.
Elles doivent donc être passés sans guillemets : S1$ ($ est le raccourci de 'as string'), S6$, etc...

A+

Merci pour ton retour !

Entre temps j'avais "réussi" à retravailler le code, comme ci-dessous :

vba2

Cependant, j'ai une erreur lorsque je rentre la formule :

vba3

Vous auriez une idée de l'erreur svp ?

Où as-tu trouvé "SommeSiColonnes" ? C'est une fonction personnalisée, j'imagine!

Sans ton code, ça va être difficile, de toute façon.

Oui SommeSiColonnes est une fonction personnalisée. Le code est le suivant :

Function SommeSiColonnes(NomFeuilleDebut As String, NomFeuilleFin As String, ColonneCritere As String, Critere As String, ColonneValeur As String) As Double
Dim ws As Worksheet
Dim somme As Double
Dim i As Long
Dim derniereLigne As Long

somme = 0 ' Initialisation de la somme

' Parcours de toutes les feuilles entre S1 et S6
For Each ws In ThisWorkbook.Worksheets
If ws.Name >= NomFeuilleDebut And ws.Name <= NomFeuilleFin Then
On Error Resume Next
' Trouver la dernière ligne utilisée dans la feuille actuelle
derniereLigne = ws.Cells(ws.Rows.Count, ColonneCritere).End(xlUp).Row
On Error GoTo 0

' Boucle sur les lignes pour vérifier le critère et additionner les valeurs correspondantes
For i = 1 To derniereLigne
If ws.Cells(i, ColonneCritere).Value = Critere Then
somme = somme + ws.Cells(i, ColonneValeur).Value
End If
Next i
End If
Next ws

' Retourne la somme calculée
SommeSiColonnes = somme
End Function

edit moderation : code mis entre balises "code", bouton "</>" de la barre d'édition des messages., Merci d'y penser à l'avenir.

Bonsoir,

Nathou,

pour insérer un code, utilise l'icône ci-après dans la barre d'outil de ton message!

image
Function SommeSiColonnes(NomFeuilleDebut As String, NomFeuilleFin As String, ColonneCritere As String, Critere As String, ColonneValeur As String) As Double
Dim ws As Worksheet
Dim somme As Double
Dim i As Long
Dim derniereLigne As Long

somme = 0 ' Initialisation de la somme

' Parcours de toutes les feuilles entre S1 et S6
For Each ws In ThisWorkbook.Worksheets
If ws.Name >= NomFeuilleDebut And ws.Name <= NomFeuilleFin Then
On Error Resume Next
' Trouver la dernière ligne utilisée dans la feuille actuelle
derniereLigne = ws.Cells(ws.Rows.Count, ColonneCritere).End(xlUp).Row
On Error GoTo 0

' Boucle sur les lignes pour vérifier le critère et additionner les valeurs correspondantes
For i = 1 To derniereLigne
If ws.Cells(i, ColonneCritere).Value = Critere Then
somme = somme + ws.Cells(i, ColonneValeur).Value
End If
Next i
End If
Next ws

' Retourne la somme calculée
SommeSiColonnes = somme
End Function

...plus lisible à défaut, comme le dit jpbt, d'avoir un fichier!

A+

Nathou,

je ne connais évidemment pas ton fichier..

...mais soit, intègre dans les arguments de la fonction les noms de feuilles à éviter, soit fixe les index de feuilles à consulter.
Dans l'exemple ci-joint, je fais comme si tu choisissais cette seconde solution.
Ce qui est mis sous commentaire est inutile... normalement!
Pense aussi à indenter ton code : tu retrouveras beaucoup plus facilement les blocs logiques. (IF - ENDIF, FOR - NEXT, ...).

Function SommeSiColonnes(iIdx1%, iIdx2%, sColC$, Critere$, sColV$) As Double
'
Dim ws As Worksheet, somme As Double, derniereLigne As Long
'Dim xs As Worksheet, somme#, dernièreLigne&
'somme = 0 ' Initialisation de la somme
' Parcours de toutes les feuilles entre S1 et S6
For Each ws In ThisWorkbook.Worksheets
    If ws.Index >= iIdx1 And ws.Index <= iIdx2 Then
        With ws
            'On Error Resume Next
            ' Trouver la dernière ligne utilisée dans la feuille actuelle
            derniereLigne = .Cells(Rows.Count, sColC).End(xlUp).Row
            'On Error GoTo 0
            ' Boucle sur les lignes pour vérifier le critère et additionner les valeurs correspondantes
            For i = 1 To derniereLigne
                If .Cells(i, sColC) = Critere Then somme = somme + .Cells(i, sColV)
            Next
        End With
    End If
Next
' Retourne la somme calculée
SommeSiColonnes = somme
'
End Function

Bon travail!

bonjour à tous,

@Nathou21, (réaction à ton message du 30/12 à 17:32)

Cependant, j'ai une erreur lorsque je rentre la formule :

Dans la formule que tu as mise, je vois une erreur de syntaxe, il manque un " après S6.

Rechercher des sujets similaires à "code erreur identification attendu"