Probleme de compilation ou affectation
rebonjour j'ai un souci dans ma formule
quelqu'un peut il m'aider,
il me dit que j'ai une erreur de compilation : nombre d'argument incorrect ou affectation propriété incorrect
et il me surligne union
Option Explicit
Dim c, ln, i, plage()
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False 'On désactive les macro événementielles pour éviter
'de déclencher des macros automatiques indésirables
'qui risqueraient de créer des bugs
Application.ScreenUpdating = False 'On désactive la mise à jour de l'écran pour accélérer
'l'exécution de la macro
If Target.Count > 1 Then End 'Test : si il y a plus d'une cellule sélectionnées, on
'arrête la macro
'A l 'instruction suivante, on regarde si on a sélectionné
'la cellule G1 ou l'une des 6 cellules de dates de la
'colonne A
'Si oui, on continue
'Si non, on saute jusqu'à l'instruction ''End if'' qui
'correspond à ce If, c'est à dire qui est au même niveau
'sur une ligne verticale sur cette feuille, et la macro
'se termine
If Not Intersect(Target, Union(Range("G1"), Range("A7"), Range("A52"), Range("A97"), Range("A142"), Range("A187"), Range("A232"), Range("A277"), Range("A322"), Range("A367"), Range("A412"), Range("A457"), Range("A502"), Range("A547"), Range("A592"), Range("A637"), Range("A682"), Range("A727"), Range("A772"), Range("A817"), Range("A862"), Range("A907"), Range("A952"), Range("A997"), Range("A1042"), Range("A1087"), Range("A1132"), Range("A1177"), Range("A1222"), Range("A1267"), Range("A1312"), Range("A1357"))) Is Nothing Then
ActiveSheet.Unprotect "caje17" 'On déprotège la feuille, sinon on ne peut rien y modifier
'même avec une macro
For ln = 7 To 1357 Step 45 'On commence une boucle qui va permettre de passer toutes
'les lignes de la lignes 7 à la ligne 82 en sautant de 15 en
'15 lignes.
'A chaque tour de boucle, on sera ainsi sur la première ligne
' de la journée
'L'instruction suivante permet de sélectionner toutes les cellules blanches
'de la journée concernée. Ce sera les cellules blanches du lundi pour ln = 7
'puis celles du mardi pour ln = 22 etc...
For i = 0 To 2
ReDim Preserve plage(2)
Set plage(i) = Range("C" & ln + i * 15 + 2 & ":L" & ln + i * 15 + 4 & _
",M" & ln + i * 15 + 3 & ":R" & ln + i * 15 + 4 & _
",S" & ln + i * 15 + 2 & ":T" & ln + i * 15 + 4 & _
",U" & ln + i * 15 + 2 & ":X" & ln + i * 15 + 2 & _
",Y" & ln + i * 15 + 2 & ":AJ" & ln + i * 15 + 4 & _
",AK" & ln + i * 15 + 3 & ":AZ" & ln + i * 15 + 4 & _
",BA" & ln + i * 15 + 2 & ":BE" & ln + i * 15 + 4 & _
",BF" & ln + i * 15 + 2 & ":BF" & ln + i * 15 + 4 & _
",C" & ln + i * 15 + 6 & ":X" & ln + i * 15 + 14 & _
",Y" & ln + i * 15 + 6 & ":BF" & ln + i * 15 + 12 & _
",Y" & ln + i * 15 + 13 & ":BF" & ln + i * 15 + 14)
Next i
Union(plage(0), plage(1), plage(2)).Select
If Cells(ln, "A") = Cells(1, "G") Then 'Les cellules blanches de la semaine étant
'sélectionnée, on regarde si la 1ère cellule
'sélectionnée de la colonne A est égale à G1
Selection.Locked = False 'si la réponse est oui, on dévérouille les cellules
'sélectionnées
Else 'sinon
Selection.Locked = True 'on vérouille les cellules sélectionnées
End If
Next 'fin de la boucle : on retourne au début pour un tour de
'boucle supplémentaire si ln est inférieur ou égal à 82
'sinon, on sort de la boucle et on exécute l'instruction
'suivante
ActiveSheet.Protect "caje17" 'on protège la feuille avec un mot de passe
End If
Application.EnableEvents = True 'on réactive les macro événementielles
End Sub
Sub Evenement()
Application.EnableEvents = True
End Sub
merci de votre aide
Bonjour
En regardant l'aide sur Union le nombre de paramètres est limité à 30
Essayes de cette manière
If Not Intersect(Target, Range("G1,A7,A52,A97,A142,A187,A232,A277,A322,A367,412,A457,A502,A547,A592,A637,A682,A727,A772,A817,A862,A907,A952,A997,A1042,A1087,A1132,A1177,A1222,A1267,A1312,A1357")) Is Nothing Thendésolé, ça ne fonctionne pas je suis a me tirer les cheveu
merci a toi
Bonjour
J'ai oublié un A
If Not Intersect(Target, Range("G1,A7,A52,A97,A142,A187,A232,A277,A322,A367,A412,A457,A502,A547,A592,A637,A682,A727,A772,A817,A862,A907,A952,A997,A1042,A1087,A1132,A1177,A1222,A1267,A1312,A1357")) Is Nothing Thendesolé ca ne fonctionne pas non plus
je n'ai plus d'erreur mais ca me protege toute ma feuille alors que je veut que ca enleve juste la protection de la date du jours
merci de ton aide
je ne peut pas envoyer le fichier en meme temps car il est trop volumineux
allez les gars, svp j'ai besoin d'aide
merci
Bonsoir
A tester
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False ' On désactive les macro événementielles pour éviter
' de déclencher des macros automatiques indésirables
' qui risqueraient de créer des bugs
Application.ScreenUpdating = False ' On désactive la mise à jour de l'écran pour accélérer
' l'exécution de la macro
If Target.Count > 1 Then End ' Test : si il y a plus d'une cellule sélectionnées, on
' arrête la macro
' A l 'instruction suivante, on regarde si on a sélectionné
' la cellule G1 ou l'une des 6 cellules de dates de la
' colonne A
' Si oui, on continue
' Si non, on saute jusqu'à l'instruction ''End if'' qui
' correspond à ce If, c'est à dire qui est au même niveau
' sur une ligne verticale sur cette feuille, et la macro
' se termine
'If Not Intersect(Target, Union(Range("G1"), Range("A7"), Range("A52"), Range("A97"), Range("A142"), Range("A187"), Range("A232"), Range("A277"), Range("A322"), Range("A367"), Range("A412"), Range("A457"), Range("A502"), Range("A547"), Range("A592"), Range("A637"), Range("A682"), Range("A727"), Range("A772"), Range("A817"), Range("A862"), Range("A907"), Range("A952"), Range("A997"), Range("A1042"), Range("A1087"), Range("A1132"), Range("A1177"), Range("A1222"), Range("A1267"), Range("A1312"), Range("A1357"))) Is Nothing Then
If Not Intersect(Target, Range("G1,A7,A52,A97,A142,A187,A232,A277,A322,A367,A412,A457,A502,A547,A592,A637,A682,A727,A772,A817,A862,A907,A952,A997,A1042,A1087,A1132,A1177,A1222,A1267,A1312,A1357")) Is Nothing Then
ActiveSheet.Unprotect "caje17" ' On déprotège la feuille, sinon on ne peut rien y modifier
' même avec une macro
For Ln = 7 To 1357 Step 45 ' On commence une boucle qui va permettre de passer toutes
' les lignes de la lignes 7 à la ligne 82 en sautant de 15 en
' 15 lignes.
' A chaque tour de boucle, on sera ainsi sur la première ligne
' de la journée
' L'instruction suivante permet de sélectionner toutes les cellules blanches
' de la journée concernée. Ce sera les cellules blanches du lundi pour ln = 7
' puis celles du mardi pour ln = 22 etc...
For I = 0 To 2
Set plage(I) = Range("C" & Ln + I * 15 + 2 & ":L" & Ln + I * 15 + 4 & _
",M" & Ln + I * 15 + 3 & ":R" & Ln + I * 15 + 4 & _
",S" & Ln + I * 15 + 2 & ":T" & Ln + I * 15 + 4 & _
",U" & Ln + I * 15 + 2 & ":X" & Ln + I * 15 + 2 & _
",Y" & Ln + I * 15 + 2 & ":AJ" & Ln + I * 15 + 4 & _
",AK" & Ln + I * 15 + 3 & ":AZ" & Ln + I * 15 + 4 & _
",BA" & Ln + I * 15 + 2 & ":BE" & Ln + I * 15 + 4 & _
",BF" & Ln + I * 15 + 2 & ":BF" & Ln + I * 15 + 4 & _
",C" & Ln + I * 15 + 6 & ":X" & Ln + I * 15 + 14 & _
",Y" & Ln + I * 15 + 6 & ":BF" & Ln + I * 15 + 12 & _
",Y" & Ln + I * 15 + 13 & ":BF" & Ln + I * 15 + 14)
Next I
Application.Union(plage(0), plage(1), plage(2)).Select
If Cells(Ln, "A") = Cells(1, "G") Then ' Les cellules blanches de la semaine étant
' sélectionnée, on regarde si la 1ère cellule
' sélectionnée de la colonne A est égale à G1
Selection.Locked = False ' si la réponse est oui, on dévérouille les cellules
' sélectionnées
Else ' sinon
Selection.Locked = True ' on vérouille les cellules sélectionnées
End If
Next Ln ' fin de la boucle : on retourne au début pour un tour de
' boucle supplémentaire si ln est inférieur ou égal à 82
' sinon, on sort de la boucle et on exécute l'instruction
' suivante
ActiveSheet.Protect "caje17" ' on protège la feuille avec un mot de passe
End If
Application.EnableEvents = True ' on réactive les macro événementielles
End Sub
Sub Evenement()
Application.EnableEvents = True
End Subj'ai vu sur un forum qu'on pouvait faire comme ca :
Dim Cell As Range
Dim MyRangePart1 As Range
Dim MyRangePart2 As Range
Dim MyBigRange As Range
Set MyRangePart1 = Union(Range('A1'), Range('A10'), Range('TOTO'))
Set MyRangePart2 = Union(Range('B1'), Range('B10'))
Set MyBigRange = Union(MyRangePart1, MyRangePart2
ForEach Cell In MyBigRange
Cell.Interior.ColorIndex = 3
Next
mais je ne sait pas comment l'adapter a ma formule si tu peut m'aider ca serait sympa
merci
j'ai vu sur un forum qu'on pouvait faire comme ca :
Dim Cell As Range
Dim MyRangePart1 As Range
Dim MyRangePart2 As Range
Dim MyBigRange As Range
Set MyRangePart1 = Union(Range('A1'), Range('A10'), Range('TOTO'))
Set MyRangePart2 = Union(Range('B1'), Range('B10'))
Set MyBigRange = Union(MyRangePart1, MyRangePart2
ForEach Cell In MyBigRange
Cell.Interior.ColorIndex = 3
Next
mais je ne sait pas comment l'adapter a ma formule si tu peut m'aider ca serait sympa
merci