Besoin d'aide d'un expert en optimisation

pier0 Messages postés 67 Date d'inscription mardi 19 juillet 2005 Statut Membre Dernière intervention 2 septembre 2005 - 22 juil. 2005 à 16:56
pier0 Messages postés 67 Date d'inscription mardi 19 juillet 2005 Statut Membre Dernière intervention 2 septembre 2005 - 25 juil. 2005 à 12:37
Bonjour,
J'ai des programmes qui marchent et je cherche à les optimiser pour qu'il fonctionnent plus rapidement:
Voila les codes:
********************Module1**********************
Sub Macro_Compare_Cmdes_OHS_Planning()
' Déclarations des variables locales
Dim lgne_max_Planning As Integer, lgne_max_OHS As Integer
Dim i As Integer, j As Integer, k As Integer
Dim semaphore As Boolean


Application.ScreenUpdating = False
' Recuperation nb de ligne de chaque feuille
Sheets("Planning").Select
lgne_max_Planning = Range("A1").CurrentRegion.Rows.Count
Sheets("Feuil3").Select
Sheets("Feuil3").Name = "OHS"
lgne_max_OHS = Range("A1").CurrentRegion.Rows.Count

' Recopie de la ligne d'en tête
k = 1
Rows(1).Select
Selection.Copy
Sheets("Feuil1").Select
Sheets("Feuil1").Name = "Résultats de comparaison"
Rows(k).Select
ActiveSheet.Paste
k = 2


Sheets("OHS").Select

For j = 2 To lgne_max_OHS


If (Worksheets("OHS").Cells(j, 1).Value <> Empty) Then
semaphore = False
Planning
For i = 1 To lgne_max_Planning

If (Worksheets("Planning").Cells(i, 1).Value <> Empty) Then
valeur_cell = Worksheets("Planning").Cells(i, 1).Value
If ((Worksheets("Planning").Cells(i, 1).Value <> "LUNDI") And (Worksheets("Planning").Cells(i, 1).Value <> "MARDI") And (Worksheets("Planning").Cells(i, 1).Value <> "MERCREDI") And (Worksheets("Planning").Cells(i, 1).Value <> "JEUDI") And (Worksheets("Planning").Cells(i, 1).Value <> "VENDREDI") And (Worksheets("Planning").Cells(i, 1).Value <> "SAMEDI") And (Worksheets("Planning").Cells(i, 1).Value <> "DIMANCHE")) Then

If Worksheets("Planning").Cells(i, 1).Value = Worksheets("OHS").Cells(j, 1).Value Then
semaphore = True
End If

Else
' valeur_cell contient un jour
End If
Else

' La ligne i est vide ...

End If

Next i
If semaphore = True Then
Sheets("OHS").Select
Rows(j).Select
Selection.Copy
Sheets("Résultats de comparaison").Select
Rows(k).Select
ActiveSheet.Paste
k = k +1
Else 'commandes non présentes dans le Planning
End If


ElseIf (Worksheets("OHS").Cells(j, 1).Value = Empty) Then
' A La colonne 1 ligne j valeur_cell3 est vide
End If

Next j

Application.ScreenUpdating = True
End Sub
******************module 2**************************************
' Fonctionde recherche de la ligne du jour LUNDI,MARDI etc..
Public Function find_jour(ByVal ligne As Integer, ByVal col As Integer, ByVal jour_ref As String, ByVal v_max As Integer) As Integer


Set cell_trouve = ActiveSheet.Cells.Find(What:=jour_ref, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)

colonne_jour = cell_trouve.Column
ligne_jour = cell_trouve.Row

Do
Test_trouve_jour = ((colonne_jour >= 6 And colonne_jour <= 9) _
And (Cells(ligne_jour, colonne_jour - 1).FormulaR1C1 = Empty _
And Cells(ligne_jour, colonne_jour + 1).FormulaR1C1 = Empty))
If Test_trouve_jour Then
Exit Do
End If
Set cell_trouve = Cells.FindNext(cell_trouve)
colonne_jour = cell_trouve.Column
Loop Until Not (cell_trouve Is Nothing And colonne_jour <> 8)

If (cell_trouve Is Nothing And Not (Test_trouve_jour)) Then
MsgBox ("Pb sur le fichier MES , manque " & jour_ref & "!")
End If

'compare pour chaque ligne i le contenu de la cellule (i,colonne_jour) et retourne la ligne du jour
For i = ligne To v_max
If InStr(UCase(Cells(i, colonne_jour).Value), jour_ref) Then 'Ucase pour mettre en majuscule le contenu de chaque cellule (i,colonne_jour) pour traiter le cas quelque soit la casse utilisée dans le planning
find_jour = i + 1
Exit For
End If
Next i

End Function


Public Function est_commande_txt(ByVal chaine As String) As Boolean

'Initialisation des variables
Dim Car(1 To 7) As String
Type_cmde = Array("INT0", "IPC0", "EUR0", "HSS0", "HSR0", "SWF0", "SEV")
Lg_Car = Len(chaine)
Car(1) = Left(chaine, 1)
chaine_ext = chaine
C = Left(chaine, 1)

compteur = 1
test_txt = False

For i = 0 To 6
test_txt = (InStr(chaine, Type_cmde(i)) > 0) Or test_txt
If test_txt = True Then
Prefix_cmde = Type_cmde(i)
pos_chaine = InStr(chaine, Type_cmde(i))
Exit For
End If
Next i

If test_txt Then
est_commande_txt = True
Else
est_commande_txt = False
End If

End Function
Public Function est_commande_num(ByVal chaine As String) As Boolean

'Initialisation des variables
Dim Car(1 To 7) As String
Lg_Car = Len(chaine)
chaine_ext = chaine
C = Left(chaine, 1)

For N = 1 To Lg_Car
If (Not (Asc(C) >= 48 And Asc(C) <= 57) And N <= Lg_Car) Then
chaine_ext = Right(chaine_ext, Lg_Car - N)
C = Left(chaine_ext, 1)
End If
Next N

test_INT = True
If Len(chaine_ext) >= 7 Then
For j = 1 To 7
Car(j) = Mid(chaine_ext, j, 1)
test_INT = (Asc(Car(j)) >= 48 And Asc(Car(j)) <= 57) And test_INT
Next j
Else
est_commande_num = False
Exit Function
End If

If test_INT Then
est_commande_num = True
Else
est_commande_num = False
End If

End Function


Public Function OHS_version7(ByVal chaine_act As String) As String

liste_jour = Array("LUNDI", "MARDI", "MERCREDI", "JEUDI", "VENDREDI", "SAMEDI", "DIMANCHE")

cmde_act = chaine_act
'test si <> jour
test_jour = False
For T = 0 To 6
Select Case cmde_act
Case Is = liste_jour(T)
test_jour = True
End Select
If test_jour = True Then
Exit For
End If
Next T

'suppression du S ds les cmdes de switch
If Right(cmde_act, 1) "S" And Len(cmde_act) 9 Then
cmde_act = Mid(cmde_act, 2, 7)
ElseIf Mid(cmde_act, 9, 1) "S" And Len(cmde_act) 11 Then
cmde_act = Mid(cmde_act, 1, 8) & Right(cmde_act, 2)
End If

'ajout 0 devant cmde avec slash
If (InStr(cmde_act, "/") <> 0) And Len(cmde_act) = 9 Then
cmde_act = "0" & cmde_act
End If

test_du_6 (Mid(cmde_act, 4, 1) <> "6" And Len(cmde_act) 7) And test_jour <> True
test_6_slash (Mid(cmde_act, 5, 1) <> "6" And Len(cmde_act) 10) And test_jour <> True
test_INT Left(cmde_act, 3) "INT" Or Left(cmde_act, 3) = "int" Or Left(cmde_act, 3) = "Int"
test_OLO = InStr(cmde_act, "OLO")

'suppression de OLO
If test_OLO Then
cmde_act = Left(cmde_act, test_OLO - 1) & Mid(cmde_act, test_OLO + 3, Len(cmde_act) - test_OLO - 2)
End If


If test_du_6 Then
OHS_version7 = Left(cmde_act, 3) & "6" & Mid(cmde_act, 4, 4)
ElseIf test_6_slash Then
OHS_version7 = Left(cmde_act, 4) & "6" & Mid(cmde_act, 5, 6)

ElseIf test_INT Then
Long_max_chaine = Len(cmde_act)
cpt = 4
test_chiffre = True
While (test_chiffre And cpt <= Long_max_chaine)
caract = Mid(cmde_act, cpt, 1)
test_chiffre = (Asc(caract) >= 48 And Asc(caract) <= 57)
If test_chiffre Then
cpt = cpt + 1
ElseIf cpt = 11 Then
OHS_version7 = Left(cmde_act, 7) & "00" & Mid(cmde_act, 8, Long_max_chaine - 7)

ElseIf cpt = 12 Then
OHS_version7 = Left(cmde_act, 7) & "0" & Mid(cmde_act, 8, Long_max_chaine - 7)

ElseIf cpt = 13 Then
OHS_version7 = Left(cmde_act, 7) & Mid(cmde_act, 8, Long_max_chaine - 7)

End If
Wend

If Long_max_chaine = 11 Then
OHS_version7 = Left(cmde_act, 7) & "0" & Mid(cmde_act, 8, 11 - 7)
ElseIf Long_max_chaine = 12 Then
OHS_version7 = cmde_act
End If

Else
OHS_version7 = cmde_act
End If


End Function
*******************module3*****************************

'variables globales
Public Sem_INST As Integer 'numero de la semaine
Public nom_file_MES As String
Public nom_file_NP As String
Public date_deb As Date
Public Prefix_cmde As String
Public pos_chaine As Integer
Public A(1 To 5) As Variant
'Public NB_fois As Integer


Function dates_sem_MES(semaine_INST As Integer) As String

date_INIT = #1/3/2005#

date_deb = date_INIT + (7 * (semaine_INST - 1))
date_fin = date_INIT + (7 * semaine_INST) - 1

'conversion de la valeur entière en caractère
str_semaine_INST = Str(semaine_INST)



'Si 1 seul digit alors on mets un 0 devant ex. 1->01
If Len(str_semaine_INST) = 2 Then
Mid(str_semaine_INST, 1, 1) = "0"
ElseIf Len(str_semaine_INST) = 3 Then
str_semaine_INST = Right(str_semaine_INST, 2)
End If

dates_sem_MES = str_semaine_INST & " (" & Format(date_deb, "dd-mm-yy") & " au " & Format(date_fin, "dd-mm-yy") & ")"

If Year(date_deb) <> Year(date_fin) Then
MsgBox ("ATTENTION on change d'année !")
End If

End Function

Sub ouverture_fichier_MES()
Dim temp As String 'var intermediaire pour avoir le retour de InputBox soit en integer soit en string
Dim temp2 As Byte 'var locale pour pouvoir utiliser MsgBox avec l'attribut vbOKOnly
Dim Sem_INST As Integer 'Integer
Dim NB_fois As Integer
NB_fois = 0

'Sem_NP = InputBox("Entrer le n° de la semaine ")
' If Sem_NP < 52 Then
' Sem_INST = Sem_NP + 1
' ElseIf Sem_NP = 52 Then
' Sem_INST = 1
' Else
' MsgBox (" Numéro de la semaine doit être compris entre 1 et 52 !")
' Exit Sub
' End If

Application.ScreenUpdating = False 'On bloque la mise à jour de l'affichage pour que le progr tourne plus vite


empeche_erreur: 'empeche erreur si on clique sur annuler
temp = InputBox("Entrer le n° de la semaine CSP") 'temp variable intermédiaire

If (temp <> "") Then

Sem_INST = temp 'si on clique sur ok on caste temp (string) en entier
If Sem_INST > 53 Or Sem_INST < 1 Then
MsgBox (" Numéro de la semaine doit être compris entre 1 et 53 !")
GoTo empeche_erreur:
'Exit Sub
End If

str_dte = dates_sem_MES(Sem_INST)

nom_file_MES = "Semaine Mes " & str_dte & ".xls"

Line0:
'sort du programme au bout de 3 essais
If NB_fois = 3 Then
nom_file_MES = "ERREUR"
Exit Sub
End If

chemin_file_MES = "\\Eu\Dfs\Fr\Share\Service Delivery\_Share\02.Planification\Paris\Planning Mise en service" & nom_file_MES


'vérifie si ds tous les fichiers ouverts , le fichier MES (planning) est déjà ouvert
fichier_MES_ouvert = False
For i = 1 To Workbooks.Count 'test si nom_file_MES ds tous les classeurs ouvert->le fichier nom_file_MES est ouvert
If Workbooks(i).Name = nom_file_MES Then
fichier_MES_ouvert = True 'fichier deja ouvert
ElseIf InStr(Workbooks(i).Name, "Planning_COP") Then 'sert à rien!!!***************************
nom_file_NP = Workbooks(i).Name
End If
Next i


'ouvre le fichier du planning s'il n'est pas déjà ouvert
If fichier_MES_ouvert = False Then
On Error Resume Next
Workbooks.Open Filename:=chemin_file_MES, ReadOnly:=True

End If



If Err.Number = 1004 Then
MsgBox ("Erreur orthographe sur le fichier " & nom_file_MES)
saisie_MES: temp = InputBox("Saisir à la main le nom du fichier MES", "PB de format fichier MES")
If (temp <> "") Then
nom_file_MES = temp
NB_fois = NB_fois + 1
GoTo Line0
Else
GoTo saisie_MES
End If
End If
Else
temp2 = MsgBox("Entrer un numéro de semaine et cliquer sur ok!", vbOKOnly + vbExclamation) 'n'affiche que le bouton ok +affiche le signe attention!
GoTo empeche_erreur
End If
'Application.ScreenUpdating = True 'Mise à jour de l'affichage
End Sub

Sub MES_extract_cmde()

Application.ScreenUpdating = False 'On bloque la mise à jour de l'affichage pour que le progr tourne plus vite

Dim l(0 To 6) As Integer
liste_jour = Array("LUNDI", "MARDI", "MERCREDI", "JEUDI", "VENDREDI", "SAMEDI", "DIMANCHE")
'Dim l(0 To 6) As Integer
'liste_jour = Array("Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche")

'appel sous programme pour ouvrir le fichier Mes en fonction de la semaine
ouverture_fichier_MES
If nom_file_MES = "ERREUR" Then
Exit Sub
End If


''Ajout feuille Planning dans le fichier Planning NP
'Workbooks(nom_file_NP).Activate
'k = Workbooks(nom_file_NP).Sheets.Count
'Workbooks(nom_file_NP).Activate
'Sheets.Add before:=Sheets(k)
'Workbooks(nom_file_NP).Sheets(k).Name = "Planning"


Workbooks(nom_file_NP).Sheets("Feuil2").Name = "Planning" 'renommer feuille2
Workbooks(nom_file_NP).Sheets("Planning").Columns("A:A").NumberFormat = "@"

'fixe plage de valeurs dans le fichier de MES
Workbooks(nom_file_MES).Activate
Sheets(1).Select
lmax_mes = 650
cmax_mes = 14
Set ma_plage = Range(Cells(1, 1), Cells(lmax_mes, cmax_mes))

l_tmp_act = 1
'stockage des valeur dans la feuille Planning
'x = dates_sem_MES(42)

'stockage des ligne des jours
init_ligne = 1
For N = 0 To 6
l(N) = find_jour(init_ligne, 8, liste_jour(N), lmax_mes)
init_ligne = l(N)
Next N

Workbooks(nom_file_NP).Activate

For N = 0 To 6
Workbooks(nom_file_NP).Sheets("Planning").Cells(l_tmp_act, 1) = liste_jour(N)
Workbooks(nom_file_NP).Sheets("Planning").Cells(l_tmp_act, 2) = date_deb + N
'Sheets("Planning").Cells(l_tmp_act, 3) = l(n)
l_tmp_act = l_tmp_act + 1

Workbooks(nom_file_MES).Activate
Sheets(1).Select
' après la valeur LUNDI les cmdes sont 5 lignes plus bas et ensuite tte les 6lignes

If N = 0 Then
Lmx = l(1)
ElseIf N < 6 Then
Lmx = l(N + 1)
ElseIf N = 6 Then
Lmx = lmax_mes
End If

Workbooks(nom_file_MES).Sheets(1).Range("A1").Select

' affecte la valeur de la dernière colonne du fichier MES K=11 et on voit large à M=13
colonne_mes_max = 13
For ligne = l(N) To Lmx - 1
For colonne = 2 To colonne_mes_max
Cmde_trouvée = Workbooks(nom_file_MES).Sheets(1).Cells(ligne, colonne).FormulaR1C1
If Cmde_trouvée <> Empty Then

If (Len(Cmde_trouvée) < 120 And (est_commande_txt(Cmde_trouvée) Or est_commande_num(Cmde_trouvée))) Then
nb_cmde = 0
garde_cmde (Cmde_trouvée)
For k = 1 To 4
'Extrait les cmdes du fichier de mes sauf si c'est un de tél
If A(k) <> "" And (Not (Len(A(k)) 10 And Left(A(k), 3) "014")) Then
'If A(K) <> "" Then
'extract valeur avec n° de Tél.
With Workbooks(nom_file_NP).Sheets("Planning").Cells(l_tmp_act, 1)
.NumberFormat = "General"
.FormulaR1C1Local = A(k)
End With
l_tmp_act = l_tmp_act + 1
End If
Next k
End If
End If
Next colonne
Next ligne
Next N
Workbooks(nom_file_MES).Close
Workbooks(nom_file_NP).Activate

'normalisation des cmdes version 7 d'OHS
Workbooks(nom_file_NP).Sheets("Planning").Activate
l_max_tmp = Workbooks(nom_file_NP).Sheets("Planning").Range("a1").CurrentRegion.Rows.Count

'demande de mise à jour du 6 dans OHS
'reponse = MsgBox("Mise à jour du 6 ds les cmdes OHS des MES ?", vbYesNo, "OHS ver.7")

'affectation à VbYes pour éviter la question
reponse = vbYes

If reponse = vbYes Then
For ligne = 2 To l_max_tmp
cmde_actuelle = Sheets("Planning").Cells(ligne, 1).Value
Sheets("Planning").Cells(ligne, 1).Value = OHS_version7(cmde_actuelle)
Next ligne
End If


Sheets(ActiveWorkbook.Sheets.Count).Activate


'Application.ScreenUpdating = True 'Mise à jour de l'affichage
End Sub

Function garde_cmde(ByVal chaine As String)

Dim cmde(1 To 10) As String

'Recherche de ponctuation et remplace par des espace
For z = 33 To 64
If (z < 47 Or z > 57) Then
car_ponct = Chr(z)
Pos_ponct = InStr(chaine, car_ponct)
'remplace la ponctuation par un espace
While Pos_ponct
Mid(chaine, Pos_ponct, 1) = " "
Pos_ponct = InStr(chaine, car_ponct)
Wend
End If
Next z

For i = 1 To 5
A(i) = ""
Next i
nb_space = 0

Line0:
k = 1
cpt_int = 0
C = Mid(chaine, k, 1)
l_max = Len(chaine)
While ((C <> " ") And k <= l_max)

k = k + 1
If (Asc(C) >= 48 And Asc(C) <= 57) Then
cpt_int = cpt_int + 1
End If

C = Mid(chaine, k, 1)

'si " / " remplacer par " "
'C_suiv = Mid(chaine, K + 1, 1)
'If (C_suiv "/" And C " ") Then
' Mid(chaine, K + 1, 1) = " "
'End If


Wend
If cpt_int > 6 Then
nb_space = nb_space + 1
End If

If cpt_int < 7 Then
chaine = Mid(chaine, k + 1, l_max)
ElseIf cpt_int <= 11 Then
cmde(nb_space) = Left(chaine, k - 1)
If k < l_max + 1 Then
chaine = Mid(chaine, k + 1, l_max)
End If
ElseIf (cpt_int > 10 And nb_space >= 2) Then
If k < l_max + 1 Then
chaine = Mid(chaine, k + 1, l_max)
End If
End If

If k < l_max Then
GoTo Line0
End If

j = 1
i = 1
While j < 10
If cmde(j) = "" Then
Else
A(i) = cmde(j)
i = i + 1
End If
j = j + 1
Wend

End Function
******************************************
Merci d'avance au ames charitables volant à mon secours...
Si vous connaisser qques règles de base sur l'optimisation de code (pour la rapidité), tous vos conseils sont les bienvenu!!!
ENCORE MERCI

3 réponses

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
22 juil. 2005 à 18:24
Salut
Un peu long comme code, pas la patience de tout analyser.
Ton premier For-Next :
Tu ranges Worksheets("Planning").Cells(i, 1).Value dans valeur_cell et tu ne t'en sers pas !
Dans (l'affreux) IF qui suit, remplace tout par valeur_cell
Remplace aussi ton IF par un Select Case :
Select Case valeur_cell
Case "LUNDI", "MARDI" ... "DIMANCHE"
' ras
Case Else
If valeur_cell = Worksheets("OHS").Cells(j, 1).Value Then
semaphore = True
End If
End Select

Plus loin, tu recherches à remplacer la ponctuation par un espace :
Plutôt que de faire une boucle For-Next pour tester chaque code ascii, utilise Replace :
maChaine = Replace(maChaine, ".", " ")
maChaine = Replace(maChaine, ",", " ") ...

Pour transformer une chaine de 1 digit en 2 digits :
maChaine = Right("00" & maChaine, 2)

Pour séparer une chaine en sous-chaines grace à un caractère (ou un groupe de) :
Dim Tableau() As String
Tableau = Split("La chaine que je veux séparer", " ")
--> Dans Tableau(0) tu auras "La"
--> Dans Tableau(1) tu auras "chaine"
Le dernier élément du tableau aura le numéro UBound(Tableau)
Voir la fonction inverse Join

Evite les Goto, c'est pas terrible. Utilise plutôt une structure If ou Do-Loop :

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
(je
0
mythic_kruger Messages postés 241 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 10 novembre 2005
24 juil. 2005 à 13:47
Salut! 2-3 choses à ajouter

Pour remplacer il faut utiliser la fonction Replace() apparue sous VB6,
ça clarifiera la dernière partie du code. Mais la fonction Replace
est-elle vraiment plus rapide que la tienne?? Réponse

Pour optimiser il faudrait comparer les processus, surtout
leur durée d' exécution: tu seras alors sûr de quelle fonction est la
plus rapide. Pour celà il faut mesurer, si possible d'un ordre inférieur à la milliseconde.

J'assume que le programme est compilé avec l' option "rapidité".



Dans


If semaphore = True Then

Sheets("OHS").Select

Rows(j).Select

Selection.Copy

Sheets("Résultats
de comparaison").Select

Rows(k).Select

ActiveSheet.Paste

k
= k
+1

Else 'commandes
non présentes dans le Planning

End
If

Tu sors un Else qui sert à rien. Pour gagner en rapidité il faut
économiser la respiration du processeur donc pas d' instruction inutile.



Côté variables tout est public? Parce que ce sont des modules
distincts? Faudrait tout regrouper dans le même module (c'est une
suggestion à polémique). De plus Option Explicit sera appréciable pour
l' ensemble du programme tant sur le plan de la mémoire que de l'
exécution.



Je lis objectif performance dans le sujet par conséquent le stade
ultérieur de l'optimisation serait probablement en langage C en
convertissant les fonctions dans des dlls, puis déclarées dans un
en-tête VB.
0
pier0 Messages postés 67 Date d'inscription mardi 19 juillet 2005 Statut Membre Dernière intervention 2 septembre 2005
25 juil. 2005 à 12:37
Je tiens tout d'abord à remercier Jack et mythic_kruger pour l'aide qu'il mon apportés.

A la suite de ce qui m'a été proposé plusieurs questions me viennent à l'esprit:

-En koi un switch es plus rapide que des if (plus clair que if ok!mais est ce plus rapide?).

-utiliser la variable valeur_cell n'est il pas plus lent que de d'utiliser directement son contenu : Worksheets("Planning").Cells(i, 1).Value
Je sais que avec la vaiable c'est plus clair mais cela ralenti peut etre car rajoute une lecture en memoire...

-Replace rajoute un appel de fonction->lenteur? (l'appel de fonction est il plus rapide que une siùple boucle for?

-Je me pose la meme question pour toutes les fonctions proposées...

-Enfin,je sais bien que c'est pas bien d'utiliser les GOTO mais pourkoi?(en assembleur la machine utilise de goto.....)

Merci d'avance de répondre à mes questions
0