Vba problème de syntaxe de SumIf avec gauche Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
l
llemezo
Jeune membre
Jeune membre
Messages : 21
Inscrit le : 11 février 2019
Version d'Excel : 2016fr

Message par llemezo » 2 janvier 2020, 01:29

bonsoir tout le monde
J'ai un souci avec ce code
 Sub test()
Dim DerLColA As Long, DerLColB As Long, Mavariable As String, Result, Result1
DerLColA = Cells(Rows.Count, 6).End(xlUp).Row ' dernière ligne de la colonne f
DerLColB = Cells(Rows.Count, 7).End(xlUp).Row ' dernière ligne de la colonne g
Mavariable = Left(Range("A1").Value , 3)' 'recherche
Result = Application.SumIf(Left(Range("F1:F" & DerLColA), 3), Mavariable, Range("G1:G" & DerLColB)) 'Ta formule
'Range("B1") = Result
End Sub
merci de bien vouloir m'aider.
m
m3ellem1
Membre impliqué
Membre impliqué
Messages : 1'898
Appréciations reçues : 167
Inscrit le : 18 décembre 2018
Version d'Excel : 2016

Message par m3ellem1 » 2 janvier 2020, 01:32

Salut llemezo,

c'est quoi le soucis et ca bloque sur quelle ligne?
sinon un petit fichier test non?
à te relire :)
À partir d'hier, j'ai décidé de ne plus expliquer les solutions proposées et de ne plus répondre aux MP!
l
llemezo
Jeune membre
Jeune membre
Messages : 21
Inscrit le : 11 février 2019
Version d'Excel : 2016fr

Message par llemezo » 2 janvier 2020, 01:37

il bloque su cette liqgne
Result = Application.SumIf(Left(Range("F1:F" & DerLColA), 3), Mavariable, Range("G1:G" & DerLColB)) 'Ta formule
et affiche erreur exécution 13
Je croix que le problème se trouve sur la parti ou j'ai souligné
Modifié en dernier par llemezo le 2 janvier 2020, 01:43, modifié 1 fois.
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 16'733
Appréciations reçues : 703
Inscrit le : 27 août 2012
Version d'Excel : 365 Personnel

Message par Jean-Eric » 2 janvier 2020, 01:40

Bonjour,
Une première réponse.
Sumif implique que les 2 plages soient de même dimensions
Cdlt.
Sub test()
Dim lastRow As Long, myValue As String, rng As Range, rng2 As Range, Result As Double
    With ActiveSheet
        lastRow = .Cells(.Rows.Count, 6).End(xlUp).Row
        myValue = Left(.Cells(1).Value, 3)
        Set rng = .Cells(6).Resize(lastRow)
        Set rng2 = .Cells(7).Resize(lastRow)
        Result = WorksheetFunction.SumIf(rng, myValue, rng2)
        .Cells(2).Value = Result
    End With
End Sub
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
l
llemezo
Jeune membre
Jeune membre
Messages : 21
Inscrit le : 11 février 2019
Version d'Excel : 2016fr

Message par llemezo » 2 janvier 2020, 01:55

j'ai testé votre code Jean-Eric mais je ne recherche pas sa comme résultat
pour cette exemple ci joint le résultat est 5 au lieu de 1
MERCI
page.PNG
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 16'733
Appréciations reçues : 703
Inscrit le : 27 août 2012
Version d'Excel : 365 Personnel

Message par Jean-Eric » 2 janvier 2020, 02:48

Re,
Une mise à jour.
Cdlt.
Sub Test()
Dim lastRow As Long, myValue As String, tbl As Variant, Result As Double, i As Long
    With ActiveSheet
        lastRow = .Cells(.Rows.Count, 6).End(xlUp).Row
        myValue = Left(.Cells(1).Value, 3)
        tbl = .Cells(6).Resize(lastRow, 2)
        For i = LBound(tbl) To UBound(tbl)
            If Left(tbl(i, 1), 3) = myValue Then Result = Result + tbl(i, 2)
        Next i
        .Cells(2).Value = Result
    End With
End Sub
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
l
llemezo
Jeune membre
Jeune membre
Messages : 21
Inscrit le : 11 février 2019
Version d'Excel : 2016fr

Message par llemezo » 2 janvier 2020, 03:12

MERCI Jean-Eric
c'est ce que je voulais avoir; peut tu m'expliquer ton code afin que je puisse l’adapter si besoin; sur tout comment tu a fait pour ne pas écrire Cells(7)
::o
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 16'733
Appréciations reçues : 703
Inscrit le : 27 août 2012
Version d'Excel : 365 Personnel

Message par Jean-Eric » 2 janvier 2020, 03:34

Re,
Quelques explications.
Cdlt.
Sub Test()
'Déclaration des variables
Dim lastRow As Long, myValue As String, tbl As Variant, Result As Double, i As Long
    With ActiveSheet
        'Dernière ligne non vide colonne 6 (F)
        lastRow = .Cells(.Rows.Count, 6).End(xlUp).Row
        'Valeur de référence
        myValue = Left(.Cells(1).Value, 3)
        'Mise sous forme de tableau (array) de la plage F1:G8 (dans l'exemple)
        'Cells(6)=Cells(1,6)=F1
        tbl = .Cells(6).Resize(lastRow, 2)
        'Pour chaque élément du tableau (tbl(i,1)=colonne 6 ; tbl(i,2)=colonne 7)
        For i = LBound(tbl) To UBound(tbl)
            If Left(tbl(i, 1), 3) = myValue Then Result = Result + tbl(i, 2)
        Next i
        'Restitution du résulat dans la feuille de calcul
        .Cells(2).Value = Result
    End With
End Sub
1 membre du forum aime ce message.
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message