Somme.si et RechercheV sur fichier externe en VBA

Bonjour à tous,

Cela fait 3x que j'essai d'écrire ce message et à chaque fois je plante.... ça commence bien pour moi....

Je joins un fichier de travail, qui comme son nom l'indique est vraiment un fichier pour l'exemple.

14sommesivba.xlsm (16.12 Ko)

J'ai deux problématiques, la 1ere sur une somme.si qui me fait des misères !

Sub SommeSi()
Dim Arg1 As String
Dim Arg2 As String

Arg1 = "M2"
Arg2 = "M3"

Worksheets("Feuil1").Range("D1").Value = Application.WorksheetFunction.SumIfs(Sheets("Feuil1").Range("a1:a4"), Sheets("Feuil1").Range("b1:b4"), Arg2)

End Sub

Ce code fonctionne, mais je voulais faire une boucle afin de ne pas indiquer la fin de colonne (pour les colonnes A et B), j'ai fait de cette façon, mais ça me renvoie "0"

Sub test()
Dim x As Integer
Dim Arg1 As String
Dim Arg2 As String
Dim DerLig As Long

DerLig = Range("b" & Rows.Count).End(xlUp).Row
For x = 1 To DerLig

Arg1 = "M2"
Arg2 = "M3"

Worksheets("Feuil1").Range("d2").Value = Application.WorksheetFunction.SumIfs(Sheets("Feuil1").Range("a" & x), Sheets("Feuil1").Range("b" & x), Arg2)
Next x

End Sub

toujours dans ce fichier, je fais une rechercheV via VBA, je sais la faire quand mon tableau de recherche se trouve dans le fichier actif, mais pas si mon classeur est externe (même ouvert). Je ne sais pas comment je dois écrire mon fichier ?

Sub test2()

'Dernière ligne
DerLig = Cells(Cells.Rows.Count, "B").End(xlUp).Row

With Sheets("Feuil1")
For x = 1 To DerLig

'Ne fonctionne pas =
'.Range("G" & x).Value = Application.VLookup(("00000" & .Range("d" & x).Value, "SS Via Analysis.xlsx'!SAPCrosstab1", 2, False)

'fonctionne =
.Range("F" & x).Value = Application.VLookup(("00000" & .Range("d" & x).Value), Sheets("Feuil1").Range("A2:B5"), 2, False)

Next x
End With
End Sub

Je vous remercie pour votre aide.

Sandrine

Bonjour,

Pour votre premier problème, la boucle est inutile et la syntaxe erronée. Essayez ceci :

Sub test_v2()

Dim Arg1 As String
Dim Arg2 As String
Dim DerLig As Long

DerLig = Range("b" & Rows.Count).End(xlUp).Row

Arg1 = "M2"
Arg2 = "M3"

Worksheets("Feuil1").Range("d2").Value = Application.WorksheetFunction.SumIfs(Sheets("Feuil1").Range("a1:a" & DerLig), Sheets("Feuil1").Range("b1:b" & DerLig), Arg2)

End Sub

Pour votre second problème, il faut préciser votre classeur dans les commandes, par exemple :

ThisWorkbook.Worksheets("Feuil1").Range("B1")

ou

Workbooks("sommesivba.xlsm").Worksheets("Feuil1").Range("B1")

Dites-moi si cela résout vos problèmes

Bonjour Fatos,

Merci cela fonctionne à merveille.

Reste plus qu'à mettre en pratique.

Une très bonne soirée à vous.

Merci pour le retour positif.

Bonne soirée également.

Rechercher des sujets similaires à "somme recherchev fichier externe vba"