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.
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 SubCe 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 Subtoujours 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 SubJe 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 SubPour 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.