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:

Discussions similaires

Réponses
30
Affichages
1 K

Statistiques des forums

Discussions
312 203
Messages
2 086 195
Membres
103 153
dernier inscrit
SamirN