VBA: boucle sur des onglets d'un autre fichier
yg_be Messages postés 24281 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Bonjour à tous,
ci dessous (la grosse formule) un code qui marche mais que je souhaite perfectionner notamment dans un premier temps, sur la partie:
a = WorksheetFunction.Small(Workbooks("Portefeuille FIA sous gestion.xlsx").Sheets("G.F. DE BREVES").Range("k10:k49"), i)
Cette formule va aller chercher dans un autre fichier ("portefeuille FIA sous gestion"), la plus petite valeur de la sélection (range) de l'onglet ("GF de BREVES"). => Or, j'ai 32 onglets et je veux appliquer toute la formule décrite ci dessous sur chaque onglet de ce fichier (qui n'est donc pas le fichier source vous l'aurez compris).
J'ai vu des macros pour appliquer des formules sur chaque onglet du fichier source mais pas sur un autre fichier.
Merci à vous !
Matthieu
Sub stress_test_passif()
Application.ScreenUpdating = False
Workbooks.Open Filename:= _
"P:\Bureau\Audit Contrôle\Suivi des risques\tableau de bord\Portefeuille FIA sous gestion.xlsx"
Windows("suivi des augmentations de K + STRESS TEST PASSIF.xlsm").Activate
'gf de breves
For j = 3 To 61 Step 4
For i = 1 To 40
a = WorksheetFunction.Small(Workbooks("Portefeuille FIA sous gestion.xlsx").Sheets("G.F. DE BREVES").Range("k10:k49"), i)
Workbooks("suivi des augmentations de K + STRESS TEST PASSIF.xlsm").Sheets("marché secondaire inactif").Cells(56, j) = Workbooks("suivi des augmentations de K + STRESS TEST PASSIF.xlsm").Sheets("marché secondaire inactif").Cells(56, j) + a
If Workbooks("suivi des augmentations de K + STRESS TEST PASSIF.xlsm").Sheets("marché secondaire inactif").Cells(56, j) >= Workbooks("suivi des augmentations de K + STRESS TEST PASSIF.xlsm").Sheets("marché secondaire inactif").Cells(56, j - 1) Then
If Workbooks("suivi des augmentations de K + STRESS TEST PASSIF.xlsm").Sheets("marché secondaire inactif").Cells(56, j) = 0 Then Workbooks("suivi des augmentations de K + STRESS TEST PASSIF.xlsm").Sheets("marché secondaire inactif").Cells(56, j + 1) = 0
Exit For
End If
If Workbooks("suivi des augmentations de K + STRESS TEST PASSIF.xlsm").Sheets("marché secondaire inactif").Cells(56, j) > 0 Then Workbooks("suivi des augmentations de K + STRESS TEST PASSIF.xlsm").Sheets("marché secondaire inactif").Cells(56, j + 1) = (i - WorksheetFunction.CountIf(Workbooks("Portefeuille FIA sous gestion.xlsx").Sheets("G.F. DE BREVES").Range("k10:k49"), 0)) + 1
Next i
Next j
Windows("suivi des augmentations de K + STRESS TEST PASSIF.xlsm").Activate
- VBA: boucle sur des onglets d'un autre fichier
- Excel compter cellule couleur sans vba - Guide
- Vba ouvrir un fichier excel avec chemin ✓ - Forum VB / VBA
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Vba range avec variable ✓ - Forum VB / VBA
2 réponses
Bonjour
la méthode Sheets() prend soit une string en paramètre soit un entier correspondant à l'index de la page.
Tu peux donc utiliser un for pour iterer tes feuilles.
bonjour,
"appliquer toute la formule décrite ci dessous sur chaque onglet": tu veux faire une boucle sur les onglets, ou chercher simultanément dans tous les onglets?
un exemple de boucle:
Dim wbgestion As Workbook, wsloop As Worksheet
Set wbgestion = Workbooks.Open( _
"P:\Bureau\Audit Contrôle\Suivi des risques\tableau de bord\Portefeuille FIA sous gestion.xlsx")
For Each wsloop In wbgestion.Worksheets
Next wsloop
un autre exemple:
Sub stress_test_passif()
Dim a, i, j
Dim wbgestion As Workbook, wbstress As Workbook
Dim wsinactif As Worksheet, wsloop As Worksheet
Application.ScreenUpdating = False
Set wbgestion = Workbooks.Open( _
"P:\Bureau\Audit Contrôle\Suivi des risques\tableau de bord\Portefeuille FIA sous gestion.xlsx")
Set wbstress = Workbooks("suivi des augmentations de K + STRESS TEST PASSIF.xlsm")
Set wsinactif = wbstress.Sheets("marché secondaire inactif")
For j = 3 To 61 Step 4
For i = 1 To 40
For Each wsloop In wbgestion.Worksheets
a = WorksheetFunction.Small(wsloop.Range("k10:k49"), i)
wsinactif.Cells(56, j) = wsinactif.Cells(56, j) + a
If wsinactif.Cells(56, j) >= wsinactif.Cells(56, j - 1) Then
If wsinactif.Cells(56, j) = 0 Then
wsinactif.Cells(56, j + 1) = 0
End If
GoTo nextj
End If
If wsinactif.Cells(56, j) > 0 Then
wsinactif.Cells(56, j + 1) = _
(i - WorksheetFunction.CountIf(wsloop.Range("k10:k49"), 0)) + 1
End If
Next wsloop
Next i
nextj:
Next j
wbstress.Activate
End Sub
Merci yg_be
je te remercie pour ce code beaucoup moins lourd que le mien et plus lisible .
Petite question, comme tu peux le voir mes "cells" vont de cells(56,j). si je souhaite avoir une boucle allant de z = 53 to 84 pour faire cells(z,j)
ou dois je placer cette boucle z dans ton code ? (j'ai essayé de le bidouiller mais le résultat qui sort ne me convient pas, je dois donc me tromper de place )
Merci !