Matrice dans une macro

Bonjour le forum,

j'ai réalisé une macro personnelle dans excel qui me permet dans un nouveau classeur d'associer des valeurs à d'autres valeurs grâce a une fonction RECHERCHEV.

Mon problème est que cette matrice de la fonction RECHERCHEV n'existe pas dans le classeur (qui change à chaque fois) je dois donc l'intégrer à la macro.

La solution que j'ai trouve est au sein de la macro de réaliser la saisir de la matrice (Range("G18").Select

ActiveCell.FormulaR1C1 = "18"

puis de la supprimer après l'avoir utilisé.

Cette solution fonctionne mais elle est assez longue à saisir si la matrice est importante et me semble assez empirique.

Y a t'il une autre démarche?

Merci d'avance

MattJol

Bonjour,

Je n'ai rien compris à ta demande.

Peux-tu donner plus d'explications ou alors mettre cette macro ici.

A te lire

Dan

oui c sûr que j'ai pas été très très clair

Voici la macro en attachement https://www.excel-pratique.com/~files/doc/Delais_fournisseurs_V2.zip

Tu verras que dans cette macro j'utilise la fonction VLOOKUP qui nécessite une matrice, que je renseigne au préalable en enregistrant toute la saisie de cette matrice dans la feuille excel.

Je voudrais savoir s'il n'y a pas une méthode plus propre!

Re,

Merci pour ton fichier.

Une chose que tu peux déjà effectuer, c'est remplacer toutes les instructions de type :

Range("G2").Select
ActiveCell.FormulaR1C1 = "19"

par :

Range("G2").value= 19

A adapter selon chaque cellule bien entendu.

Je regarde pour le reste

Dan

Salut le forum

Pour remplir tes matrices utilise les "Array's"

'...
'Matrice #1
    i = 0
    For Each valeur In Array(18, 19, 16, 20, 15, 21, 14, 13, 22, 12, _
          23, 24, 11, 25, 26, 27, 10, 28, 9, 8, _
          29, 7, 6, 5, 4, 30, 31, 3, 2, 32, _
          33, 34, 1, 35, 36, 37, 0, 38, 17, 39)
    i = i + 1
    Range("G" & i) = valeur
    Next valeur
'Matrice #2
    i = 0
    For Each valeur In Array("90 JN", "90 JFQ", "90 JFM", "90 JFD", "60 JN", _
           "60 JFQ", "60 JFM", "60 JFD", "50 JN", "50 JFQ", _
           "50 JFM", "50 JFD", "45 JN", "45 JFQ", "45 JFM", _
           "45 JFD", "30 JN", "30 JFQ", "30 JFM", "30 JFD", _
           "25 JN", "25 JFQ", "25 JFM", "25 JFD", "20 JN", _
           "20 JFQ", "20 JFM", "20 JFD", "15 JN", "15 JFQ", _
           "15 JFM", "15 JFD", "10 JN", "10 JFQ", "10 JFM", _
           "10 JFD", "0 JN", "0 JFQ", "0 JFM", "0 JFD")
    i = i + 1
    Range("H" & i) = valeur
    Next valeur
'Matrice #3
    i = 0
    For Each valeur In Array(95,102.5,105,95,65,72.5,75,65,55,62.5, _
           65, 55, 50, 57.5, 60, 50, 35, 42.5, 45, 35, _
           30, 37.5, 40, 30, 25, 32.5, 35, 25, 20, 27.5, _
           30, 20, 15, 22.5, 25, 15, 5, 12.5, 15, 5)
    i = i + 1
    Range("I" & i) = valeur
    Next valeur
'...

Mytå

Bonsoir,

Ah ben Myta c'est encore mieux avec ARRAY. Je l'avais complètement oubliée celle-là !

Revoici ta macro avec la proposition de Myta. Elle peut probablement encore être simplifiée mais là le fichier serait nécessaire.

Sub Delais_Fournisseurs()
Dim valeur
    Range("B:B,E:E,F:G,I:M").Delete Shift:=xlToLeft
    Columns("D:D").Select
    Selection.Replace What:=",", Replacement:=".", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False

    Rows("1:2").Insert Shift:=xlDown
    Range("C1").Value = "MONTANT TOTAL"
    Range("D1").FormulaR1C1 = "=SUM(R[2]C:R[999]C)"
     'Matrice #1
     i = 0
     For Each valeur In Array(18, 19, 16, 20, 15, 21, 14, 13, 22, 12, 23, 24, _
     11, 25, 26, 27, 10, 28, 9, 8, _
     29, 7, 6, 5, 4, 30, 31, 3, 2, 32, 33, 34, 1, 35, 36, 37, 0, 38, 17, 39)
     i = i + 1
     Range("G" & i) = valeur
     Next valeur
 'Matrice #2
 i = 0
 For Each valeur In Array("90 JN", "90 JFQ", "90 JFM", "90 JFD", "60 JN", _
    "60 JFQ", "60 JFM", "60 JFD", "50 JN", "50 JFQ", _
    "50 JFM", "50 JFD", "45 JN", "45 JFQ", "45 JFM", _
    "45 JFD", "30 JN", "30 JFQ", "30 JFM", "30 JFD", _
    "25 JN", "25 JFQ", "25 JFM", "25 JFD", "20 JN", _
    "20 JFQ", "20 JFM", "20 JFD", "15 JN", "15 JFQ", _
    "15 JFM", "15 JFD", "10 JN", "10 JFQ", "10 JFM", _
    "10 JFD", "0 JN", "0 JFQ", "0 JFM", "0 JFD")
    i = i + 1
    Range("H" & i) = valeur
Next valeur
 'Matrice 3
 i = 0
 For Each valeur In Array(95, 102.5, 105, 95, 65, 72.5, 75, 65, 55, 62.5, _
    65, 55, 50, 57.5, 60, 50, 35, 42.5, 45, 35, _
    30, 37.5, 40, 30, 25, 32.5, 35, 25, 20, 27.5, _
    30, 20, 15, 22.5, 25, 15, 5, 12.5, 15, 5)
    i = i + 1
    Range("I" & i) = valeur
    Next valeur

    Columns("C:D").Insert Shift:=xlToRight

    With Range("C3")
        .FormulaR1C1 = "=VLOOKUP(RC[-1],R1C9:R40C11,2,FALSE)"
        .AutoFill Destination:=Range("C3:C" & Range("B65536").End(xlUp).Row)
    End With
    With Range("D3")
        .FormulaR1C1 = "=VLOOKUP(RC[-2],R1C9:R40C11,3,FALSE)"
        .AutoFill Destination:=Range("D3:D" & Range("B65536").End(xlUp).Row)
    End With

    Columns("C:D").Copy
    Selection.PasteSpecial Paste:=xlValues

    Columns("I:K").Delete Shift:=xlToLeft
    With Range("G3")
        .FormulaR1C1 = "=RC[-1]/R1C6"
        .AutoFill Destination:=Range("G3:G" & Range("D65536").End(xlUp).Row)
    End With
    With Range("H3")
        .FormulaR1C1 = "=RC[-1]*RC[-4]"
        .AutoFill Destination:=Range("H3:H" & Range("E65536").End(xlUp).Row)
    End With

    Range("A1").FormulaR1C1 = "DELAIS MOYEN"
    Range("C1").FormulaR1C1 = "=SUM(R[2]C[5]:R[999]C[5])"

    Selection.NumberFormat = "0.00"" jours"""
    Columns("F:F").NumberFormat = "#,##0"
    Columns("G:G").NumberFormat = "0.00%"

    Range("B:B").Delete Shift:=xlToLeft
    Columns("A:F").EntireColumn.AutoFit

    Range("A3").CurrentRegion.Select
    Selection.Sort Key1:=Range("C3"), Order1:=xlDescending, Key2:=Range("B3") _
        , Order2:=xlDescending, Key3:=Range("D3") _
        , Order3:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom

    Range("G:G").EntireColumn.Hidden = True
    Range("A1").Select
End Sub

A te lire

Dan

Re le forum

Dan tu as oublié une déclaration de variable

Sub Delais_Fournisseurs()

Dim valeur as Variant

Dim i as byte

'.....

Le Variant étant facultatif pour le Dim valeur

Mytå

Bonjour,

Oups, je n'ai pas fait attention. Effectivement i était à déclarer aussi.

Merci de le préciser Myta.

Bon WE

Dan

Ok

Merci à tous les 2

Rechercher des sujets similaires à "matrice macro"