Instruction select case vba

Fermé
RaihanaTag Messages postés 17 Date d'inscription mercredi 19 août 2015 Statut Membre Dernière intervention 28 mai 2016 - Modifié par NHenry le 26/05/2016 à 12:43
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 29 mai 2016 à 08:56
Bonjour,
Je suis en train de développer une petite application sur VBA et j'ai une toute petite question concernant l'instruction Select case
Pour bien comprendre ce que je veux
voici mon code :

Function insertion(a As Integer, b As Integer) ' étant donné que les contraintes sont satisfait
Dim i, j As Integer
i = 1
j = 1
Select Case cas(a, b)
Case 1
    chemin(1, temp) = a
    chemin(2, temp) = b
    Exit Function
Case 2
    If ligne(a) = 1 Then
        Do While chemin(i, colonne(a)) <> 0
            i = i + 1
        Loop
        Do While i >= 1
            chemin(i + 1, colonne(a)) = chemin(i, colonne(a))
        Loop
        chemin(1, colonne(a)) = b
    Else:
        chemin(ligne(a) + 1, colonne(a)) = b
    End If
    If temp <> colonne(a) Then
       'function permutation de colonne a definir
    End If
    Exit Function
Case 3
    If ligne(b) = 1 Then
        Do While chemin(i, colonne(b)) <> 0
            i = i + 1
        Loop
        Do While i >= 1
            chemin(i + 1, colonne(b)) = chemin(i, colonne(b))
        Loop
        chemin(1, colonne(b)) = a
    Else:
        chemin(ligne(b) + 1, colonne(b)) = a
    End If
    If temp <> colonne(b) Then
       'function permutation de colonne a definir
    End If
    Exit Function
End Function 


Si vous remarquez bien les instructions pour le cas 2 et cas 3 sont symétriques ( il n 'y a que le a et b qui changent de rôle)
ce que j'aimerai bien savoir est : est ce qu'il y a une façon de faire appel aux instructions du cas 2 au cas 3 tout en permutant le a et le b sans être obligé de reprendre tout le code

Merci pour votre aide
et bonne journée :)



1 réponse

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 26/05/2016 à 12:01
Bonjour

Select Case cas(a, b)
"cas" ques aco ?

chemin(1, temp) = a
m^ question...

etc

 Michel
0
RaihanaTag Messages postés 17 Date d'inscription mercredi 19 août 2015 Statut Membre Dernière intervention 28 mai 2016
26 mai 2016 à 14:07
bonjour Michel_m,
le cas (a,b) est une autre fonction qui permet de définir le cas du couple (a,b)
elle prend des valeurs entières entre 1 et 4
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > RaihanaTag Messages postés 17 Date d'inscription mercredi 19 août 2015 Statut Membre Dernière intervention 28 mai 2016
Modifié par michel_m le 26/05/2016 à 14:48
et temp ?


si case >1
tu appelles une sub paramétrée (ou fonction) avec comme paramètres (cas, a, b)
si case =2 alors X=A sinon X=B
et ensuite
If ligne(X) = 1 Then
Do While chemin(i, colonne(X)) <> 0
etc


mais comme on ne connait pas le type des données ni d'où sortent et signifient presque toutes tes variables et leur type, il est difficile de choisir la solution fonction ou sub la + adaptée
0
RaihanaTag Messages postés 17 Date d'inscription mercredi 19 août 2015 Statut Membre Dernière intervention 28 mai 2016
28 mai 2016 à 21:51
Je vois ce que vous vouliez dire, je m'excuse si mes données ne sont pas claires
En fait: Cas ( a ,b ) est une fonction qui reçoit en paramètres le couple d'entiers (a,b) et retourne un entier entre 0 et 4 / Chemin () est une matrice / colonne (a) (respectivement ligne(a)) est une fonction qui reçoit en paramètre un entier et retourne l'indice de sa colonne (resp.ligne) de de l'entier dans la matrice chemin / temp est un entier naturel

Si vous remarquez bien le bloc d'instruction lié à case 2 et celui a case 3 le a et le b joue des rôles symétriques c'est à dire si je prend les instructions de case 2 et je permute le a et le b je tombe dans ceux liés à Case 3.

Ce que je chercher à savoir est un moyen d'appeler les instructions de case 2 en case 3 tout en permutant a et b question de rendre mon code plus léger

J'espère que l'idée est claire maintenant et je tient à m'excuser une seconde fois.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > RaihanaTag Messages postés 17 Date d'inscription mercredi 19 août 2015 Statut Membre Dernière intervention 28 mai 2016
Modifié par michel_m le 29/05/2016 à 08:56
bonjour
ben, tu as l'algo que je t'ai communiqué avec toutefois 2 ou 3 !

select case cas(a,b)
case=1
...
case=2
call taproc(2)
...etc
case=3
call taproc(3)
.....rtc
case=4
....etc
end select

sub taproc(X)
If ligne(X) = 1 Then
Do While chemin(i, colonne(X)) <> 0
... etc
0