Précédent   Forum du club des développeurs et IT Pro > Autres langages > Assembleur > x86 16-bits
x86 16-bits Architecture x86 16 bits et ses outils (assembleurs, debuggers, émulateurs...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 09/04/2012, 15h31   #1
SiSharp
Invité de passage
 
Homme
Inscription : novembre 2011
Messages : 14
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations forums :
Inscription : novembre 2011
Messages : 14
Points : 1
Points : 1
Par défaut Vérifier si tous les caractères d'une chaîne appartiennent à une autre

Bonjour à tous,

Ca fait maintenant 2 jours que j'essaie de résoudre le problème suivant. Avant de m'arracher tous les cheveux qu'il me reste, j'ai décidé de vous le soumettre.

J'ai mis au point une fonction permettant de vérifier si tous les caractères d'une chaine fournie par l'utilisateur appartiennent à un ensemble déterminé de caractères de référence. Pour ce faire, elle compare les caractères de la chaine fournie, un à un, à tous les caractères de la chaine de référence et fournie un message indiquant si le caractère vérifié appartient à la chaine de référence ou non.

Le problème que j'ai est que peut importe si le caractère vérifié est conforme ou non, la fonction retourne un message de non-conformité. Voici le code de la fonction... je vous remercie à l'avance pour vos conseils !!

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
 CHAINELUE DB 30 DUP ('$')    ; Chaine contenant la chaine utilisateur
 
CARACTERESPERMIS DB '()0123456789+-%*/','$' ; Chaine de référence
 
	; Fonction qui determine si la chaine de caracteres fournie par l'utilisateur est conforme 
    VERIFIERCARACTERES PROC NEAR 
		MOV SI,OFFSET CHAINELUE
		MOV DI,OFFSET CARACTERESPERMIS	
		ADD SI,2								; On place SI sur le premier caractère de la chaine fournie par l'utilisateur
		XOR AX,AX								; AX = 00h
ALT5:	MOV AL,[SI]								; On met dans AL la valeur du caractère contenu dans CHAINELUE[SI]
		CMP AL,0Dh								; Si c'est caractère CR, ca signifie que toute la chaine de l'utilisateur a été parcourue
			JE ALT7								; Si toute la chaine est parcourue sans erreur, on affiche un message de confirmation et on quitte la fct
				CLD								; On parcours la chaine de référence de gauche à droite
				MOV CX,17						; CX contient le nb de caractères de la chaine de référence, moins le $
				REPNE SCASB						; On compare le caractère lu de la chaine tapée, à tous les caract. de la chaine de référence, tant que CX>0 et que la caractère n'a pas été trouvé
					JE ALT6						; Si le caractère est trouvé, on passe au prochain caractère de la chaine tapée et on reboucle
					AFFICHAGE EXPRESSIONILLEGALE; Sinon, message d'erreur et on quitte de programme
					JMP SORTIE
ALT6:	INC SI									; On passe au prochain caractère de la chaine lue et on reboucle
		JMP ALT5
ALT7:	AFFICHAGE EXPRESSIONLEGALE
		RET
    VERIFIERCARACTERES ENDP
SiSharp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2012, 22h32   #2
edfed
Membre chevronné
 
Avatar de edfed
 
être humain
Inscription : décembre 2007
Messages : 471
Détails du profil
Informations professionnelles :
Activité : être humain

Informations forums :
Inscription : décembre 2007
Messages : 471
Points : 619
Points : 619
bonjour, sans meme lire le code, s'il faut tester une valeur 8 bits, et retourner une info en fonction de l'octet d'entrée, il faut utiliser une look up table. c'est le seul moyen reelement performant.

ce qui permetrait de tester si le caractère de 8 bits est permi ou pas en très peu de code.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 
        org 100h
        call prog_qui_a_besoin_de_tester_une_chaine
        ret
 
prog_qui_a_besoin_de_tester_une_chaine:
        mov [caractères_permis],lut_de_permission
        mov [chaine_à_tester],chaine_ok
;        mov [chaine_à_tester],chaine_erreur ;decommenter pour constater que ça detecte bien un caractère invalide
        call tester_chaine
        cmp al,0
        jne .erreur_caractère_non_permis
.ok_caractères_permis:
        ret      ;si pas de caractère interdit, on sort du programme naturellement, sans avoir stack overflow
.erreur_caractère_non_permis:
        call prog_qui_a_besoin_de_tester_une_chaine ;si caracère non permis, on fait un appel reccursif uqi entraine un stack overflow, ça marche!!!
        ret
 
 
caractères_permis dw ?
chaine_à_tester dw ?
chaine_ok db '0123456789',0
chaine_erreur db '0123456789blablablabla1234thred',0
lut_de_permission: ;autoriser les caractères '()0123456789+-%*/$'
        db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
        db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
        db 0,0,0,0, 1,1,0,0, 1,1,1,1, 0,1,0,1 ; !"#$%&'()*+,-./
        db 1,1,1,1, 1,1,1,1, 1,1,1,0, 0,0,0,0 ;0123456789:;<=>?
 
        db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 ;@ABCDEFGHIJKLMNO
        db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 ;PQRSTUVWXYZ[\]^_
        db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 ;`abcdefghijklmno
        db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 ;pqrstuvwxyz{|}~.
 
        db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
        db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
        db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
        db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
 
        db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
        db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
        db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
        db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
 
tester_caractère:
        mov bx,[caractères_permis]
        xlat [bx]
        ret
 
tester_chaine:
        mov si,[chaine_à_tester]
.caractère:
        lodsb
        cmp al,0 ;tester si caractère zero, fin de chaine
        je .fin
        call tester_caractère
        cmp al,0 ;si al = 0, caractère interdit
        jne .caractère ;continuer sinon
        inc al ;inventer un code pour dire qu'on à trouvé un caractère interdit
.fin: ;car sinon, al = 0 à cause du caractère de fin de chaine
        ret ;et on quitte.
normalement, ça devrait fonctionner comme ça, et etre super hyper plus rapide aussi. chez moi, ça fonctionne nickel
__________________
http://www.pending.me.uk/nmc/bla_1356091200.png
Vivement 21/12/2012
edfed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/04/2012, 19h16   #3
SiSharp
Invité de passage
 
Homme
Inscription : novembre 2011
Messages : 14
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations forums :
Inscription : novembre 2011
Messages : 14
Points : 1
Points : 1
Merci pour votre suggestion edfed,

Cependant, étant nouveau en programmation, ma question se voulait à vocation pédagogique. J'ai cherché pendant 2 jours la raison pour laquelle ma procédure ne fonctionne pas. Si j'ai fait appel à l'aide des membres du forum, c'est bien pour me donner une piste de solution pour trouver mon erreur.

Votre procédure me semblant sophistiquée, j'ai l'impression que vous êtes un programmeur assembleur aguéri. Peut-être pourriez-vous m'aider dans la recherche de mon erreur ! Merci à l'avance !
SiSharp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/04/2012, 21h14   #4
edfed
Membre chevronné
 
Avatar de edfed
 
être humain
Inscription : décembre 2007
Messages : 471
Détails du profil
Informations professionnelles :
Activité : être humain

Informations forums :
Inscription : décembre 2007
Messages : 471
Points : 619
Points : 619
je veu bien aider à trouver, mais il manque du code.

si je peux donner un conseil, il faut eviter d'ecrire le code tout en majuscule.
les majuscules, c'est bon pour les constantes ou les valeurs particulières, type MB_OK en win32. et l'indentation n'aide pas à lire le code, l'assembleur, c'est pas du xml ou du java.

à première vue, il manque l'etiquette SORTIE, et il faut donner une valeur au segment es pour l'instruction scasb. cette dernière lit l'octet présent à [es:di], rep ne fait que repeter cette instructions un nombre de fois declaré dans cx.

rep doit etre utilisé dans la version repZ ou repE car on ne sort que lorsque le compteur cx est à zero, ou que la comparaison donne une non égalité.
__________________
http://www.pending.me.uk/nmc/bla_1356091200.png
Vivement 21/12/2012
edfed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2012, 01h13   #5
SiSharp
Invité de passage
 
Homme
Inscription : novembre 2011
Messages : 14
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations forums :
Inscription : novembre 2011
Messages : 14
Points : 1
Points : 1
Bonjour edfed,

Merci pour le commentaire concernant les majuscules, j'y ai remédié. J'ai lu à une certaine occasion du code assembleur écrit en majuscule et j'ai cru que c'était la norme. J'ai aussi corrigé l'indentation.

J'ai joint à ce post le code complet de mon programme incluant les deux procédures qu'il contient. Je vous rappelle que c'est la deuxième procédure qui me pose problème. Merci beaucoup pour votre aide !!!!


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
 
pile segment stack
    dw 100 dup (?)
    basepile equ this word
pile ends 
 
;----------------------------------------------------------------------------------------     
 
affichage macro chaine                  ; macro d'affichage des chaines de caracteres
    mov dx,offset chaine
    mov ah,09h
    int 21h
endm
 
affichagenombre macro nombre        ; macro d'affichage des nombres
	mov dl,nombre 
	mov ah,02h 
	int 21h 
endm
 
;----------------------------------------------------------------------------------------
 
data segment   
    ; variables de type chaines de caractères pour affichage
    ligne_decorative db 13,10,'------------------------------------------------',13,10,'$'
    retour db 13,10,'$'
    titre db 13,10,"Traitement d'une operation arithmetique",13,10,'$'
    question db 13,10,"svp veuillez entrer l'expression a evaluer : $" 
    erreurbalance db 13,10,"faux... expression mal balancee... fin du programme",13,10,'$'
    balancecorrecte db 13,10,"vrai... expression balancee",13,10,'$'
    expressionlegale db 13,10,"expression legale",13,10,'$'
    expressionillegale db 13,10,"expression illegale... fin du programme",13,10,'$'
    nombrecouples db 13,10,'nombre de couples de parantheses : $'
 
    chainelue db 30 dup ('$')    ; chaine contenant la chaine utilisateur
 
    nbcouples db 30h
    originepile dw 0
    caracterespermis db '()0123456789+-%*/','$'
data ends  
 
code segment
    assume cs:code, ds:data, ss:pile   
 
main:
    mov ax, data    ; initialise le segment de donnees
    mov ds, ax
    mov es, ax
    mov ax, pile
    mov ss, ax      ; initialise le segment de pile  
    mov sp,basepile
 
    affichage ligne_decorative  ; affichage du texte d'introduction
    affichage titre  
    affichage ligne_decorative 
    affichage question
 
    mov dx,offset chainelue     ; entree du nombre a traiter, qu'on met dans dx
    mov ah,0ah                  
    int 21h 
 
    affichage retour
    call verifierbalancement
    call verifiercaracteres
    affichage nombrecouples
    affichagenombre nbcouples
 
    ;----------------------------------------------------------------------------------------           
 
sortie: mov ah,1                ; sortie du programme apres appui d'une touche  
        int 21h                               
        mov ah,4ch      
        int 21h 
 
    ;------------ bloc des fonctions --------------------------------------------------------
 
    ; fonction qui determine si l'expression est balancee et qui determine le nb de couples de parantheses  
    verifierbalancement proc near 
	mov originepile,sp			; originepile contient l'adresse d'origine de la base de la pile
	mov dx,offset chainelue
        mov si,dx        
        inc si					; si pointe sur l'indicateur de longueur de chaine
        mov cl,[si]			        ; nb de boucles dans fct de conversion = nb de caracteres
bcl1: inc si                                  ; si pointe maintenant sur le premier caractere de la chaine 
	xor bx,bx
        mov bl,[si]                          ; on met le caractère à traiter dans bl      
        cmp bl,28h                          ; si caractere lu est paranthese ouvrante (28h)                                                                                              
        jne alt1
        add nbcouples,1            	; on ajoute 1 au decompte des couples      
        push bx			        ; on pousse la paranthese ouvrante dans la pile
        jmp alt3          			; et on reboucle
alt1:  cmp bl,29h                         ; si caractere lu est paranthese fermante (29h) 
        jne alt3 				; sinon, on reboucle
        cmp sp,originepile         	; on verifie si la pile est vide  
        jne alt2				; si sp <= basepile, la pile n'est pas vide
        affichage erreurbalance         ; si pile est vide, on affiche message d'erreur
        jmp sortie                           ; puis on quitte
alt2:  pop ax 				; la pile n'étant pas vide, on dépile un caractère								 
        cmp ax,0028h
        je alt3				; si le caractère lu est ')', on reboucle sans erreur
        affichage erreurbalance         ; si la valeur dépilée != ), on affiche message d'erreur
        jmp sortie                           ; puis on sort      
alt3:  loop bcl1
        cmp sp,originepile			; quand le bouclage est termine, on vérifie si la pile est vide
        je  alt4				; si oui, on affiche message de confirmation et on quitte
        affichage erreurbalance         ; si pile n'est pas vide, on affiche message d'erreur
	jmp sortie
alt4:	affichage balancecorrecte	; si tout s'est bien passe, message de reussite
	ret
    verifierbalancement endp	
 
	; fonction qui determine si la chaine de caracteres fournie par l'utilisateur est conforme 
    verifiercaracteres proc near 
	mov si,offset chainelue
	mov di,offset caracterespermis	
	add si,2					; on place si sur le premier caractère de la chaine fournie par l'utilisateur
	xor ax,ax					; ax = 00h
alt5:  mov al,[si]					; on met dans al la valeur du caractère contenu dans chainelue[si]
	cmp al,0dh					; si c'est caractère cr, ca signifie que toute la chaine de l'utilisateur a été parcourue
	je alt7					; si toute la chaine est parcourue sans erreur, on affiche un message de confirmation et on quitte 
	cld						; on parcours la chaine de référence de gauche à droite
	mov cx,17					; cx contient le nb de caractères de la chaine de référence, moins le $
	repne scasb				; on compare le caractère lu de la chaine tapée, à tous les caract. de la chaine de référence, tant que cx>0 et que la caractère n'a pas été trouvé
	je alt6					; si le caractère est trouvé, on passe au prochain caractère de la chaine tapée et on reboucle
	affichage expressionillegale            ; sinon, message d'erreur et on quitte de programme
	jmp sortie
alt6: inc si						; on passe au prochain caractère de la chaine lue et on reboucle
	jmp alt5
alt7:	affichage expressionlegale
	ret
    verifiercaracteres endp 
 
    code ends       
end main
SiSharp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2012, 00h54   #6
edfed
Membre chevronné
 
Avatar de edfed
 
être humain
Inscription : décembre 2007
Messages : 471
Détails du profil
Informations professionnelles :
Activité : être humain

Informations forums :
Inscription : décembre 2007
Messages : 471
Points : 619
Points : 619
je pense que la pile n'est pas equilibrée à cause des jmp sortie à l'interieur des procedures.

j'ai testé comme ça, et ça marche.

Code fasm :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
 
format MZ
entry text:main
segment pile
rw 300
basepile:
;----------------------------------------------------------------------------------------     
 
 macro affichage chaine {                 ; macro d'affichage des chaines de caracteres
    mov dx,chaine
    mov ah,09h
    int 21h
}
 
macro affichagenombre nombre {        ; macro d'affichage des nombres
        mov dl,nombre 
        mov ah,02h 
        int 21h 
}
 
;----------------------------------------------------------------------------------------
 
segment idata
    ; variables de type chaines de caractères pour affichage
    ligne_decorative db 13,10,'------------------------------------------------',13,10,'$'
    retour db 13,10,'$'
    titre db 13,10,"Traitement d'une operation arithmetique",13,10,'$'
    question db 13,10,"svp veuillez entrer l'expression a evaluer : $" 
    erreurbalance db 13,10,"faux... expression mal balancee... fin du programme",13,10,'$'
    balancecorrecte db 13,10,"vrai... expression balancee",13,10,'$'
    expressionlegale db 13,10,"expression legale",13,10,'$'
    expressionillegale db 13,10,"expression illegale... fin du programme",13,10,'$'
    nombrecouples db 13,10,'nombre de couples de parantheses : $'
 
    chainelue db 30 dup ('$')    ; chaine contenant la chaine utilisateur
 
    nbcouples db 30h
    originepile dw 0
    caracterespermis db '()0123456789+-%*/','$'
 
segment text
 
main:
    mov ax, idata    ; initialise le segment de donnees
    mov ds, ax
    mov es, ax
    mov ax, pile
    mov ss, ax      ; initialise le segment de pile  
    mov sp, basepile
 
    affichage ligne_decorative  ; affichage du texte d'introduction
    affichage titre  
    affichage ligne_decorative 
    affichage question
 
    mov dx, chainelue     ; entree du nombre a traiter, qu'on met dans dx
    mov ah,0ah                  
    int 21h 
 
    affichage retour
    call verifierbalancement
    call verifiercaracteres
    affichage nombrecouples
    affichagenombre [nbcouples]
 
    ;----------------------------------------------------------------------------------------           
 
sortie: mov ah,1                ; sortie du programme apres appui d'une touche  
        int 21h                               
        mov ah,4ch      
        int 21h 
 
    ;------------ bloc des fonctions --------------------------------------------------------
 
    ; fonction qui determine si l'expression est balancee et qui determine le nb de couples de parantheses  
verifierbalancement:
        mov [originepile],sp                      ; originepile contient l'adresse d'origine de la base de la pile
        mov dx,chainelue
        mov si,dx        
        inc si                                  ; si pointe sur l'indicateur de longueur de chaine
        mov cl,[si]                             ; nb de boucles dans fct de conversion = nb de caracteres
.bcl1: inc si                                  ; si pointe maintenant sur le premier caractere de la chaine
        xor bx,bx
        mov bl,[si]                          ; on met le caractère à traiter dans bl      
        cmp bl,28h                          ; si caractere lu est paranthese ouvrante (28h)                                                                                              
        jne .alt1
        add [nbcouples],1                 ; on ajoute 1 au decompte des couples
        push bx                         ; on pousse la paranthese ouvrante dans la pile
        jmp .alt3                                ; et on reboucle
.alt1:  cmp bl,29h                         ; si caractere lu est paranthese fermante (29h)
        jne .alt3                                ; sinon, on reboucle
        cmp sp,[originepile]              ; on verifie si la pile est vide
        jne .alt2                                ; si sp <= basepile, la pile n'est pas vide
        affichage erreurbalance         ; si pile est vide, on affiche message d'erreur
        jmp .sortie                           ; puis on quitte
.alt2:  pop ax                           ; la pile n'étant pas vide, on dépile un caractère
        cmp ax,0028h
        je .alt3                         ; si le caractère lu est ')', on reboucle sans erreur
        affichage erreurbalance         ; si la valeur dépilée != ), on affiche message d'erreur
        jmp .sortie                           ; puis on sort
.alt3:  loop .bcl1
        cmp sp,[originepile]                      ; quand le bouclage est termine, on vérifie si la pile est vide
        je  .alt4                                ; si oui, on affiche message de confirmation et on quitte
        affichage erreurbalance         ; si pile n'est pas vide, on affiche message d'erreur
        jmp .sortie
.alt4:   affichage balancecorrecte       ; si tout s'est bien passe, message de reussite
.sortie:
        ret
 
 
        ; fonction qui determine si la chaine de caracteres fournie par l'utilisateur est conforme 
verifiercaracteres:
        mov si,chainelue
        mov di,caracterespermis
        add si,2                                        ; on place si sur le premier caractère de la chaine fournie par l'utilisateur
        xor ax,ax                                       ; ax = 00h
.alt5:  mov al,[si]                                      ; on met dans al la valeur du caractère contenu dans chainelue[si]
        cmp al,0dh                                      ; si c'est caractère cr, ca signifie que toute la chaine de l'utilisateur a été parcourue
        je .alt7                                 ; si toute la chaine est parcourue sans erreur, on affiche un message de confirmation et on quitte
        cld                                             ; on parcours la chaine de référence de gauche à droite
        mov cx,17                                       ; cx contient le nb de caractères de la chaine de référence, moins le $
        repne scasb                             ; on compare le caractère lu de la chaine tapée, à tous les caract. de la chaine de référence, tant que cx>0 et que la caractère n'a pas été trouvé
        je .alt6                                 ; si le caractère est trouvé, on passe au prochain caractère de la chaine tapée et on reboucle
        affichage expressionillegale            ; sinon, message d'erreur et on quitte de programme
        jmp .sortie
.alt6: inc si                                            ; on passe au prochain caractère de la chaine lue et on reboucle
        jmp .alt5
.alt7:   affichage expressionlegale
.sortie:
        ret

bon courage pour la suite.
__________________
http://www.pending.me.uk/nmc/bla_1356091200.png
Vivement 21/12/2012
edfed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2012, 15h31   #7
SiSharp
Invité de passage
 
Homme
Inscription : novembre 2011
Messages : 14
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations forums :
Inscription : novembre 2011
Messages : 14
Points : 1
Points : 1
Tout fonctionne !
Citation:
je pense que la pile n'est pas equilibrée à cause des jmp sortie à l'interieur des procedures.

Vous aviez tout à fait raison ! Je supposait qu'à la fin de ma première procédure la pile était revenue à son état original, ce qui n'était pas vrai... car j'appelais la macro d'affichage avant de quitter la première procédure pour entrer dans la seconde.

Il a suffit que je fasse: avant de quitter la première procédure pour que tout rentre dans l'ordre

Merci beaucoup pour votre aide !!
SiSharp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2012, 19h28   #8
edfed
Membre chevronné
 
Avatar de edfed
 
être humain
Inscription : décembre 2007
Messages : 471
Détails du profil
Informations professionnelles :
Activité : être humain

Informations forums :
Inscription : décembre 2007
Messages : 471
Points : 619
Points : 619
ha ouais, j'avais meme pas remarqué ça. bien vu .
__________________
http://www.pending.me.uk/nmc/bla_1356091200.png
Vivement 21/12/2012
edfed est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 10h04.


 
 
 
 
Partenaires

Hébergement Web