XL 2016 VBA Récupération ensemble de variables

Phillip

XLDnaute Occasionnel
Bonjour,

J'ai un fichier qui pourrait ressembler à celui en exemple. Tous les nombres de la colonne A sont calculés par une macro, grâce à des variables. Ces nombres correspondent à une valeur dans la colonne B.

Dans A28, j'ai mis une formule qui me permet de dire que si j'ai à la fois 4 et 13 dans la colonne A, alors, j'écris les lettres correspondantes de la colonne B

Je voudrais, que dans ma macro qui traite toute ces variables écrire un code qui les récupère et fassent ce travail, et qu'ensuite je colle le résultat de ce travail dans A28.

Est-ce possible ? Long ? Je ne voudrais pas trop mélanger formules dans la feuille et travail de macro, mais peut-être n'est-ce pas si simple ?

Merci

Cordialement

Phillip
 

Pièces jointes

  • test.xlsm
    16.3 KB · Affichages: 22

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Phillip,
Essayez d'intégrer ce bout de code dans votre macro :
VB:
Sub ChercheValeurs()
Dim Val4 As Integer, Val13 As Integer, Car4 As String, Car13 As String, L As Integer
Val4 = 0: Val13 = 0
For L = 1 To 27
    If Cells(L, "A") = 4 Then
        Val4 = 1: Car4 = Cells(L, "B")
    ElseIf Cells(L, "A") = 13 Then
        Val13 = 1: Car13 = Cells(L, "B")
    End If
Next L
If Val4 = 1 And Val13 = 1 Then [A28] = Car4 & Car13
End Sub
A noter que cette macro récupère le dernier 4 et le dernier 13 trouvé car non précisé. si plusieurs occurrences sont possibles alors :
VB:
Sub ChercheValeurs()
Dim Val4 As Integer, Val13 As Integer, Car4 As String, Car13 As String, L As Integer
Val4 = 0: Val13 = 0: Car4 = "": Car13 = ""
For L = 1 To 27
    If Cells(L, "A") = 4 Then
        Val4 = 1: Car4 = Car4 & Cells(L, "B")
    ElseIf Cells(L, "A") = 13 Then
        Val13 = 1: Car13 = Car13 & Cells(L, "B")
    End If
Next L
If Val4 = 1 And Val13 = 1 Then [A28] = Car4 & Car13
End Sub
 
Dernière édition:

Phillip

XLDnaute Occasionnel
Bonjour Sylvanu et merci !
Ton code oblige à revenir chercher des variables dans la feuille...J'aurais voulu éviter ça, mais peut être que c'est difficile voire impossible vu comment j'ai codé le reste. En fait, j'aurais voulu rester dans le code après calcul de mes variables
VB:
Val4= val3+val2
Val5= Val1+vall8
Val8=Val13+val9
..................
'ici j'aurais le code cherché
Si (à un moment donné) une des val (4, 5, ou 8) = toto et une autre Val (4,5 ou 8) = tata, (et sont présents) alors resultat=titi (sachant que j'ai environ 30 valeurs résultats)
etc....

J'espère que c'est plus clair...

Merci

Cordialement
 

Phillip

XLDnaute Occasionnel
Bonjour,

En effet c'est peu clair...j'ai changé de stratégie et j'ai fait un array. Tous les membres de mon array sont calculés dans la macro, et je dois vérifier si des combinaisons existent. J'en ai une vingtaine à vérifier, peut-être puis-je optimiser ?
VB:
Tableau_arcanes = Array(POSTE1, poste2, poste3, poste4, poste5, poste6, poste7, poste8, poste9, poste10, poste11, poste12, poste13, _
    poste14, poste15, poste16, poste17, archint, LeDon, Linclinaison, RecMonde, MaJustePlace, Accompoeuvre, Lancrage, ArcaneCle, _
    Tyrolincarn, Envol)
For i = LBound(Tableau_arcanes) To UBound(Tableau_arcanes)
    For j = LBound(Tableau_arcanes) To UBound(Tableau_arcanes)
    'Ici, j'ai une vingtaine de conditions à vérifier...Optimisation possible ?
        If Tableau_arcanes(i) = 4 And Tableau_arcanes(j) = 13 Or Tableau_arcanes(j) = 4 And Tableau_arcanes(i) = 13 Then
        meteor1 = "Empereur + Sans Nom"
        if Tableau_arcanes(i) = 8 And Tableau_arcanes(j) = 10 Or Tableau_arcanes(j) = 10 And Tableau_arcanes(i) = 8 Then
        meteor2 = "toto + tata"
        End If
        'etc...............20 fois....
    Next j
Next i

Merci

Cordialement
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
En passant par un autre array qui contient les deux valeurs à comparer et la valeur à mettre si égalité :
VB:
Sub Essai()
Dim Météor(20), IndiceMeteor As Integer
Tableau_arcanes = Array(POSTE1, poste2, poste3, poste4, poste5, poste6, poste7, poste8, poste9, poste10, poste11, poste12, poste13, _
    poste14, poste15, poste16, poste17, archint, LeDon, Linclinaison, RecMonde, MaJustePlace, Accompoeuvre, Lancrage, ArcaneCle, _
    Tyrolincarn, Envol)

' Structure Tableau_Compare : deux nombres à comparer puis valeur à attribuer.
' Le premier 0 ne sert à rien, il permet que le premier indice utile soit 1
Tableau_Compare = Array(0, 4, 13, "Empereur + Sans Nom", 8, 10, "toto + tata", 12, 7, "titi+toto")

IndiceMeteor = 1 ' Indice de l'array de sortie
For i = LBound(Tableau_arcanes) To UBound(Tableau_arcanes)
    For j = LBound(Tableau_arcanes) To UBound(Tableau_arcanes)
        For k = 1 To UBound(Tableau_Compare) Step 3
             If Tableau_arcanes(i) = Tableau_Compare(k) And Tableau_arcanes(j) = Tableau_Compare(k + 1) Or _
                Tableau_arcanes(j) = Tableau_Compare(k) And Tableau_arcanes(i) = Tableau_Compare(k + 1) Then
                    Météor(IndiceMeteor) = Tableau_Compare(k + 2)
            End If
            IndiceMeteor=IndiceMeteor+1
        Next k
    Next j
Next i
' Le résultat se trouve dans l'array Météor
End Sub
Il suffit d'enrichir la matrice Tableau_Compare avec autant de triolet que necessaire, il n'y a qu'une boucle de comparaison avec l'indice k ( step 3 puisque 3 valeurs par comparaisons )
 

Discussions similaires

Statistiques des forums

Discussions
312 203
Messages
2 086 191
Membres
103 152
dernier inscrit
Karibu