Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Macro avec fonction SI

Thibault123

XLDnaute Junior
Bonjour,

J'ai une macro qui permet de récupérer des données à partir de plusieurs fichiers Excel.
En fonction de la valeur en colonne D, j'aimerais que certaines valeurs soient récupérées.

Si la valeur en colonne D est "E_0018_v20_5K_QC_report.xls" ou "E_0306_v8_8K_QC_report.xlsx" ou "E_0022_v9_2K_QC_report.xlsx", j'aimerais que soient affichées les valeurs resu correspondant aux txt1, 2, 3, 12, 13, 14, 15 et 16 de la macro.
Si la valeur en colonne D est "E_0018_v21_5K_QC_report.xlsx" ou "E_0306_v9_8K_QC_report.xlsx" ou "E_0022_v11_2K_QC_report.xlsx", j'aimerais que soient affichées toutes les valeurs resu de la macro.

J'espère avoir été clair!?
Je ne sais pas comment intégrer cette fonction SI dans la macro existante, et cela pour que la macro soit la plus rapide/efficace possible.

Merci d'avance pour votre aide.
 

Pièces jointes

  • Performance.xlsm
    241.2 KB · Affichages: 12

job75

XLDnaute Barbatruc
Bonjour Thibault123, le forum,

Vérifiez que c'est bien ceci que vous voulez :
VB:
Sub Recuperation_scores()
Dim chemin$, a(1 To 16), tablo, resu(), i&, x$, f$, test1 As Boolean, test2 As Boolean, j%
chemin = [A1]
a(1) = "G2"
a(2) = "H2"
a(3) = "I2"
a(4) = "J2"
a(5) = "M195"
a(6) = "M196"
a(7) = "M197"
a(8) = "M198"
a(9) = "M199"
a(10) = "M200"
a(11) = "M201"
a(12) = "F196"
a(13) = "F197"
a(14) = "F198"
a(15) = "F199"
a(16) = "F200"
tablo = [A3].CurrentRegion.Resize(, 4)
With [A3].CurrentRegion.Columns(5).Resize(, 16)
    ReDim resu(1 To .Rows.Count, 1 To 16) 'resu = .Formula
    For i = 2 To UBound(tablo)
        If IsDate(tablo(i, 1)) Then
            x = tablo(i, 4)
            f = "='" & chemin & tablo(i, 2) & "\[" & x & "]10. Quality KPI'!"
            test1 = x = "E_0018_v20_5K_QC_report.xls" Or x = "E_0306_v8_8K_QC_report.xlsx" Or x = "E_0022_v9_2K_QC_report.xlsx"
            test2 = x = "E_0018_v21_5K_QC_report.xlsx" Or x = "E_0306_v9_8K_QC_report.xlsx" Or x = "E_0022_v11_2K_QC_report.xlsx"
            For j = 1 To 16
                If test1 And (j < 4 Or j > 11) Or test2 Then resu(i, j) = f & a(j)
            Next j
        End If
    Next i
    Application.DisplayAlerts = False
    For j = 1 To 16: resu(1, j) = .Cells(1, j): Next 'titres
    .Formula = resu
End With
End Sub
A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Mais non, il faut récupérer les titres à l'endroit que j'ai indiqué, après la boucle For i = 2 To UBound(tablo)

Comme vous le faites (dans la boucle i) cela sera répété un grand nombre de fois...
 

Discussions similaires

Réponses
30
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…