Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/11/2006, 16h02   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2004
Messages : 30
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 30
Points : 13
Points : 13
Par défaut instruction : reprendre la macro à un endroit précis

je n'arrive pas à retrouver cette instruction
il me semblait que c'etait go to mais j'ai dû confondre avec goto

je veux, dans ma macro, mettre des "marques" pour à un n'importe qu'elle endroit, lui dire de reprendre à tel autre...

j'ai déjà des boucles For... Next... en route et des If à l'interieur de celles ci, mais je veux qu'à certaines reponsent des conditions, stopper la boucle et renvoyer le traitement plus haut ou plus bas dans la macro...

question subsidiaire : si je fais de telles marques, End if et Next à la fin de mes conditions et boucles deviennnent t-ils inutiles ??

merci
keguira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2006, 16h05   #2
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 854
Points : 16 854
Envoyer un message via Skype™ à bbil
Citation:
Envoyé par keguira
j...
question subsidiaire ...i
tu sais ce que c'est une procédure ou une fonction ...?
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2006, 16h21   #3
Candidat au titre de Membre du Club
 
Inscription : avril 2004
Messages : 30
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 30
Points : 13
Points : 13
oui, j'espere voir à peu pret ce que c'est... mais c'est vrai que cette question doit etre un peu simplette...

voilà mon code, histoire de voir où j'en suis :

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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
 
Sub imprimer()
 
Dim zone As range, a As range, visu As Integer, b As range, c As range, d As range, e As range, f As range, z As range
 
Set zone = range("n9:n160")
For Each a In zone
If a.Text = "VRAI" Then
    If a.Offset(rowOffset:=0, columnOffset:=-6) = 0 Then
    Dim Msg, Style, Response
    Msg = "Lignes non completes. Abandonner ?"
    Style = vbYesNo + vbCritical + vbDefaultButton2
    Response = MsgBox(Msg, Style, Response)
        If Response = vbYes Then
        a.Offset(rowOffset:=0, columnOffset:=-6).Select
        Exit Sub
        End If
    End If
End If
Next
 
Application.ScreenUpdating = False
visu = 0
If Worksheets("v1").Visible = False Then
visu = 1
Worksheets("v1").Visible = True
End If
 
Set b = range("n6")
Set c = range("n6")
Set d = range("n6")
Set e = range("n6")
Set f = range("n6")
 
z = range("n9")
 
Line1:
Set zone = range(z & ":N160")
For Each a In zone
If a.Text = "VRAI" Then
Sheets("v1").range("f20") = a.Offset(rowOffset:=0, columnOffset:=-13)
Sheets("v1").range("f21") = a.Offset(rowOffset:=0, columnOffset:=-11)
Sheets("v1").range("f22") = a.Offset(rowOffset:=0, columnOffset:=-10)
Sheets("v1").range("g22") = a.Offset(rowOffset:=0, columnOffset:=-12)
Sheets("v1").range("h22") = a.Offset(rowOffset:=0, columnOffset:=-1)
Sheets("v1").range("f23") = a.Offset(rowOffset:=0, columnOffset:=-8)
Sheets("v1").range("f24") = a.Offset(rowOffset:=0, columnOffset:=-6)
Sheets("v1").range("g25") = 0
Sheets("v1").range("h25") = 0
Sheets("v1").range("g26") = 0
Sheets("v1").range("h26") = 0
Sheets("v1").range("g27") = 0
Sheets("v1").range("h27") = 0
Sheets("v1").range("g28") = 0
Sheets("v1").range("h28") = 0
Sheets("v1").range("g29") = 0
Sheets("v1").range("h29") = 0
z = a
line2:
    Set zone = range(z & ":n160")
    For Each b In zone
    If b.Text = "VRAI" Then
        If b.Offset(rowOffset:=0, columnOffset:=-13) = a.Offset(rowOffset:=0, columnOffset:=-13) And b.Offset(rowOffset:=0, columnOffset:=-11) = a.Offset(rowOffset:=0, columnOffset:=-11) And b.Offset(rowOffset:=0, columnOffset:=-8) = a.Offset(rowOffset:=0, columnOffset:=-8) And b.Offset(rowOffset:=0, columnOffset:=-6) = a.Offset(rowOffset:=0, columnOffset:=-6) Then
        Sheets("v1").range("g25") = b.Offset(rowOffset:=0, columnOffset:=-12)
        Sheets("v1").range("h25") = b.Offset(rowOffset:=0, columnOffset:=-1)
        z = b
        Set zone = range(z & ":n160")
        For Each c In zone
        If c.Text = "VRAI" Then
            If c.Offset(rowOffset:=0, columnOffset:=-13) = b.Offset(rowOffset:=0, columnOffset:=-13) And c.Offset(rowOffset:=0, columnOffset:=-11) = b.Offset(rowOffset:=0, columnOffset:=-11) And c.Offset(rowOffset:=0, columnOffset:=-8) = b.Offset(rowOffset:=0, columnOffset:=-8) And c.Offset(rowOffset:=0, columnOffset:=-6) = b.Offset(rowOffset:=0, columnOffset:=-6) Then
            Sheets("v1").range("g26") = c.Offset(rowOffset:=0, columnOffset:=-12)
            Sheets("v1").range("h26") = c.Offset(rowOffset:=0, columnOffset:=-1)
            z = c
            Set zone = range(z & ":n160")
            For Each d In zone
            If d.Text = "VRAI" Then
                If d.Offset(rowOffset:=0, columnOffset:=-13) = c.Offset(rowOffset:=0, columnOffset:=-13) And d.Offset(rowOffset:=0, columnOffset:=-11) = c.Offset(rowOffset:=0, columnOffset:=-11) And d.Offset(rowOffset:=0, columnOffset:=-8) = c.Offset(rowOffset:=0, columnOffset:=-8) And d.Offset(rowOffset:=0, columnOffset:=-6) = c.Offset(rowOffset:=0, columnOffset:=-6) Then
                Sheets("v1").range("g27") = d.Offset(rowOffset:=0, columnOffset:=-12)
                Sheets("v1").range("h27") = d.Offset(rowOffset:=0, columnOffset:=-1)
                z = d
                Set zone = range(z & ":n160")
                For Each e In zone
                If e.Text = "VRAI" Then
                    If e.Offset(rowOffset:=0, columnOffset:=-13) = d.Offset(rowOffset:=0, columnOffset:=-13) And e.Offset(rowOffset:=0, columnOffset:=-11) = d.Offset(rowOffset:=0, columnOffset:=-11) And e.Offset(rowOffset:=0, columnOffset:=-8) = d.Offset(rowOffset:=0, columnOffset:=-8) And e.Offset(rowOffset:=0, columnOffset:=-6) = d.Offset(rowOffset:=0, columnOffset:=-6) Then
                    Sheets("v1").range("g28") = e.Offset(rowOffset:=0, columnOffset:=-12)
                    Sheets("v1").range("h28") = e.Offset(rowOffset:=0, columnOffset:=-1)
                    z = e
                    Set zone = range(z & ":n160")
                    For Each f In zone
                    If f.Text = "VRAI" Then
                        If f.Offset(rowOffset:=0, columnOffset:=-13) = e.Offset(rowOffset:=0, columnOffset:=-13) And f.Offset(rowOffset:=0, columnOffset:=-11) = e.Offset(rowOffset:=0, columnOffset:=-11) And f.Offset(rowOffset:=0, columnOffset:=-8) = e.Offset(rowOffset:=0, columnOffset:=-8) And f.Offset(rowOffset:=0, columnOffset:=-6) = e.Offset(rowOffset:=0, columnOffset:=-6) Then
                            Sheets("v1").range("g29") = f.Offset(rowOffset:=0, columnOffset:=-12)
                            Sheets("v1").range("h29") = f.Offset(rowOffset:=0, columnOffset:=-1)
                            Sheets("v1").PrintPreview
                                If f = range("n160") Then
                                Exit Sub
                                Else:
                                z = f
                                Go Line1
                                End If
                        Else:
                        Sheets("v1").PrintPreview
                        Sheets("v1").range("f20") = f.Offset(rowOffset:=0, columnOffset:=-13)
                        Sheets("v1").range("f21") = f.Offset(rowOffset:=0, columnOffset:=-11)
                        Sheets("v1").range("f22") = f.Offset(rowOffset:=0, columnOffset:=-10)
                        Sheets("v1").range("g22") = f.Offset(rowOffset:=0, columnOffset:=-12)
                        Sheets("v1").range("h22") = f.Offset(rowOffset:=0, columnOffset:=-1)
                        Sheets("v1").range("f23") = f.Offset(rowOffset:=0, columnOffset:=-8)
                        Sheets("v1").range("f24") = f.Offset(rowOffset:=0, columnOffset:=-6)
                        Sheets("v1").range("g25") = 0
                        Sheets("v1").range("h25") = 0
                        Sheets("v1").range("g26") = 0
                        Sheets("v1").range("h26") = 0
                        Sheets("v1").range("g27") = 0
                        Sheets("v1").range("h27") = 0
                        Sheets("v1").range("g28") = 0
                        Sheets("v1").range("h28") = 0
                        Sheets("v1").range("g29") = 0
                        Sheets("v1").range("h29") = 0
                        z = f
                        a = f
                        GoTo line2
                        End If
                    Else:
                    Sheets("v1").PrintPreview
                    Sheets("v1").range("f20") = e.Offset(rowOffset:=0, columnOffset:=-13)
                    Sheets("v1").range("f21") = e.Offset(rowOffset:=0, columnOffset:=-11)
                    Sheets("v1").range("f22") = e.Offset(rowOffset:=0, columnOffset:=-10)
                    Sheets("v1").range("g22") = e.Offset(rowOffset:=0, columnOffset:=-12)
                    Sheets("v1").range("h22") = e.Offset(rowOffset:=0, columnOffset:=-1)
                    Sheets("v1").range("f23") = e.Offset(rowOffset:=0, columnOffset:=-8)
                    Sheets("v1").range("f24") = e.Offset(rowOffset:=0, columnOffset:=-6)
                    Sheets("v1").range("g25") = 0
                    Sheets("v1").range("h25") = 0
                    Sheets("v1").range("g26") = 0
                    Sheets("v1").range("h26") = 0
                    Sheets("v1").range("g27") = 0
                    Sheets("v1").range("h27") = 0
                    Sheets("v1").range("g28") = 0
                    Sheets("v1").range("h28") = 0
                    Sheets("v1").range("g29") = 0
                    Sheets("v1").range("h29") = 0
                    z = e
                    a = e
                    GoTo line2
                    End If
                Else:
                Sheets("v1").PrintPreview
                Sheets("v1").range("f20") = d.Offset(rowOffset:=0, columnOffset:=-13)
                Sheets("v1").range("f21") = d.Offset(rowOffset:=0, columnOffset:=-11)
                Sheets("v1").range("f22") = d.Offset(rowOffset:=0, columnOffset:=-10)
                Sheets("v1").range("g22") = d.Offset(rowOffset:=0, columnOffset:=-12)
                Sheets("v1").range("h22") = d.Offset(rowOffset:=0, columnOffset:=-1)
                Sheets("v1").range("f23") = d.Offset(rowOffset:=0, columnOffset:=-8)
                Sheets("v1").range("f24") = d.Offset(rowOffset:=0, columnOffset:=-6)
                Sheets("v1").range("g25") = 0
                Sheets("v1").range("h25") = 0
                Sheets("v1").range("g26") = 0
                Sheets("v1").range("h26") = 0
                Sheets("v1").range("g27") = 0
                Sheets("v1").range("h27") = 0
                Sheets("v1").range("g28") = 0
                Sheets("v1").range("h28") = 0
                Sheets("v1").range("g29") = 0
                Sheets("v1").range("h29") = 0
                z = d
                a = d
                GoTo line2
                End If
            Else:
            Sheets("v1").PrintPreview
            Sheets("v1").range("f20") = c.Offset(rowOffset:=0, columnOffset:=-13)
            Sheets("v1").range("f21") = c.Offset(rowOffset:=0, columnOffset:=-11)
            Sheets("v1").range("f22") = c.Offset(rowOffset:=0, columnOffset:=-10)
            Sheets("v1").range("g22") = c.Offset(rowOffset:=0, columnOffset:=-12)
            Sheets("v1").range("h22") = c.Offset(rowOffset:=0, columnOffset:=-1)
            Sheets("v1").range("f23") = c.Offset(rowOffset:=0, columnOffset:=-8)
            Sheets("v1").range("f24") = c.Offset(rowOffset:=0, columnOffset:=-6)
            Sheets("v1").range("g25") = 0
            Sheets("v1").range("h25") = 0
            Sheets("v1").range("g26") = 0
            Sheets("v1").range("h26") = 0
            Sheets("v1").range("g27") = 0
            Sheets("v1").range("h27") = 0
            Sheets("v1").range("g28") = 0
            Sheets("v1").range("h28") = 0
            Sheets("v1").range("g29") = 0
            Sheets("v1").range("h29") = 0
            z = c
            a = c
            GoTo line2
            End If
        Else:
        Sheets("v1").PrintPreview
        Sheets("v1").range("f20") = b.Offset(rowOffset:=0, columnOffset:=-13)
        Sheets("v1").range("f21") = b.Offset(rowOffset:=0, columnOffset:=-11)
        Sheets("v1").range("f22") = b.Offset(rowOffset:=0, columnOffset:=-10)
        Sheets("v1").range("g22") = b.Offset(rowOffset:=0, columnOffset:=-12)
        Sheets("v1").range("h22") = b.Offset(rowOffset:=0, columnOffset:=-1)
        Sheets("v1").range("f23") = b.Offset(rowOffset:=0, columnOffset:=-8)
        Sheets("v1").range("f24") = b.Offset(rowOffset:=0, columnOffset:=-6)
        Sheets("v1").range("g25") = 0
        Sheets("v1").range("h25") = 0
        Sheets("v1").range("g26") = 0
        Sheets("v1").range("h26") = 0
        Sheets("v1").range("g27") = 0
        Sheets("v1").range("h27") = 0
        Sheets("v1").range("g28") = 0
        Sheets("v1").range("h28") = 0
        Sheets("v1").range("g29") = 0
        Sheets("v1").range("h29") = 0
        z = b
        a = b
        GoTo line2
        End If
    Else:
    Sheets("v1").PrintPreview
    Sheets("v1").range("f20") = a.Offset(rowOffset:=0, columnOffset:=-13)
    Sheets("v1").range("f21") = a.Offset(rowOffset:=0, columnOffset:=-11)
    Sheets("v1").range("f22") = a.Offset(rowOffset:=0, columnOffset:=-10)
    Sheets("v1").range("g22") = a.Offset(rowOffset:=0, columnOffset:=-12)
    Sheets("v1").range("h22") = a.Offset(rowOffset:=0, columnOffset:=-1)
    Sheets("v1").range("f23") = a.Offset(rowOffset:=0, columnOffset:=-8)
    Sheets("v1").range("f24") = a.Offset(rowOffset:=0, columnOffset:=-6)
    Sheets("v1").range("g25") = 0
    Sheets("v1").range("h25") = 0
    Sheets("v1").range("g26") = 0
    Sheets("v1").range("h26") = 0
    Sheets("v1").range("g27") = 0
    Sheets("v1").range("h27") = 0
    Sheets("v1").range("g28") = 0
    Sheets("v1").range("h28") = 0
    Sheets("v1").range("g29") = 0
    Sheets("v1").range("h29") = 0
    z = a
    GoTo line2
    End If
End If
Next
 
If visu = 1 Then
Worksheets("v1").Visible = False
End If
Application.ScreenUpdating = True
 
End Sub
En resumer : je complete un modele d'impression grace à une base, les seules lignes imprimées sont celles qui ont un critere "vrai". Elles sont alors groupées par maximum 6 si 4 criteres sont remplis.
Or, à chaque fois qu'un groupe a été formé et imprimé, la descente du tableau et des criteres reprends à la suite, et c'est pour reprendre cela que j'i marqué ( c'est faux ) goto line1 et 2 avec les deux marqueurs line 1, c'est pour cette operation que je ne connais pas le code
keguira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2006, 21h25   #4
Candidat au titre de Membre du Club
 
Inscription : avril 2004
Messages : 30
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 30
Points : 13
Points : 13
bonsoir,

depuis que j'ai commencé ce post, je me casse la tête sur ce code...

j'ai corrigé les boulettes de end if et next qu'il manquait, mais il me manque encore le code pour relancer la boucle plus haut...
dans mon code qui est joint plus haut, c'est pas evident, mais en fait il faut juste qu'en bout de condition, en "Else" je puis relancer la boucle beaucoup plus haut, au debut de la premiere boucle for où il y a le test des quatres comparaisons de cellule

merci pour votre aide, n'hesitez pas à me donner un lien s'il existe un tuto là dessus
keguira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2006, 07h47   #5
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 854
Points : 16 854
Envoyer un message via Skype™ à bbil
ben j'ai beau relire ton code et je ne comprends pas ce que tu ve faire .... et comment s'imbriquent toutes tes boucles for..?
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2006, 09h03   #6
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Déjà, au lieu d'utiliser des goto, fais des procédures indépendantes dont l'appel peut être conditionné (if... then, Select case... ou autres)
Pour chaque goto, tu perds l'adresse de retour à la ligne suivant le goto. Traduit en clair, cela te sature la mémoire en un éclair.
Fut une époque lointaine où ils étaient utilisés par manque ou ignorance des outils permettant de structurer un programme. On appelait ça le style "Nouille"
Ces programmes étaient "imbitable" et surtout "indépannable"
C'est d'ailleurs ce qu'il t'arrive.
Restructure déjà ton programme en remplaçant tous tes goto par des sub-routines.
Si tu as besoin de passer des paramètres (des valeurs) de la procédure principale aux autres, et que ça te pose problème, regarde l'aide ou demande ici si tu n'y parviens pas.
Si tu as besoin de variables communes à toutes tes procédures, tu peux les déclarer en variables public.
Bref, je suis comme bbil, je ne comprends rien à ton code... parce qu'il est impossible à quelqu'un qui ne l'a pas écrit, de le comprendre. Et donc, de t'aider
N'hésite pas à nous demander... mais STUCTURE !
A+ et bon courage
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2006, 09h29   #7
Candidat au titre de Membre du Club
 
Inscription : avril 2004
Messages : 30
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 30
Points : 13
Points : 13
Citation:
Envoyé par bbil
ben j'ai beau relire ton code et je ne comprends pas ce que tu ve faire .... et comment s'imbriquent toutes tes boucles for..?
en resumé : il y a 6 boucles for, car je cherche au total 6 lignes identiques dans les conditions que je donne dans les if... mais je comprends tout a fait que ce soit du patoi chinois, j'essaye de faire avec ce que je connais...

Citation:
Envoyé par ouskel'n'or
Restructure déjà ton programme en remplaçant tous tes goto par des sub-routines.
ce que tu veux dire, c'est que je divise ma macro en sous macro en fait, pour remplacer les boucles si j'ai bien compris ?
keguira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2006, 14h04   #8
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Merci bbil, mais tu m'as grillé sur la ligne...
keguira, non, remplace tout cequ'il y a à partir de chaque adresse:: par des appels à procédures indépendantes. Pas de goto, un call nomDeLaProcédure

Exemple : au lieu de goto liste1
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
z = Line1(z)
 
 
Function line1(z)
Set zone = range(z & ":N160")
For Each a In zone
If a.Text = "VRAI" Then
Sheets("v1").range("f20") = a.Offset(rowOffset:=0, columnOffset:=-13)
Sheets("v1").range("f21") = a.Offset(rowOffset:=0, columnOffset:=-11)
Sheets("v1").range("f22") = a.Offset(rowOffset:=0, columnOffset:=-10)
Sheets("v1").range("g22") = a.Offset(rowOffset:=0, columnOffset:=-12)
Sheets("v1").range("h22") = a.Offset(rowOffset:=0, columnOffset:=-1)
Sheets("v1").range("f23") = a.Offset(rowOffset:=0, columnOffset:=-8)
Sheets("v1").range("f24") = a.Offset(rowOffset:=0, columnOffset:=-6)
Sheets("v1").range("g25") = 0
Sheets("v1").range("h25") = 0
Sheets("v1").range("g26") = 0
Sheets("v1").range("h26") = 0
Sheets("v1").range("g27") = 0
Sheets("v1").range("h27") = 0
Sheets("v1").range("g28") = 0
Sheets("v1").range("h28") = 0
Sheets("v1").range("g29") = 0
Sheets("v1").range("h29") = 0
line1 = a
end sub
Attention, le paramètre z ne peut pas changer de valeur dans la fonction ou sub appelée
A+

Edit
Comme z ne change pas de valeur, tu peux faire plus simplement une sub, auquel cas tu l'appelles
Call line1 z

Sub line1(z)
'...
'...
End sub
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2006, 14h10   #9
Candidat au titre de Membre du Club
 
Inscription : avril 2004
Messages : 30
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 30
Points : 13
Points : 13
j'ai compris (enfin) je suis en train de bosser dessus, et mon code va être 15 fois plus court effectivement !

du coup j'ai deux petits problemes à resoudre :

- la macro renvoyée dans ma boucle va donc me servir à chercher les 5 autres lignes identiques à la première trouvée (identiques si 4 criteres respectés) : est ce que je peux faire ça avec un recherchev ou un truc dans le genre, et surtout comment : dites moi juste vers où chercher pour faire un truc bien, j'essaierai de me dépatouiller ensuite

- deuxièmement, les valeurs trouvées grace à ce rechercheV ne doivent pas être reprise dans la suite de ma boucle, du coup je pensais mémoriser ma colonne où il y a le critere vrai ( qui me permet de décider qu'elles sont les lignes à imprimer ) pour changer le vrai en faux dés que la valeur est selectionnée par le recherchev, et remettre les valeurs à l'identique en toute fin de traitement : est ce que ça peut se faire et est ce que je me dirige vers quelque chose de pertinent ?

merci pour votre aide
keguira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2006, 18h35   #10
Candidat au titre de Membre du Club
 
Inscription : avril 2004
Messages : 30
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 30
Points : 13
Points : 13
ça marche !

avant de mettre résolu, si une bonne ame veux bien y jeter un oeil pour me dire s'il est à peut pret efficace, structuré et "bitable" ça m'aiderai à progresser
je vais rajouter une condition pour lancer les sub supplétaires, si la recherche d'une valeurs ne donne rien, inutile de refaire une recherche derriere; mais sinon pour moi j'ai fais ce que j'ai pu...

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
135
136
137
138
 
Sub imprimer()
 
Dim zone As range, visu As Integer, a As range
 
Set zone = range("n9:n160")
For Each a In zone
If a.Text = "VRAI" Then
    If a.Offset(rowOffset:=0, columnOffset:=-6) = 0 Then
    Dim Msg, Style, Response
    Msg = "Une ou plusieurs banques ne sont pas renseignées. Abandonner ?"
    Style = vbYesNo + vbCritical + vbDefaultButton2
    Response = MsgBox(Msg, Style, Response)
        If Response = vbYes Then
        a.Offset(rowOffset:=0, columnOffset:=-6).Select
        Exit Sub
        End If
    End If
End If
Next
 
range("o9:o160").Value = range("n9:n160")
 
Application.ScreenUpdating = False
visu = 0
If Worksheets("v1").Visible = False Then
visu = 1
Worksheets("v1").Visible = True
End If
 
Set zone = range("n9:N160")
For Each a In zone
    If a.Text = "VRAI" Then
    Sheets("v1").range("G20") = a.Offset(rowOffset:=0, columnOffset:=-13)
    Sheets("v1").range("G21") = a.Offset(rowOffset:=0, columnOffset:=-11)
    Sheets("v1").range("G22") = a.Offset(rowOffset:=0, columnOffset:=-10)
    Sheets("v1").range("g23") = a.Offset(rowOffset:=0, columnOffset:=-8)
    Sheets("v1").range("g30") = a.Offset(rowOffset:=0, columnOffset:=-7)
    Sheets("v1").range("G24") = a.Offset(rowOffset:=0, columnOffset:=-6)
    Sheets("v1").range("H22") = a.Offset(rowOffset:=0, columnOffset:=-12)
    Sheets("v1").range("g25") = 0
    Sheets("v1").range("h25") = 0
    Sheets("v1").range("g26") = 0
    Sheets("v1").range("h26") = 0
    Sheets("v1").range("g27") = 0
    Sheets("v1").range("h27") = 0
    Sheets("v1").range("g28") = 0
    Sheets("v1").range("h28") = 0
    Sheets("v1").range("g29") = 0
    Sheets("v1").range("h29") = 0
    a = "FAUX"
    Call recherche1(a)
    Sheets("v1").PrintPreview
    End If
Next
 
range("n9:n160").Value = range("o9:o160")
 
If visu = 1 Then
Worksheets("v1").Visible = False
End If
Application.ScreenUpdating = True
 
End Sub
 
Sub recherche1(a)
Dim zone As range, b As range
    Set zone = range("n9:n160")
    For Each b In zone
    If b.Text = "VRAI" Then
        If b.Offset(rowOffset:=0, columnOffset:=-13) = a.Offset(rowOffset:=0, columnOffset:=-13) And b.Offset(rowOffset:=0, columnOffset:=-11) = a.Offset(rowOffset:=0, columnOffset:=-11) And b.Offset(rowOffset:=0, columnOffset:=-8) = a.Offset(rowOffset:=0, columnOffset:=-8) And b.Offset(rowOffset:=0, columnOffset:=-6) = a.Offset(rowOffset:=0, columnOffset:=-6) Then
        Sheets("v1").range("g25") = b.Offset(rowOffset:=0, columnOffset:=-10)
        Sheets("v1").range("h25") = b.Offset(rowOffset:=0, columnOffset:=-12)
        b = "FAUX"
        Call recherche2(a)
        End If
    End If
    Next
End Sub
 
Sub recherche2(a)
Dim zone As range, c As range
    Set zone = range("n9:n160")
    For Each c In zone
    If c.Text = "VRAI" Then
        If c.Offset(rowOffset:=0, columnOffset:=-13) = a.Offset(rowOffset:=0, columnOffset:=-13) And c.Offset(rowOffset:=0, columnOffset:=-11) = a.Offset(rowOffset:=0, columnOffset:=-11) And c.Offset(rowOffset:=0, columnOffset:=-8) = a.Offset(rowOffset:=0, columnOffset:=-8) And c.Offset(rowOffset:=0, columnOffset:=-6) = a.Offset(rowOffset:=0, columnOffset:=-6) Then
        Sheets("v1").range("g26") = c.Offset(rowOffset:=0, columnOffset:=-10)
        Sheets("v1").range("h26") = c.Offset(rowOffset:=0, columnOffset:=-12)
        c = "FAUX"
        Call recherche3(a)
        End If
    End If
    Next
End Sub
 
Sub recherche3(a)
Dim zone As range, d As range
    Set zone = range("n9:n160")
    For Each d In zone
    If d.Text = "VRAI" Then
        If d.Offset(rowOffset:=0, columnOffset:=-13) = a.Offset(rowOffset:=0, columnOffset:=-13) And d.Offset(rowOffset:=0, columnOffset:=-11) = a.Offset(rowOffset:=0, columnOffset:=-11) And d.Offset(rowOffset:=0, columnOffset:=-8) = a.Offset(rowOffset:=0, columnOffset:=-8) And d.Offset(rowOffset:=0, columnOffset:=-6) = a.Offset(rowOffset:=0, columnOffset:=-6) Then
        Sheets("v1").range("g27") = d.Offset(rowOffset:=0, columnOffset:=-10)
        Sheets("v1").range("h27") = d.Offset(rowOffset:=0, columnOffset:=-12)
        d = "FAUX"
        Call recherche4(a)
        End If
    End If
    Next
End Sub
 
Sub recherche4(a)
Dim zone As range, e As range
    Set zone = range("n9:n160")
    For Each e In zone
    If e.Text = "VRAI" Then
        If e.Offset(rowOffset:=0, columnOffset:=-13) = a.Offset(rowOffset:=0, columnOffset:=-13) And e.Offset(rowOffset:=0, columnOffset:=-11) = a.Offset(rowOffset:=0, columnOffset:=-11) And e.Offset(rowOffset:=0, columnOffset:=-8) = a.Offset(rowOffset:=0, columnOffset:=-8) And e.Offset(rowOffset:=0, columnOffset:=-6) = a.Offset(rowOffset:=0, columnOffset:=-6) Then
        Sheets("v1").range("g28") = e.Offset(rowOffset:=0, columnOffset:=-10)
        Sheets("v1").range("h28") = e.Offset(rowOffset:=0, columnOffset:=-12)
        e = "FAUX"
        Call recherche5(a)
        End If
    End If
    Next
End Sub
 
Sub recherche5(a)
Dim zone As range, f As range
    Set zone = range("n9:n160")
    For Each f In zone
    If f.Text = "VRAI" Then
        If f.Offset(rowOffset:=0, columnOffset:=-13) = a.Offset(rowOffset:=0, columnOffset:=-13) And f.Offset(rowOffset:=0, columnOffset:=-11) = a.Offset(rowOffset:=0, columnOffset:=-11) And f.Offset(rowOffset:=0, columnOffset:=-8) = a.Offset(rowOffset:=0, columnOffset:=-8) And f.Offset(rowOffset:=0, columnOffset:=-6) = a.Offset(rowOffset:=0, columnOffset:=-6) Then
        Sheets("v1").range("g29") = f.Offset(rowOffset:=0, columnOffset:=-10)
        Sheets("v1").range("h29") = f.Offset(rowOffset:=0, columnOffset:=-12)
        f = "FAUX"
        End If
    End If
    Next
End Sub
merci
keguira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2006, 19h22   #11
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Ok, c'est mieux et c'est lisible C'est parfaitement "bitable"
Juste une petite remarque dans "Call recherche_n(a)", a ne sert à rien, que ce soit à l'appel ou dans la sub appelée. Tu peux le supprimer partout
Code :
1
2
3
4
5
Call recherche1
'......
 
Sub Recherche1()
...
Bon week-end
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2006, 20h44   #12
Candidat au titre de Membre du Club
 
Inscription : avril 2004
Messages : 30
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 30
Points : 13
Points : 13
ah ben merci !

du coup j'ai pas compris quand une variable doit etre reprise en public, j'avais meme dans l'idée que j'avais de la chance que ça marche sans avoir mis la variable en public... dans quel cas aurais t-il fallu faire ça ??

merci encore pour votre aide, et bon week end egalement
keguira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2006, 20h53   #13
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
La variable public est utile quand tu ne peux pas la passer en paramètre.
Prends un userform
Pour l'ouvrir, tu as une macro dans un module standard.
Dans cette macro, et par exemple, tu ouvres un fichier, récupères son chemin et son nom.
Dans l'userform, tu désire récupérer l'un et l'autre sans avoir à écrire de nouveau du code
Tu peux alors déclarer, en tête de ton module standard, les variables Chemin et NomFichier
Code :
Public Chemin, NomFichier
Ainsi, dans l'userform, tu pourras récupérer le chemin et le nom du fichier si tu en as besoin
C'est un exemple mais il y en a bien d'autres. Je te conseille un coup d'oeil dans l'aide à Dim, Public, etc
A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h17.


 
 
 
 
Partenaires

Hébergement Web