Bonjour à tous,
J'ai un souci d'exécution dans une macro, à cause me semble-t-il, de
diverses plages délimitant le fonctionnement de chaque partie de la macro.
Selon l'ordre dans lequel chaque partie est assemblée, l'exécution a lieu
ou
non.
La macro commence comme ceci (je vous mets le début de chaque partie, il n'y
a pas les end if, etc car la macro totale fait 518 lignes) :
Private Sub Worksheet_Change(ByVal Target As Range)
If [BK543] = "" Then MsgBox "La cellule BK543 ne doit jamais être vide,
mettre 0": [BK543].Select
Dim iSect As Range, jSect As Range, kSect As Range, lSect As Range, mSect
As
Range, c As Range
Set iSect = Intersect(Target, Range("AF95:AF482"))
Set jSect = Intersect(Target, Range("AM95:AM482"))
Set kSect = Intersect(Target, Range("AS95:AS482"))
Set lSect = Intersect(Target, Range("AY95:AY482"))
Set mSect = Intersect(Target, Range("BE95:BE482"))
If Not iSect Is Nothing Then
For Each c In iSect.Cells
Application.EnableEvents = False
If c.Value = "" Then _
c.Offset(1, 0).ClearContents
Application.EnableEvents = True
Next
.
Cette partie s'exécute normalement. Puis j'ai ceci qui s'exécute
normalement :
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Not Intersect(Target, Range("AF95:AF482")) Is Nothing Then
If Left(Cells(Target.Row, Target.Column), 2) = "IL" Or
Left(Cells(Target.Row, Target.Column), 1) = "B" Or Left(Cells(Target.Row,
Target.Column), 2) = "1B" Or Left(Cells(Target.Row, Target.Column), 2) =
"2B"
Or Left(Cells(Target.Row, Target.Column), 1) = "L" Or
Left(Cells(Target.Row,
Target.Column), 1) = "J" Or Left(Cells(Target.Row, Target.Column), 2) =
"1J"
Or Left(Cells(Target.Row, Target.Column), 1) = "2J" Then
question = MsgBox("Est-ce un dito ?", vbYesNo, Application.UserName)
If question = vbYes Then
Cells(Target.Row + 1, Target.Column) = "DITO 2007": Exit Sub
End If
End If
End If
If Target.Row < 95 Or Target.Row > 482 Then Exit Sub
If Target.Column < 39 Or Target.Column > 39 Then Exit Sub
If Target.Row Mod 2 = 0 Then Exit Sub
question = MsgBox("Est-ce un nouvel accès ?", vbYesNo,
Application.UserName)
.
Puis, le dernier code qui ne s'exécute pas, sauf si je le mets en premier,
auquel cas, le reste ne s'exécute plus !
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 44)
If Target.Row / 44 = Int(Target.Row / 44) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 1 & ":A" & Target.Row + 44).EntireRow.Hidden > False
Else
Range("A" & Target.Row + 1 & ":A" & Target.Row + 44).EntireRow.Hidden > True
End If
End If
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 131)
If Target.Row / 131 = Int(Target.Row / 131) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 2 & ":A" & Target.Row + 43).EntireRow.Hidden > False
Else
Range("A" & Target.Row + 2 & ":A" & Target.Row + 43).EntireRow.Hidden > True
Quelqu'un pourrait-il m'éclairer ?
Peut-être n'est-ce pas à cause des diverses plages, mais tout à fait autre
chose.
D'avance, je vous remercie pour votre aide.
Nicoh
Bonjour à tous,
J'ai un souci d'exécution dans une macro, à cause me semble-t-il, de
diverses plages délimitant le fonctionnement de chaque partie de la macro.
Selon l'ordre dans lequel chaque partie est assemblée, l'exécution a lieu
ou
non.
La macro commence comme ceci (je vous mets le début de chaque partie, il n'y
a pas les end if, etc car la macro totale fait 518 lignes) :
Private Sub Worksheet_Change(ByVal Target As Range)
If [BK543] = "" Then MsgBox "La cellule BK543 ne doit jamais être vide,
mettre 0": [BK543].Select
Dim iSect As Range, jSect As Range, kSect As Range, lSect As Range, mSect
As
Range, c As Range
Set iSect = Intersect(Target, Range("AF95:AF482"))
Set jSect = Intersect(Target, Range("AM95:AM482"))
Set kSect = Intersect(Target, Range("AS95:AS482"))
Set lSect = Intersect(Target, Range("AY95:AY482"))
Set mSect = Intersect(Target, Range("BE95:BE482"))
If Not iSect Is Nothing Then
For Each c In iSect.Cells
Application.EnableEvents = False
If c.Value = "" Then _
c.Offset(1, 0).ClearContents
Application.EnableEvents = True
Next
.
Cette partie s'exécute normalement. Puis j'ai ceci qui s'exécute
normalement :
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Not Intersect(Target, Range("AF95:AF482")) Is Nothing Then
If Left(Cells(Target.Row, Target.Column), 2) = "IL" Or
Left(Cells(Target.Row, Target.Column), 1) = "B" Or Left(Cells(Target.Row,
Target.Column), 2) = "1B" Or Left(Cells(Target.Row, Target.Column), 2) =
"2B"
Or Left(Cells(Target.Row, Target.Column), 1) = "L" Or
Left(Cells(Target.Row,
Target.Column), 1) = "J" Or Left(Cells(Target.Row, Target.Column), 2) =
"1J"
Or Left(Cells(Target.Row, Target.Column), 1) = "2J" Then
question = MsgBox("Est-ce un dito ?", vbYesNo, Application.UserName)
If question = vbYes Then
Cells(Target.Row + 1, Target.Column) = "DITO 2007": Exit Sub
End If
End If
End If
If Target.Row < 95 Or Target.Row > 482 Then Exit Sub
If Target.Column < 39 Or Target.Column > 39 Then Exit Sub
If Target.Row Mod 2 = 0 Then Exit Sub
question = MsgBox("Est-ce un nouvel accès ?", vbYesNo,
Application.UserName)
.
Puis, le dernier code qui ne s'exécute pas, sauf si je le mets en premier,
auquel cas, le reste ne s'exécute plus !
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 44)
If Target.Row / 44 = Int(Target.Row / 44) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 1 & ":A" & Target.Row + 44).EntireRow.Hidden > False
Else
Range("A" & Target.Row + 1 & ":A" & Target.Row + 44).EntireRow.Hidden > True
End If
End If
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 131)
If Target.Row / 131 = Int(Target.Row / 131) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 2 & ":A" & Target.Row + 43).EntireRow.Hidden > False
Else
Range("A" & Target.Row + 2 & ":A" & Target.Row + 43).EntireRow.Hidden > True
Quelqu'un pourrait-il m'éclairer ?
Peut-être n'est-ce pas à cause des diverses plages, mais tout à fait autre
chose.
D'avance, je vous remercie pour votre aide.
Nicoh
Bonjour à tous,
J'ai un souci d'exécution dans une macro, à cause me semble-t-il, de
diverses plages délimitant le fonctionnement de chaque partie de la macro.
Selon l'ordre dans lequel chaque partie est assemblée, l'exécution a lieu
ou
non.
La macro commence comme ceci (je vous mets le début de chaque partie, il n'y
a pas les end if, etc car la macro totale fait 518 lignes) :
Private Sub Worksheet_Change(ByVal Target As Range)
If [BK543] = "" Then MsgBox "La cellule BK543 ne doit jamais être vide,
mettre 0": [BK543].Select
Dim iSect As Range, jSect As Range, kSect As Range, lSect As Range, mSect
As
Range, c As Range
Set iSect = Intersect(Target, Range("AF95:AF482"))
Set jSect = Intersect(Target, Range("AM95:AM482"))
Set kSect = Intersect(Target, Range("AS95:AS482"))
Set lSect = Intersect(Target, Range("AY95:AY482"))
Set mSect = Intersect(Target, Range("BE95:BE482"))
If Not iSect Is Nothing Then
For Each c In iSect.Cells
Application.EnableEvents = False
If c.Value = "" Then _
c.Offset(1, 0).ClearContents
Application.EnableEvents = True
Next
.
Cette partie s'exécute normalement. Puis j'ai ceci qui s'exécute
normalement :
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Not Intersect(Target, Range("AF95:AF482")) Is Nothing Then
If Left(Cells(Target.Row, Target.Column), 2) = "IL" Or
Left(Cells(Target.Row, Target.Column), 1) = "B" Or Left(Cells(Target.Row,
Target.Column), 2) = "1B" Or Left(Cells(Target.Row, Target.Column), 2) =
"2B"
Or Left(Cells(Target.Row, Target.Column), 1) = "L" Or
Left(Cells(Target.Row,
Target.Column), 1) = "J" Or Left(Cells(Target.Row, Target.Column), 2) =
"1J"
Or Left(Cells(Target.Row, Target.Column), 1) = "2J" Then
question = MsgBox("Est-ce un dito ?", vbYesNo, Application.UserName)
If question = vbYes Then
Cells(Target.Row + 1, Target.Column) = "DITO 2007": Exit Sub
End If
End If
End If
If Target.Row < 95 Or Target.Row > 482 Then Exit Sub
If Target.Column < 39 Or Target.Column > 39 Then Exit Sub
If Target.Row Mod 2 = 0 Then Exit Sub
question = MsgBox("Est-ce un nouvel accès ?", vbYesNo,
Application.UserName)
.
Puis, le dernier code qui ne s'exécute pas, sauf si je le mets en premier,
auquel cas, le reste ne s'exécute plus !
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 44)
If Target.Row / 44 = Int(Target.Row / 44) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 1 & ":A" & Target.Row + 44).EntireRow.Hidden > False
Else
Range("A" & Target.Row + 1 & ":A" & Target.Row + 44).EntireRow.Hidden > True
End If
End If
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 131)
If Target.Row / 131 = Int(Target.Row / 131) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 2 & ":A" & Target.Row + 43).EntireRow.Hidden > False
Else
Range("A" & Target.Row + 2 & ":A" & Target.Row + 43).EntireRow.Hidden > True
Quelqu'un pourrait-il m'éclairer ?
Peut-être n'est-ce pas à cause des diverses plages, mais tout à fait autre
chose.
D'avance, je vous remercie pour votre aide.
Nicoh
Bonjour Nicoh,
Question idiote : est-ce que tu traites les réponses à ta question ?
question = MsgBox("Est-ce un nouvel accès ?", vbYesNo, Application.UserName)
If question = vbyes then
....
Else if question = vbno then
....
end if
D'autre part je te conseille de découper ta procédure en tranche, ça sera
plus digeste à lire et à déboguer:
Private Sub Worksheet_Change(ByVal Target As Range)
procedure1
procedure2
procedure3
etc.
End Sub
Private Sub procedure1()
....
End Sub
Private Sub procedure2()
....
End Sub
Private Sub procedure3()
....
End Sub
etc.
Brunos
"Nicoh" a écrit dans le message de news:Bonjour à tous,
J'ai un souci d'exécution dans une macro, à cause me semble-t-il, de
diverses plages délimitant le fonctionnement de chaque partie de la macro.
Selon l'ordre dans lequel chaque partie est assemblée, l'exécution a lieu
ou
non.
La macro commence comme ceci (je vous mets le début de chaque partie, il n'y
a pas les end if, etc car la macro totale fait 518 lignes) :
Private Sub Worksheet_Change(ByVal Target As Range)
If [BK543] = "" Then MsgBox "La cellule BK543 ne doit jamais être vide,
mettre 0": [BK543].Select
Dim iSect As Range, jSect As Range, kSect As Range, lSect As Range, mSect
As
Range, c As Range
Set iSect = Intersect(Target, Range("AF95:AF482"))
Set jSect = Intersect(Target, Range("AM95:AM482"))
Set kSect = Intersect(Target, Range("AS95:AS482"))
Set lSect = Intersect(Target, Range("AY95:AY482"))
Set mSect = Intersect(Target, Range("BE95:BE482"))
If Not iSect Is Nothing Then
For Each c In iSect.Cells
Application.EnableEvents = False
If c.Value = "" Then _
c.Offset(1, 0).ClearContents
Application.EnableEvents = True
Next
.
Cette partie s'exécute normalement. Puis j'ai ceci qui s'exécute
normalement :
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Not Intersect(Target, Range("AF95:AF482")) Is Nothing Then
If Left(Cells(Target.Row, Target.Column), 2) = "IL" Or
Left(Cells(Target.Row, Target.Column), 1) = "B" Or Left(Cells(Target.Row,
Target.Column), 2) = "1B" Or Left(Cells(Target.Row, Target.Column), 2) =
"2B"
Or Left(Cells(Target.Row, Target.Column), 1) = "L" Or
Left(Cells(Target.Row,
Target.Column), 1) = "J" Or Left(Cells(Target.Row, Target.Column), 2) =
"1J"
Or Left(Cells(Target.Row, Target.Column), 1) = "2J" Then
question = MsgBox("Est-ce un dito ?", vbYesNo, Application.UserName)
If question = vbYes Then
Cells(Target.Row + 1, Target.Column) = "DITO 2007": Exit Sub
End If
End If
End If
If Target.Row < 95 Or Target.Row > 482 Then Exit Sub
If Target.Column < 39 Or Target.Column > 39 Then Exit Sub
If Target.Row Mod 2 = 0 Then Exit Sub
question = MsgBox("Est-ce un nouvel accès ?", vbYesNo,
Application.UserName)
.
Puis, le dernier code qui ne s'exécute pas, sauf si je le mets en premier,
auquel cas, le reste ne s'exécute plus !
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 44)
If Target.Row / 44 = Int(Target.Row / 44) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 1 & ":A" & Target.Row + 44).EntireRow.Hidden > > False
Else
Range("A" & Target.Row + 1 & ":A" & Target.Row + 44).EntireRow.Hidden > > True
End If
End If
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 131)
If Target.Row / 131 = Int(Target.Row / 131) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 2 & ":A" & Target.Row + 43).EntireRow.Hidden > > False
Else
Range("A" & Target.Row + 2 & ":A" & Target.Row + 43).EntireRow.Hidden > > True
Quelqu'un pourrait-il m'éclairer ?
Peut-être n'est-ce pas à cause des diverses plages, mais tout à fait autre
chose.
D'avance, je vous remercie pour votre aide.
Nicoh
Bonjour Nicoh,
Question idiote : est-ce que tu traites les réponses à ta question ?
question = MsgBox("Est-ce un nouvel accès ?", vbYesNo, Application.UserName)
If question = vbyes then
....
Else if question = vbno then
....
end if
D'autre part je te conseille de découper ta procédure en tranche, ça sera
plus digeste à lire et à déboguer:
Private Sub Worksheet_Change(ByVal Target As Range)
procedure1
procedure2
procedure3
etc.
End Sub
Private Sub procedure1()
....
End Sub
Private Sub procedure2()
....
End Sub
Private Sub procedure3()
....
End Sub
etc.
Brunos
"Nicoh" <Nicoh@discussions.microsoft.com> a écrit dans le message de news:
3979EC60-12FE-4E6A-8388-181A31089FA7@microsoft.com...
Bonjour à tous,
J'ai un souci d'exécution dans une macro, à cause me semble-t-il, de
diverses plages délimitant le fonctionnement de chaque partie de la macro.
Selon l'ordre dans lequel chaque partie est assemblée, l'exécution a lieu
ou
non.
La macro commence comme ceci (je vous mets le début de chaque partie, il n'y
a pas les end if, etc car la macro totale fait 518 lignes) :
Private Sub Worksheet_Change(ByVal Target As Range)
If [BK543] = "" Then MsgBox "La cellule BK543 ne doit jamais être vide,
mettre 0": [BK543].Select
Dim iSect As Range, jSect As Range, kSect As Range, lSect As Range, mSect
As
Range, c As Range
Set iSect = Intersect(Target, Range("AF95:AF482"))
Set jSect = Intersect(Target, Range("AM95:AM482"))
Set kSect = Intersect(Target, Range("AS95:AS482"))
Set lSect = Intersect(Target, Range("AY95:AY482"))
Set mSect = Intersect(Target, Range("BE95:BE482"))
If Not iSect Is Nothing Then
For Each c In iSect.Cells
Application.EnableEvents = False
If c.Value = "" Then _
c.Offset(1, 0).ClearContents
Application.EnableEvents = True
Next
.
Cette partie s'exécute normalement. Puis j'ai ceci qui s'exécute
normalement :
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Not Intersect(Target, Range("AF95:AF482")) Is Nothing Then
If Left(Cells(Target.Row, Target.Column), 2) = "IL" Or
Left(Cells(Target.Row, Target.Column), 1) = "B" Or Left(Cells(Target.Row,
Target.Column), 2) = "1B" Or Left(Cells(Target.Row, Target.Column), 2) =
"2B"
Or Left(Cells(Target.Row, Target.Column), 1) = "L" Or
Left(Cells(Target.Row,
Target.Column), 1) = "J" Or Left(Cells(Target.Row, Target.Column), 2) =
"1J"
Or Left(Cells(Target.Row, Target.Column), 1) = "2J" Then
question = MsgBox("Est-ce un dito ?", vbYesNo, Application.UserName)
If question = vbYes Then
Cells(Target.Row + 1, Target.Column) = "DITO 2007": Exit Sub
End If
End If
End If
If Target.Row < 95 Or Target.Row > 482 Then Exit Sub
If Target.Column < 39 Or Target.Column > 39 Then Exit Sub
If Target.Row Mod 2 = 0 Then Exit Sub
question = MsgBox("Est-ce un nouvel accès ?", vbYesNo,
Application.UserName)
.
Puis, le dernier code qui ne s'exécute pas, sauf si je le mets en premier,
auquel cas, le reste ne s'exécute plus !
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 44)
If Target.Row / 44 = Int(Target.Row / 44) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 1 & ":A" & Target.Row + 44).EntireRow.Hidden > > False
Else
Range("A" & Target.Row + 1 & ":A" & Target.Row + 44).EntireRow.Hidden > > True
End If
End If
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 131)
If Target.Row / 131 = Int(Target.Row / 131) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 2 & ":A" & Target.Row + 43).EntireRow.Hidden > > False
Else
Range("A" & Target.Row + 2 & ":A" & Target.Row + 43).EntireRow.Hidden > > True
Quelqu'un pourrait-il m'éclairer ?
Peut-être n'est-ce pas à cause des diverses plages, mais tout à fait autre
chose.
D'avance, je vous remercie pour votre aide.
Nicoh
Bonjour Nicoh,
Question idiote : est-ce que tu traites les réponses à ta question ?
question = MsgBox("Est-ce un nouvel accès ?", vbYesNo, Application.UserName)
If question = vbyes then
....
Else if question = vbno then
....
end if
D'autre part je te conseille de découper ta procédure en tranche, ça sera
plus digeste à lire et à déboguer:
Private Sub Worksheet_Change(ByVal Target As Range)
procedure1
procedure2
procedure3
etc.
End Sub
Private Sub procedure1()
....
End Sub
Private Sub procedure2()
....
End Sub
Private Sub procedure3()
....
End Sub
etc.
Brunos
"Nicoh" a écrit dans le message de news:Bonjour à tous,
J'ai un souci d'exécution dans une macro, à cause me semble-t-il, de
diverses plages délimitant le fonctionnement de chaque partie de la macro.
Selon l'ordre dans lequel chaque partie est assemblée, l'exécution a lieu
ou
non.
La macro commence comme ceci (je vous mets le début de chaque partie, il n'y
a pas les end if, etc car la macro totale fait 518 lignes) :
Private Sub Worksheet_Change(ByVal Target As Range)
If [BK543] = "" Then MsgBox "La cellule BK543 ne doit jamais être vide,
mettre 0": [BK543].Select
Dim iSect As Range, jSect As Range, kSect As Range, lSect As Range, mSect
As
Range, c As Range
Set iSect = Intersect(Target, Range("AF95:AF482"))
Set jSect = Intersect(Target, Range("AM95:AM482"))
Set kSect = Intersect(Target, Range("AS95:AS482"))
Set lSect = Intersect(Target, Range("AY95:AY482"))
Set mSect = Intersect(Target, Range("BE95:BE482"))
If Not iSect Is Nothing Then
For Each c In iSect.Cells
Application.EnableEvents = False
If c.Value = "" Then _
c.Offset(1, 0).ClearContents
Application.EnableEvents = True
Next
.
Cette partie s'exécute normalement. Puis j'ai ceci qui s'exécute
normalement :
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Not Intersect(Target, Range("AF95:AF482")) Is Nothing Then
If Left(Cells(Target.Row, Target.Column), 2) = "IL" Or
Left(Cells(Target.Row, Target.Column), 1) = "B" Or Left(Cells(Target.Row,
Target.Column), 2) = "1B" Or Left(Cells(Target.Row, Target.Column), 2) =
"2B"
Or Left(Cells(Target.Row, Target.Column), 1) = "L" Or
Left(Cells(Target.Row,
Target.Column), 1) = "J" Or Left(Cells(Target.Row, Target.Column), 2) =
"1J"
Or Left(Cells(Target.Row, Target.Column), 1) = "2J" Then
question = MsgBox("Est-ce un dito ?", vbYesNo, Application.UserName)
If question = vbYes Then
Cells(Target.Row + 1, Target.Column) = "DITO 2007": Exit Sub
End If
End If
End If
If Target.Row < 95 Or Target.Row > 482 Then Exit Sub
If Target.Column < 39 Or Target.Column > 39 Then Exit Sub
If Target.Row Mod 2 = 0 Then Exit Sub
question = MsgBox("Est-ce un nouvel accès ?", vbYesNo,
Application.UserName)
.
Puis, le dernier code qui ne s'exécute pas, sauf si je le mets en premier,
auquel cas, le reste ne s'exécute plus !
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 44)
If Target.Row / 44 = Int(Target.Row / 44) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 1 & ":A" & Target.Row + 44).EntireRow.Hidden > > False
Else
Range("A" & Target.Row + 1 & ":A" & Target.Row + 44).EntireRow.Hidden > > True
End If
End If
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 131)
If Target.Row / 131 = Int(Target.Row / 131) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 2 & ":A" & Target.Row + 43).EntireRow.Hidden > > False
Else
Range("A" & Target.Row + 2 & ":A" & Target.Row + 43).EntireRow.Hidden > > True
Quelqu'un pourrait-il m'éclairer ?
Peut-être n'est-ce pas à cause des diverses plages, mais tout à fait autre
chose.
D'avance, je vous remercie pour votre aide.
Nicoh
Merci de ta réponse Brunos,
Oui, je traite les réponses aux questions, d'ailleurs chaque partie
fonctionne parfaitement, mais c'est l'enchainement de chaque partie qui ne
fonctionne pas (en tout cas seulement la dernière partie). Je vais essayer
le
système des procédures que j'ignorais. Je te tiens au courant.
NicohBonjour Nicoh,
Question idiote : est-ce que tu traites les réponses à ta question ?
question = MsgBox("Est-ce un nouvel accès ?", vbYesNo,
Application.UserName)
If question = vbyes then
....
Else if question = vbno then
....
end if
D'autre part je te conseille de découper ta procédure en tranche, ça sera
plus digeste à lire et à déboguer:
Private Sub Worksheet_Change(ByVal Target As Range)
procedure1
procedure2
procedure3
etc.
End Sub
Private Sub procedure1()
....
End Sub
Private Sub procedure2()
....
End Sub
Private Sub procedure3()
....
End Sub
etc.
Brunos
"Nicoh" a écrit dans le message de
news:Bonjour à tous,
J'ai un souci d'exécution dans une macro, à cause me semble-t-il, de
diverses plages délimitant le fonctionnement de chaque partie de la
macro.
Selon l'ordre dans lequel chaque partie est assemblée, l'exécution a
lieu
ou
non.
La macro commence comme ceci (je vous mets le début de chaque partie,
il n'y
a pas les end if, etc car la macro totale fait 518 lignes) :
Private Sub Worksheet_Change(ByVal Target As Range)
If [BK543] = "" Then MsgBox "La cellule BK543 ne doit jamais être vide,
mettre 0": [BK543].Select
Dim iSect As Range, jSect As Range, kSect As Range, lSect As Range,
mSect
As
Range, c As Range
Set iSect = Intersect(Target, Range("AF95:AF482"))
Set jSect = Intersect(Target, Range("AM95:AM482"))
Set kSect = Intersect(Target, Range("AS95:AS482"))
Set lSect = Intersect(Target, Range("AY95:AY482"))
Set mSect = Intersect(Target, Range("BE95:BE482"))
If Not iSect Is Nothing Then
For Each c In iSect.Cells
Application.EnableEvents = False
If c.Value = "" Then _
c.Offset(1, 0).ClearContents
Application.EnableEvents = True
Next
.
Cette partie s'exécute normalement. Puis j'ai ceci qui s'exécute
normalement :
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Not Intersect(Target, Range("AF95:AF482")) Is Nothing Then
If Left(Cells(Target.Row, Target.Column), 2) = "IL" Or
Left(Cells(Target.Row, Target.Column), 1) = "B" Or
Left(Cells(Target.Row,
Target.Column), 2) = "1B" Or Left(Cells(Target.Row, Target.Column), 2)"2B"
Or Left(Cells(Target.Row, Target.Column), 1) = "L" Or
Left(Cells(Target.Row,
Target.Column), 1) = "J" Or Left(Cells(Target.Row, Target.Column), 2) >> > "1J"
Or Left(Cells(Target.Row, Target.Column), 1) = "2J" Then
question = MsgBox("Est-ce un dito ?", vbYesNo, Application.UserName)
If question = vbYes Then
Cells(Target.Row + 1, Target.Column) = "DITO 2007": Exit Sub
End If
End If
End If
If Target.Row < 95 Or Target.Row > 482 Then Exit Sub
If Target.Column < 39 Or Target.Column > 39 Then Exit Sub
If Target.Row Mod 2 = 0 Then Exit Sub
question = MsgBox("Est-ce un nouvel accès ?", vbYesNo,
Application.UserName)
.
Puis, le dernier code qui ne s'exécute pas, sauf si je le mets en
premier,
auquel cas, le reste ne s'exécute plus !
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 44)
If Target.Row / 44 = Int(Target.Row / 44) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 1 & ":A" & Target.Row +
44).EntireRow.Hidden >> > False
Else
Range("A" & Target.Row + 1 & ":A" & Target.Row +
44).EntireRow.Hidden >> > True
End If
End If
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 131)
If Target.Row / 131 = Int(Target.Row / 131) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 2 & ":A" & Target.Row +
43).EntireRow.Hidden >> > False
Else
Range("A" & Target.Row + 2 & ":A" & Target.Row +
43).EntireRow.Hidden >> > True
Quelqu'un pourrait-il m'éclairer ?
Peut-être n'est-ce pas à cause des diverses plages, mais tout à fait
autre
chose.
D'avance, je vous remercie pour votre aide.
Nicoh
Merci de ta réponse Brunos,
Oui, je traite les réponses aux questions, d'ailleurs chaque partie
fonctionne parfaitement, mais c'est l'enchainement de chaque partie qui ne
fonctionne pas (en tout cas seulement la dernière partie). Je vais essayer
le
système des procédures que j'ignorais. Je te tiens au courant.
Nicoh
Bonjour Nicoh,
Question idiote : est-ce que tu traites les réponses à ta question ?
question = MsgBox("Est-ce un nouvel accès ?", vbYesNo,
Application.UserName)
If question = vbyes then
....
Else if question = vbno then
....
end if
D'autre part je te conseille de découper ta procédure en tranche, ça sera
plus digeste à lire et à déboguer:
Private Sub Worksheet_Change(ByVal Target As Range)
procedure1
procedure2
procedure3
etc.
End Sub
Private Sub procedure1()
....
End Sub
Private Sub procedure2()
....
End Sub
Private Sub procedure3()
....
End Sub
etc.
Brunos
"Nicoh" <Nicoh@discussions.microsoft.com> a écrit dans le message de
news:
3979EC60-12FE-4E6A-8388-181A31089FA7@microsoft.com...
Bonjour à tous,
J'ai un souci d'exécution dans une macro, à cause me semble-t-il, de
diverses plages délimitant le fonctionnement de chaque partie de la
macro.
Selon l'ordre dans lequel chaque partie est assemblée, l'exécution a
lieu
ou
non.
La macro commence comme ceci (je vous mets le début de chaque partie,
il n'y
a pas les end if, etc car la macro totale fait 518 lignes) :
Private Sub Worksheet_Change(ByVal Target As Range)
If [BK543] = "" Then MsgBox "La cellule BK543 ne doit jamais être vide,
mettre 0": [BK543].Select
Dim iSect As Range, jSect As Range, kSect As Range, lSect As Range,
mSect
As
Range, c As Range
Set iSect = Intersect(Target, Range("AF95:AF482"))
Set jSect = Intersect(Target, Range("AM95:AM482"))
Set kSect = Intersect(Target, Range("AS95:AS482"))
Set lSect = Intersect(Target, Range("AY95:AY482"))
Set mSect = Intersect(Target, Range("BE95:BE482"))
If Not iSect Is Nothing Then
For Each c In iSect.Cells
Application.EnableEvents = False
If c.Value = "" Then _
c.Offset(1, 0).ClearContents
Application.EnableEvents = True
Next
.
Cette partie s'exécute normalement. Puis j'ai ceci qui s'exécute
normalement :
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Not Intersect(Target, Range("AF95:AF482")) Is Nothing Then
If Left(Cells(Target.Row, Target.Column), 2) = "IL" Or
Left(Cells(Target.Row, Target.Column), 1) = "B" Or
Left(Cells(Target.Row,
Target.Column), 2) = "1B" Or Left(Cells(Target.Row, Target.Column), 2)
"2B"
Or Left(Cells(Target.Row, Target.Column), 1) = "L" Or
Left(Cells(Target.Row,
Target.Column), 1) = "J" Or Left(Cells(Target.Row, Target.Column), 2) >> > "1J"
Or Left(Cells(Target.Row, Target.Column), 1) = "2J" Then
question = MsgBox("Est-ce un dito ?", vbYesNo, Application.UserName)
If question = vbYes Then
Cells(Target.Row + 1, Target.Column) = "DITO 2007": Exit Sub
End If
End If
End If
If Target.Row < 95 Or Target.Row > 482 Then Exit Sub
If Target.Column < 39 Or Target.Column > 39 Then Exit Sub
If Target.Row Mod 2 = 0 Then Exit Sub
question = MsgBox("Est-ce un nouvel accès ?", vbYesNo,
Application.UserName)
.
Puis, le dernier code qui ne s'exécute pas, sauf si je le mets en
premier,
auquel cas, le reste ne s'exécute plus !
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 44)
If Target.Row / 44 = Int(Target.Row / 44) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 1 & ":A" & Target.Row +
44).EntireRow.Hidden >> > False
Else
Range("A" & Target.Row + 1 & ":A" & Target.Row +
44).EntireRow.Hidden >> > True
End If
End If
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 131)
If Target.Row / 131 = Int(Target.Row / 131) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 2 & ":A" & Target.Row +
43).EntireRow.Hidden >> > False
Else
Range("A" & Target.Row + 2 & ":A" & Target.Row +
43).EntireRow.Hidden >> > True
Quelqu'un pourrait-il m'éclairer ?
Peut-être n'est-ce pas à cause des diverses plages, mais tout à fait
autre
chose.
D'avance, je vous remercie pour votre aide.
Nicoh
Merci de ta réponse Brunos,
Oui, je traite les réponses aux questions, d'ailleurs chaque partie
fonctionne parfaitement, mais c'est l'enchainement de chaque partie qui ne
fonctionne pas (en tout cas seulement la dernière partie). Je vais essayer
le
système des procédures que j'ignorais. Je te tiens au courant.
NicohBonjour Nicoh,
Question idiote : est-ce que tu traites les réponses à ta question ?
question = MsgBox("Est-ce un nouvel accès ?", vbYesNo,
Application.UserName)
If question = vbyes then
....
Else if question = vbno then
....
end if
D'autre part je te conseille de découper ta procédure en tranche, ça sera
plus digeste à lire et à déboguer:
Private Sub Worksheet_Change(ByVal Target As Range)
procedure1
procedure2
procedure3
etc.
End Sub
Private Sub procedure1()
....
End Sub
Private Sub procedure2()
....
End Sub
Private Sub procedure3()
....
End Sub
etc.
Brunos
"Nicoh" a écrit dans le message de
news:Bonjour à tous,
J'ai un souci d'exécution dans une macro, à cause me semble-t-il, de
diverses plages délimitant le fonctionnement de chaque partie de la
macro.
Selon l'ordre dans lequel chaque partie est assemblée, l'exécution a
lieu
ou
non.
La macro commence comme ceci (je vous mets le début de chaque partie,
il n'y
a pas les end if, etc car la macro totale fait 518 lignes) :
Private Sub Worksheet_Change(ByVal Target As Range)
If [BK543] = "" Then MsgBox "La cellule BK543 ne doit jamais être vide,
mettre 0": [BK543].Select
Dim iSect As Range, jSect As Range, kSect As Range, lSect As Range,
mSect
As
Range, c As Range
Set iSect = Intersect(Target, Range("AF95:AF482"))
Set jSect = Intersect(Target, Range("AM95:AM482"))
Set kSect = Intersect(Target, Range("AS95:AS482"))
Set lSect = Intersect(Target, Range("AY95:AY482"))
Set mSect = Intersect(Target, Range("BE95:BE482"))
If Not iSect Is Nothing Then
For Each c In iSect.Cells
Application.EnableEvents = False
If c.Value = "" Then _
c.Offset(1, 0).ClearContents
Application.EnableEvents = True
Next
.
Cette partie s'exécute normalement. Puis j'ai ceci qui s'exécute
normalement :
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Not Intersect(Target, Range("AF95:AF482")) Is Nothing Then
If Left(Cells(Target.Row, Target.Column), 2) = "IL" Or
Left(Cells(Target.Row, Target.Column), 1) = "B" Or
Left(Cells(Target.Row,
Target.Column), 2) = "1B" Or Left(Cells(Target.Row, Target.Column), 2)"2B"
Or Left(Cells(Target.Row, Target.Column), 1) = "L" Or
Left(Cells(Target.Row,
Target.Column), 1) = "J" Or Left(Cells(Target.Row, Target.Column), 2) >> > "1J"
Or Left(Cells(Target.Row, Target.Column), 1) = "2J" Then
question = MsgBox("Est-ce un dito ?", vbYesNo, Application.UserName)
If question = vbYes Then
Cells(Target.Row + 1, Target.Column) = "DITO 2007": Exit Sub
End If
End If
End If
If Target.Row < 95 Or Target.Row > 482 Then Exit Sub
If Target.Column < 39 Or Target.Column > 39 Then Exit Sub
If Target.Row Mod 2 = 0 Then Exit Sub
question = MsgBox("Est-ce un nouvel accès ?", vbYesNo,
Application.UserName)
.
Puis, le dernier code qui ne s'exécute pas, sauf si je le mets en
premier,
auquel cas, le reste ne s'exécute plus !
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 44)
If Target.Row / 44 = Int(Target.Row / 44) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 1 & ":A" & Target.Row +
44).EntireRow.Hidden >> > False
Else
Range("A" & Target.Row + 1 & ":A" & Target.Row +
44).EntireRow.Hidden >> > True
End If
End If
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 131)
If Target.Row / 131 = Int(Target.Row / 131) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 2 & ":A" & Target.Row +
43).EntireRow.Hidden >> > False
Else
Range("A" & Target.Row + 2 & ":A" & Target.Row +
43).EntireRow.Hidden >> > True
Quelqu'un pourrait-il m'éclairer ?
Peut-être n'est-ce pas à cause des diverses plages, mais tout à fait
autre
chose.
D'avance, je vous remercie pour votre aide.
Nicoh
Si ça n'est pas confidentiel, mets ton classeur en copie sur
http://cjoint.com/ pour qu'on puisse jeter un coup d'oeil.
Brunos
"Nicoh" a écrit dans le message de news:Merci de ta réponse Brunos,
Oui, je traite les réponses aux questions, d'ailleurs chaque partie
fonctionne parfaitement, mais c'est l'enchainement de chaque partie qui ne
fonctionne pas (en tout cas seulement la dernière partie). Je vais essayer
le
système des procédures que j'ignorais. Je te tiens au courant.
NicohBonjour Nicoh,
Question idiote : est-ce que tu traites les réponses à ta question ?
question = MsgBox("Est-ce un nouvel accès ?", vbYesNo,
Application.UserName)
If question = vbyes then
....
Else if question = vbno then
....
end if
D'autre part je te conseille de découper ta procédure en tranche, ça sera
plus digeste à lire et à déboguer:
Private Sub Worksheet_Change(ByVal Target As Range)
procedure1
procedure2
procedure3
etc.
End Sub
Private Sub procedure1()
....
End Sub
Private Sub procedure2()
....
End Sub
Private Sub procedure3()
....
End Sub
etc.
Brunos
"Nicoh" a écrit dans le message de
news:Bonjour à tous,
J'ai un souci d'exécution dans une macro, à cause me semble-t-il, de
diverses plages délimitant le fonctionnement de chaque partie de la
macro.
Selon l'ordre dans lequel chaque partie est assemblée, l'exécution a
lieu
ou
non.
La macro commence comme ceci (je vous mets le début de chaque partie,
il n'y
a pas les end if, etc car la macro totale fait 518 lignes) :
Private Sub Worksheet_Change(ByVal Target As Range)
If [BK543] = "" Then MsgBox "La cellule BK543 ne doit jamais être vide,
mettre 0": [BK543].Select
Dim iSect As Range, jSect As Range, kSect As Range, lSect As Range,
mSect
As
Range, c As Range
Set iSect = Intersect(Target, Range("AF95:AF482"))
Set jSect = Intersect(Target, Range("AM95:AM482"))
Set kSect = Intersect(Target, Range("AS95:AS482"))
Set lSect = Intersect(Target, Range("AY95:AY482"))
Set mSect = Intersect(Target, Range("BE95:BE482"))
If Not iSect Is Nothing Then
For Each c In iSect.Cells
Application.EnableEvents = False
If c.Value = "" Then _
c.Offset(1, 0).ClearContents
Application.EnableEvents = True
Next
.
Cette partie s'exécute normalement. Puis j'ai ceci qui s'exécute
normalement :
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Not Intersect(Target, Range("AF95:AF482")) Is Nothing Then
If Left(Cells(Target.Row, Target.Column), 2) = "IL" Or
Left(Cells(Target.Row, Target.Column), 1) = "B" Or
Left(Cells(Target.Row,
Target.Column), 2) = "1B" Or Left(Cells(Target.Row, Target.Column), 2)"2B"
Or Left(Cells(Target.Row, Target.Column), 1) = "L" Or
Left(Cells(Target.Row,
Target.Column), 1) = "J" Or Left(Cells(Target.Row, Target.Column), 2) > >> > "1J"
Or Left(Cells(Target.Row, Target.Column), 1) = "2J" Then
question = MsgBox("Est-ce un dito ?", vbYesNo, Application.UserName)
If question = vbYes Then
Cells(Target.Row + 1, Target.Column) = "DITO 2007": Exit Sub
End If
End If
End If
If Target.Row < 95 Or Target.Row > 482 Then Exit Sub
If Target.Column < 39 Or Target.Column > 39 Then Exit Sub
If Target.Row Mod 2 = 0 Then Exit Sub
question = MsgBox("Est-ce un nouvel accès ?", vbYesNo,
Application.UserName)
.
Puis, le dernier code qui ne s'exécute pas, sauf si je le mets en
premier,
auquel cas, le reste ne s'exécute plus !
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 44)
If Target.Row / 44 = Int(Target.Row / 44) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 1 & ":A" & Target.Row +
44).EntireRow.Hidden > >> > False
Else
Range("A" & Target.Row + 1 & ":A" & Target.Row +
44).EntireRow.Hidden > >> > True
End If
End If
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 131)
If Target.Row / 131 = Int(Target.Row / 131) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 2 & ":A" & Target.Row +
43).EntireRow.Hidden > >> > False
Else
Range("A" & Target.Row + 2 & ":A" & Target.Row +
43).EntireRow.Hidden > >> > True
Quelqu'un pourrait-il m'éclairer ?
Peut-être n'est-ce pas à cause des diverses plages, mais tout à fait
autre
chose.
D'avance, je vous remercie pour votre aide.
Nicoh
Si ça n'est pas confidentiel, mets ton classeur en copie sur
http://cjoint.com/ pour qu'on puisse jeter un coup d'oeil.
Brunos
"Nicoh" <Nicoh@discussions.microsoft.com> a écrit dans le message de news:
349435E3-83A7-4092-9B88-675AA02D875D@microsoft.com...
Merci de ta réponse Brunos,
Oui, je traite les réponses aux questions, d'ailleurs chaque partie
fonctionne parfaitement, mais c'est l'enchainement de chaque partie qui ne
fonctionne pas (en tout cas seulement la dernière partie). Je vais essayer
le
système des procédures que j'ignorais. Je te tiens au courant.
Nicoh
Bonjour Nicoh,
Question idiote : est-ce que tu traites les réponses à ta question ?
question = MsgBox("Est-ce un nouvel accès ?", vbYesNo,
Application.UserName)
If question = vbyes then
....
Else if question = vbno then
....
end if
D'autre part je te conseille de découper ta procédure en tranche, ça sera
plus digeste à lire et à déboguer:
Private Sub Worksheet_Change(ByVal Target As Range)
procedure1
procedure2
procedure3
etc.
End Sub
Private Sub procedure1()
....
End Sub
Private Sub procedure2()
....
End Sub
Private Sub procedure3()
....
End Sub
etc.
Brunos
"Nicoh" <Nicoh@discussions.microsoft.com> a écrit dans le message de
news:
3979EC60-12FE-4E6A-8388-181A31089FA7@microsoft.com...
Bonjour à tous,
J'ai un souci d'exécution dans une macro, à cause me semble-t-il, de
diverses plages délimitant le fonctionnement de chaque partie de la
macro.
Selon l'ordre dans lequel chaque partie est assemblée, l'exécution a
lieu
ou
non.
La macro commence comme ceci (je vous mets le début de chaque partie,
il n'y
a pas les end if, etc car la macro totale fait 518 lignes) :
Private Sub Worksheet_Change(ByVal Target As Range)
If [BK543] = "" Then MsgBox "La cellule BK543 ne doit jamais être vide,
mettre 0": [BK543].Select
Dim iSect As Range, jSect As Range, kSect As Range, lSect As Range,
mSect
As
Range, c As Range
Set iSect = Intersect(Target, Range("AF95:AF482"))
Set jSect = Intersect(Target, Range("AM95:AM482"))
Set kSect = Intersect(Target, Range("AS95:AS482"))
Set lSect = Intersect(Target, Range("AY95:AY482"))
Set mSect = Intersect(Target, Range("BE95:BE482"))
If Not iSect Is Nothing Then
For Each c In iSect.Cells
Application.EnableEvents = False
If c.Value = "" Then _
c.Offset(1, 0).ClearContents
Application.EnableEvents = True
Next
.
Cette partie s'exécute normalement. Puis j'ai ceci qui s'exécute
normalement :
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Not Intersect(Target, Range("AF95:AF482")) Is Nothing Then
If Left(Cells(Target.Row, Target.Column), 2) = "IL" Or
Left(Cells(Target.Row, Target.Column), 1) = "B" Or
Left(Cells(Target.Row,
Target.Column), 2) = "1B" Or Left(Cells(Target.Row, Target.Column), 2)
"2B"
Or Left(Cells(Target.Row, Target.Column), 1) = "L" Or
Left(Cells(Target.Row,
Target.Column), 1) = "J" Or Left(Cells(Target.Row, Target.Column), 2) > >> > "1J"
Or Left(Cells(Target.Row, Target.Column), 1) = "2J" Then
question = MsgBox("Est-ce un dito ?", vbYesNo, Application.UserName)
If question = vbYes Then
Cells(Target.Row + 1, Target.Column) = "DITO 2007": Exit Sub
End If
End If
End If
If Target.Row < 95 Or Target.Row > 482 Then Exit Sub
If Target.Column < 39 Or Target.Column > 39 Then Exit Sub
If Target.Row Mod 2 = 0 Then Exit Sub
question = MsgBox("Est-ce un nouvel accès ?", vbYesNo,
Application.UserName)
.
Puis, le dernier code qui ne s'exécute pas, sauf si je le mets en
premier,
auquel cas, le reste ne s'exécute plus !
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 44)
If Target.Row / 44 = Int(Target.Row / 44) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 1 & ":A" & Target.Row +
44).EntireRow.Hidden > >> > False
Else
Range("A" & Target.Row + 1 & ":A" & Target.Row +
44).EntireRow.Hidden > >> > True
End If
End If
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 131)
If Target.Row / 131 = Int(Target.Row / 131) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 2 & ":A" & Target.Row +
43).EntireRow.Hidden > >> > False
Else
Range("A" & Target.Row + 2 & ":A" & Target.Row +
43).EntireRow.Hidden > >> > True
Quelqu'un pourrait-il m'éclairer ?
Peut-être n'est-ce pas à cause des diverses plages, mais tout à fait
autre
chose.
D'avance, je vous remercie pour votre aide.
Nicoh
Si ça n'est pas confidentiel, mets ton classeur en copie sur
http://cjoint.com/ pour qu'on puisse jeter un coup d'oeil.
Brunos
"Nicoh" a écrit dans le message de news:Merci de ta réponse Brunos,
Oui, je traite les réponses aux questions, d'ailleurs chaque partie
fonctionne parfaitement, mais c'est l'enchainement de chaque partie qui ne
fonctionne pas (en tout cas seulement la dernière partie). Je vais essayer
le
système des procédures que j'ignorais. Je te tiens au courant.
NicohBonjour Nicoh,
Question idiote : est-ce que tu traites les réponses à ta question ?
question = MsgBox("Est-ce un nouvel accès ?", vbYesNo,
Application.UserName)
If question = vbyes then
....
Else if question = vbno then
....
end if
D'autre part je te conseille de découper ta procédure en tranche, ça sera
plus digeste à lire et à déboguer:
Private Sub Worksheet_Change(ByVal Target As Range)
procedure1
procedure2
procedure3
etc.
End Sub
Private Sub procedure1()
....
End Sub
Private Sub procedure2()
....
End Sub
Private Sub procedure3()
....
End Sub
etc.
Brunos
"Nicoh" a écrit dans le message de
news:Bonjour à tous,
J'ai un souci d'exécution dans une macro, à cause me semble-t-il, de
diverses plages délimitant le fonctionnement de chaque partie de la
macro.
Selon l'ordre dans lequel chaque partie est assemblée, l'exécution a
lieu
ou
non.
La macro commence comme ceci (je vous mets le début de chaque partie,
il n'y
a pas les end if, etc car la macro totale fait 518 lignes) :
Private Sub Worksheet_Change(ByVal Target As Range)
If [BK543] = "" Then MsgBox "La cellule BK543 ne doit jamais être vide,
mettre 0": [BK543].Select
Dim iSect As Range, jSect As Range, kSect As Range, lSect As Range,
mSect
As
Range, c As Range
Set iSect = Intersect(Target, Range("AF95:AF482"))
Set jSect = Intersect(Target, Range("AM95:AM482"))
Set kSect = Intersect(Target, Range("AS95:AS482"))
Set lSect = Intersect(Target, Range("AY95:AY482"))
Set mSect = Intersect(Target, Range("BE95:BE482"))
If Not iSect Is Nothing Then
For Each c In iSect.Cells
Application.EnableEvents = False
If c.Value = "" Then _
c.Offset(1, 0).ClearContents
Application.EnableEvents = True
Next
.
Cette partie s'exécute normalement. Puis j'ai ceci qui s'exécute
normalement :
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Not Intersect(Target, Range("AF95:AF482")) Is Nothing Then
If Left(Cells(Target.Row, Target.Column), 2) = "IL" Or
Left(Cells(Target.Row, Target.Column), 1) = "B" Or
Left(Cells(Target.Row,
Target.Column), 2) = "1B" Or Left(Cells(Target.Row, Target.Column), 2)"2B"
Or Left(Cells(Target.Row, Target.Column), 1) = "L" Or
Left(Cells(Target.Row,
Target.Column), 1) = "J" Or Left(Cells(Target.Row, Target.Column), 2) > >> > "1J"
Or Left(Cells(Target.Row, Target.Column), 1) = "2J" Then
question = MsgBox("Est-ce un dito ?", vbYesNo, Application.UserName)
If question = vbYes Then
Cells(Target.Row + 1, Target.Column) = "DITO 2007": Exit Sub
End If
End If
End If
If Target.Row < 95 Or Target.Row > 482 Then Exit Sub
If Target.Column < 39 Or Target.Column > 39 Then Exit Sub
If Target.Row Mod 2 = 0 Then Exit Sub
question = MsgBox("Est-ce un nouvel accès ?", vbYesNo,
Application.UserName)
.
Puis, le dernier code qui ne s'exécute pas, sauf si je le mets en
premier,
auquel cas, le reste ne s'exécute plus !
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 44)
If Target.Row / 44 = Int(Target.Row / 44) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 1 & ":A" & Target.Row +
44).EntireRow.Hidden > >> > False
Else
Range("A" & Target.Row + 1 & ":A" & Target.Row +
44).EntireRow.Hidden > >> > True
End If
End If
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 131)
If Target.Row / 131 = Int(Target.Row / 131) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 2 & ":A" & Target.Row +
43).EntireRow.Hidden > >> > False
Else
Range("A" & Target.Row + 2 & ":A" & Target.Row +
43).EntireRow.Hidden > >> > True
Quelqu'un pourrait-il m'éclairer ?
Peut-être n'est-ce pas à cause des diverses plages, mais tout à fait
autre
chose.
D'avance, je vous remercie pour votre aide.
Nicoh
Brunos,
Je viens de procéder comme tu me l'as conseillé :
Private Sub Worksheet_Change(ByVal Target As Range)
procedure1
procedure2
procedure3
etc.
End Sub
Private Sub procedure1()
If [BK543] = "" Then MsgBox "La cellule BK543 ne doit jamais être vide,
mettre 0": [BK543].Select
Dim iSect As Range, jSect As Range, kSect As Range, lSect As Range, mSect
As
Range, c As Range
Set iSect = Intersect(Target, Range("AF95:AF482"))
Set jSect = Intersect(Target, Range("AM95:AM482"))
Set kSect = Intersect(Target, Range("AS95:AS482"))
Set lSect = Intersect(Target, Range("AY95:AY482"))
Set mSect = Intersect(Target, Range("BE95:BE482"))
If Not iSect Is Nothing Then
For Each c In iSect.Cells
Application.EnableEvents = False
If c.Value = "" Then _
c.Offset(1, 0).ClearContents
Application.EnableEvents = True
Next
...
End Sub
Private Sub procedure2()
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Not Intersect(Target, Range("AF95:AF482")) Is Nothing Then
If Left(Cells(Target.Row, Target.Column), 2) = "IL" Or
Left(Cells(Target.Row, Target.Column), 1) = "B" Or Left(Cells(Target.Row,
Target.Column), 2) = "1B" Or Left(Cells(Target.Row, Target.Column), 2) =
"2B"
Or Left(Cells(Target.Row, Target.Column), 1) = "L" Or
Left(Cells(Target.Row,
Target.Column), 1) = "J" Or Left(Cells(Target.Row, Target.Column), 2) =
"1J"
Or Left(Cells(Target.Row, Target.Column), 1) = "2J" Then
question = MsgBox("Est-ce un dito ?", vbYesNo, Application.UserName)
If question = vbYes Then
Cells(Target.Row + 1, Target.Column) = "DITO 2007": Exit Sub
End If
End If
End If
End Sub
Private Sub procedure3()
....
End Sub
Mais, j'ai une erreur d'exécution 424 : objet requis. Malheureusement, je
ne
sais même pas ce qu'est un objet dans une procédure. Quand je fais
débogage,
j'ai la ligne suivante surlignée en jaune !
Set iSect = Intersect(Target, Range("AF95:AF482"))
Peux-tu m'aider sur ce coup là ? Si tu veux bien aussi m'expliquer (si ce
n'est pas trop abuser) le fonctionnement de la procédure car là c'est trop
complexe pour mon faible niveau.
D'avance, je te remercie,
Nicoh
Brunos,
Je viens de procéder comme tu me l'as conseillé :
Private Sub Worksheet_Change(ByVal Target As Range)
procedure1
procedure2
procedure3
etc.
End Sub
Private Sub procedure1()
If [BK543] = "" Then MsgBox "La cellule BK543 ne doit jamais être vide,
mettre 0": [BK543].Select
Dim iSect As Range, jSect As Range, kSect As Range, lSect As Range, mSect
As
Range, c As Range
Set iSect = Intersect(Target, Range("AF95:AF482"))
Set jSect = Intersect(Target, Range("AM95:AM482"))
Set kSect = Intersect(Target, Range("AS95:AS482"))
Set lSect = Intersect(Target, Range("AY95:AY482"))
Set mSect = Intersect(Target, Range("BE95:BE482"))
If Not iSect Is Nothing Then
For Each c In iSect.Cells
Application.EnableEvents = False
If c.Value = "" Then _
c.Offset(1, 0).ClearContents
Application.EnableEvents = True
Next
...
End Sub
Private Sub procedure2()
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Not Intersect(Target, Range("AF95:AF482")) Is Nothing Then
If Left(Cells(Target.Row, Target.Column), 2) = "IL" Or
Left(Cells(Target.Row, Target.Column), 1) = "B" Or Left(Cells(Target.Row,
Target.Column), 2) = "1B" Or Left(Cells(Target.Row, Target.Column), 2) =
"2B"
Or Left(Cells(Target.Row, Target.Column), 1) = "L" Or
Left(Cells(Target.Row,
Target.Column), 1) = "J" Or Left(Cells(Target.Row, Target.Column), 2) =
"1J"
Or Left(Cells(Target.Row, Target.Column), 1) = "2J" Then
question = MsgBox("Est-ce un dito ?", vbYesNo, Application.UserName)
If question = vbYes Then
Cells(Target.Row + 1, Target.Column) = "DITO 2007": Exit Sub
End If
End If
End If
End Sub
Private Sub procedure3()
....
End Sub
Mais, j'ai une erreur d'exécution 424 : objet requis. Malheureusement, je
ne
sais même pas ce qu'est un objet dans une procédure. Quand je fais
débogage,
j'ai la ligne suivante surlignée en jaune !
Set iSect = Intersect(Target, Range("AF95:AF482"))
Peux-tu m'aider sur ce coup là ? Si tu veux bien aussi m'expliquer (si ce
n'est pas trop abuser) le fonctionnement de la procédure car là c'est trop
complexe pour mon faible niveau.
D'avance, je te remercie,
Nicoh
Brunos,
Je viens de procéder comme tu me l'as conseillé :
Private Sub Worksheet_Change(ByVal Target As Range)
procedure1
procedure2
procedure3
etc.
End Sub
Private Sub procedure1()
If [BK543] = "" Then MsgBox "La cellule BK543 ne doit jamais être vide,
mettre 0": [BK543].Select
Dim iSect As Range, jSect As Range, kSect As Range, lSect As Range, mSect
As
Range, c As Range
Set iSect = Intersect(Target, Range("AF95:AF482"))
Set jSect = Intersect(Target, Range("AM95:AM482"))
Set kSect = Intersect(Target, Range("AS95:AS482"))
Set lSect = Intersect(Target, Range("AY95:AY482"))
Set mSect = Intersect(Target, Range("BE95:BE482"))
If Not iSect Is Nothing Then
For Each c In iSect.Cells
Application.EnableEvents = False
If c.Value = "" Then _
c.Offset(1, 0).ClearContents
Application.EnableEvents = True
Next
...
End Sub
Private Sub procedure2()
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Not Intersect(Target, Range("AF95:AF482")) Is Nothing Then
If Left(Cells(Target.Row, Target.Column), 2) = "IL" Or
Left(Cells(Target.Row, Target.Column), 1) = "B" Or Left(Cells(Target.Row,
Target.Column), 2) = "1B" Or Left(Cells(Target.Row, Target.Column), 2) =
"2B"
Or Left(Cells(Target.Row, Target.Column), 1) = "L" Or
Left(Cells(Target.Row,
Target.Column), 1) = "J" Or Left(Cells(Target.Row, Target.Column), 2) =
"1J"
Or Left(Cells(Target.Row, Target.Column), 1) = "2J" Then
question = MsgBox("Est-ce un dito ?", vbYesNo, Application.UserName)
If question = vbYes Then
Cells(Target.Row + 1, Target.Column) = "DITO 2007": Exit Sub
End If
End If
End If
End Sub
Private Sub procedure3()
....
End Sub
Mais, j'ai une erreur d'exécution 424 : objet requis. Malheureusement, je
ne
sais même pas ce qu'est un objet dans une procédure. Quand je fais
débogage,
j'ai la ligne suivante surlignée en jaune !
Set iSect = Intersect(Target, Range("AF95:AF482"))
Peux-tu m'aider sur ce coup là ? Si tu veux bien aussi m'expliquer (si ce
n'est pas trop abuser) le fonctionnement de la procédure car là c'est trop
complexe pour mon faible niveau.
D'avance, je te remercie,
Nicoh
Brunos,
Je pense avoir fait comme tu l'as indiqué (cible au lieu de Target, ...),
mais j'ai exactement la même erreur. isect ... est en jaune.
A toute fin utile, tu peux voir le code complet à l'adresse suivante :
http://cjoint.com/data/boxdmZRSgc.htm (j'espère ne pas me tromper dans le
lien).
Par rapport à ma première demande c'est l'équivalent de la tranche 4 qui
ne
s'effectuait pas.
J'espère que tu pourras m'aider.
Bonne soirée,
Nicoh.
Brunos,
Je pense avoir fait comme tu l'as indiqué (cible au lieu de Target, ...),
mais j'ai exactement la même erreur. isect ... est en jaune.
A toute fin utile, tu peux voir le code complet à l'adresse suivante :
http://cjoint.com/data/boxdmZRSgc.htm (j'espère ne pas me tromper dans le
lien).
Par rapport à ma première demande c'est l'équivalent de la tranche 4 qui
ne
s'effectuait pas.
J'espère que tu pourras m'aider.
Bonne soirée,
Nicoh.
Brunos,
Je pense avoir fait comme tu l'as indiqué (cible au lieu de Target, ...),
mais j'ai exactement la même erreur. isect ... est en jaune.
A toute fin utile, tu peux voir le code complet à l'adresse suivante :
http://cjoint.com/data/boxdmZRSgc.htm (j'espère ne pas me tromper dans le
lien).
Par rapport à ma première demande c'est l'équivalent de la tranche 4 qui
ne
s'effectuait pas.
J'espère que tu pourras m'aider.
Bonne soirée,
Nicoh.
Je n'ai pas regardé ton code dans le détail. C'est très long. Tu te lances
dans la modification d'un code complexe que tu n'a probablement pas écrit,
avec peu de connaissance en VBA. Ca sera dur.
Je peux te donner quelques pistes mais je ne connais pas ton projet alors
c'est difficile.
Que se passe-t-il exactement, as-tu un message d'erreur? Comment se
manifeste le problème ?
Concernant les variables, tu ne les as pas mises en déclaration. Voir le
fichier joint : http://cjoint.com/?boxKlL821q
Brunos
"Nicoh" a écrit dans le message de news:Brunos,
Je pense avoir fait comme tu l'as indiqué (cible au lieu de Target, ...),
mais j'ai exactement la même erreur. isect ... est en jaune.
A toute fin utile, tu peux voir le code complet à l'adresse suivante :
http://cjoint.com/data/boxdmZRSgc.htm (j'espère ne pas me tromper dans le
lien).
Par rapport à ma première demande c'est l'équivalent de la tranche 4 qui
ne
s'effectuait pas.
J'espère que tu pourras m'aider.
Bonne soirée,
Nicoh.
Je n'ai pas regardé ton code dans le détail. C'est très long. Tu te lances
dans la modification d'un code complexe que tu n'a probablement pas écrit,
avec peu de connaissance en VBA. Ca sera dur.
Je peux te donner quelques pistes mais je ne connais pas ton projet alors
c'est difficile.
Que se passe-t-il exactement, as-tu un message d'erreur? Comment se
manifeste le problème ?
Concernant les variables, tu ne les as pas mises en déclaration. Voir le
fichier joint : http://cjoint.com/?boxKlL821q
Brunos
"Nicoh" <Nicoh@discussions.microsoft.com> a écrit dans le message de news:
F5932EDE-FDB7-4077-A7E4-6E165F2C2AA3@microsoft.com...
Brunos,
Je pense avoir fait comme tu l'as indiqué (cible au lieu de Target, ...),
mais j'ai exactement la même erreur. isect ... est en jaune.
A toute fin utile, tu peux voir le code complet à l'adresse suivante :
http://cjoint.com/data/boxdmZRSgc.htm (j'espère ne pas me tromper dans le
lien).
Par rapport à ma première demande c'est l'équivalent de la tranche 4 qui
ne
s'effectuait pas.
J'espère que tu pourras m'aider.
Bonne soirée,
Nicoh.
Je n'ai pas regardé ton code dans le détail. C'est très long. Tu te lances
dans la modification d'un code complexe que tu n'a probablement pas écrit,
avec peu de connaissance en VBA. Ca sera dur.
Je peux te donner quelques pistes mais je ne connais pas ton projet alors
c'est difficile.
Que se passe-t-il exactement, as-tu un message d'erreur? Comment se
manifeste le problème ?
Concernant les variables, tu ne les as pas mises en déclaration. Voir le
fichier joint : http://cjoint.com/?boxKlL821q
Brunos
"Nicoh" a écrit dans le message de news:Brunos,
Je pense avoir fait comme tu l'as indiqué (cible au lieu de Target, ...),
mais j'ai exactement la même erreur. isect ... est en jaune.
A toute fin utile, tu peux voir le code complet à l'adresse suivante :
http://cjoint.com/data/boxdmZRSgc.htm (j'espère ne pas me tromper dans le
lien).
Par rapport à ma première demande c'est l'équivalent de la tranche 4 qui
ne
s'effectuait pas.
J'espère que tu pourras m'aider.
Bonne soirée,
Nicoh.
En fait, si je reviens au début avant de changer les Target en Cible (car
pour le moment j'ai encore un souci avec ta méthode, j'y regarderais de
plus
près demain), tout ce passe comme je le souhaite sauf la partie en dessous
de
la tranche 4 (p10/13).
Il n' y a pas de message d'erreur, il ne se passe rien. Si je mets cette
partie en premier, ça fonctionne, mais par exemple la partie tranche 3 ne
fonctionne plus.
NicohJe n'ai pas regardé ton code dans le détail. C'est très long. Tu te
lances
dans la modification d'un code complexe que tu n'a probablement pas
écrit,
avec peu de connaissance en VBA. Ca sera dur.
Je peux te donner quelques pistes mais je ne connais pas ton projet alors
c'est difficile.
Que se passe-t-il exactement, as-tu un message d'erreur? Comment se
manifeste le problème ?
Concernant les variables, tu ne les as pas mises en déclaration. Voir le
fichier joint : http://cjoint.com/?boxKlL821q
Brunos
"Nicoh" a écrit dans le message de
news:Brunos,
Je pense avoir fait comme tu l'as indiqué (cible au lieu de Target,
...),
mais j'ai exactement la même erreur. isect ... est en jaune.
A toute fin utile, tu peux voir le code complet à l'adresse suivante :
http://cjoint.com/data/boxdmZRSgc.htm (j'espère ne pas me tromper dans
le
lien).
Par rapport à ma première demande c'est l'équivalent de la tranche 4
qui
ne
s'effectuait pas.
J'espère que tu pourras m'aider.
Bonne soirée,
Nicoh.
En fait, si je reviens au début avant de changer les Target en Cible (car
pour le moment j'ai encore un souci avec ta méthode, j'y regarderais de
plus
près demain), tout ce passe comme je le souhaite sauf la partie en dessous
de
la tranche 4 (p10/13).
Il n' y a pas de message d'erreur, il ne se passe rien. Si je mets cette
partie en premier, ça fonctionne, mais par exemple la partie tranche 3 ne
fonctionne plus.
Nicoh
Je n'ai pas regardé ton code dans le détail. C'est très long. Tu te
lances
dans la modification d'un code complexe que tu n'a probablement pas
écrit,
avec peu de connaissance en VBA. Ca sera dur.
Je peux te donner quelques pistes mais je ne connais pas ton projet alors
c'est difficile.
Que se passe-t-il exactement, as-tu un message d'erreur? Comment se
manifeste le problème ?
Concernant les variables, tu ne les as pas mises en déclaration. Voir le
fichier joint : http://cjoint.com/?boxKlL821q
Brunos
"Nicoh" <Nicoh@discussions.microsoft.com> a écrit dans le message de
news:
F5932EDE-FDB7-4077-A7E4-6E165F2C2AA3@microsoft.com...
Brunos,
Je pense avoir fait comme tu l'as indiqué (cible au lieu de Target,
...),
mais j'ai exactement la même erreur. isect ... est en jaune.
A toute fin utile, tu peux voir le code complet à l'adresse suivante :
http://cjoint.com/data/boxdmZRSgc.htm (j'espère ne pas me tromper dans
le
lien).
Par rapport à ma première demande c'est l'équivalent de la tranche 4
qui
ne
s'effectuait pas.
J'espère que tu pourras m'aider.
Bonne soirée,
Nicoh.
En fait, si je reviens au début avant de changer les Target en Cible (car
pour le moment j'ai encore un souci avec ta méthode, j'y regarderais de
plus
près demain), tout ce passe comme je le souhaite sauf la partie en dessous
de
la tranche 4 (p10/13).
Il n' y a pas de message d'erreur, il ne se passe rien. Si je mets cette
partie en premier, ça fonctionne, mais par exemple la partie tranche 3 ne
fonctionne plus.
NicohJe n'ai pas regardé ton code dans le détail. C'est très long. Tu te
lances
dans la modification d'un code complexe que tu n'a probablement pas
écrit,
avec peu de connaissance en VBA. Ca sera dur.
Je peux te donner quelques pistes mais je ne connais pas ton projet alors
c'est difficile.
Que se passe-t-il exactement, as-tu un message d'erreur? Comment se
manifeste le problème ?
Concernant les variables, tu ne les as pas mises en déclaration. Voir le
fichier joint : http://cjoint.com/?boxKlL821q
Brunos
"Nicoh" a écrit dans le message de
news:Brunos,
Je pense avoir fait comme tu l'as indiqué (cible au lieu de Target,
...),
mais j'ai exactement la même erreur. isect ... est en jaune.
A toute fin utile, tu peux voir le code complet à l'adresse suivante :
http://cjoint.com/data/boxdmZRSgc.htm (j'espère ne pas me tromper dans
le
lien).
Par rapport à ma première demande c'est l'équivalent de la tranche 4
qui
ne
s'effectuait pas.
J'espère que tu pourras m'aider.
Bonne soirée,
Nicoh.