VBA: boucle sur des onglets d'un autre fichier
yg_be Messages postés 23541 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
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Dépassement de capacité vba ✓ - Forum Excel
- Mkdir vba ✓ - 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 !