Instruction select case vba

RaihanaTag Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   -  
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   -
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313
 
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   Statut Membre Dernière intervention  
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313 > RaihanaTag Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313 > RaihanaTag Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
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