OVH Cloud OVH Cloud

Boucle

2 réponses
Avatar
nicolas65
Je suis à la recherche d'une solution pour transformer les codes suivant en
"boucle":

1°)
If ActiveSheet.Range("L50") = "" Then Rows("50:51").EntireRow.Hidden = True
If ActiveSheet.Range("L52") = "" Then Rows("52:53").EntireRow.Hidden = True
If ActiveSheet.Range("L54") = "" Then Rows("54:55").EntireRow.Hidden = True
If ActiveSheet.Range("L56") = "" Then Rows("56:57").EntireRow.Hidden = True
If ActiveSheet.Range("L58") = "" Then Rows("58:59").EntireRow.Hidden = True
If ActiveSheet.Range("L60") = "" Then Rows("60:61").EntireRow.Hidden = True
If ActiveSheet.Range("L62") = "" Then Rows("62:63").EntireRow.Hidden = True
If ActiveSheet.Range("L64") = "" Then Rows("64:65").EntireRow.Hidden = True
If ActiveSheet.Range("L66") = "" Then Rows("66:67").EntireRow.Hidden = True
If ActiveSheet.Range("L68") = "" Then Rows("68:69").EntireRow.Hidden = True

...

2°)J'ai récupéré un bout de code sur Internet qui m'avait paru intéressant
afin de "protéger" le modèle que je suis en train de créer de Facture
Devis. Je ne souhaitais pas en effet utiliser la protection excel car
elle est trop facilement enlevable avec des logiciels comme Acyd mais
seulement protéger mon modèle contre de maunvaises manipulations en
empechant de sélectionner une ou plusiseur cellules. Malhuereusement je
ne suis pas capable d'adapter ce code tout à fait à mon problème. Le
code était le suivant:

If ActiveCell.Address = "$O$37" Then ActiveCell.Offset(0, -6).Select

Comment dois je faire si je veux "protéger" toute une plage par exemple
de O37 à O57 autrement qu'en "recopiant" plusierus fois la formule ?
Peut-on transformer cette formule en boucle dont la traduction
française serait: tant que l'utilisateut sélectionne une cellule
comprise entre O37 et O57 alors se déplacer en colonne B sur la même
ligne ?

Merci

2 réponses

Avatar
anomymousA
bonjour,

Set plage = Cells(50, 12)
For I = 1 To 9
Set plage = Union(Cells(50 + 2 * I, 12), plage)
Next

For Each c In plage

If IsEmpty(c) Then Range(c, c.Offset(1, 0)).EntireRow.Hidden = True

Next

Pour le déplacement automatique, la proc suivante à mettre dans le module de
feuille concerné

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Intersect(Range("O37:O57"), Target) Is Nothing Then
Target.Offset(0, -13).Activate
End If

End Sub

A+


Je suis à la recherche d'une solution pour transformer les codes suivant en
"boucle":

1°)
If ActiveSheet.Range("L50") = "" Then Rows("50:51").EntireRow.Hidden = True
If ActiveSheet.Range("L52") = "" Then Rows("52:53").EntireRow.Hidden = True
If ActiveSheet.Range("L54") = "" Then Rows("54:55").EntireRow.Hidden = True
If ActiveSheet.Range("L56") = "" Then Rows("56:57").EntireRow.Hidden = True
If ActiveSheet.Range("L58") = "" Then Rows("58:59").EntireRow.Hidden = True
If ActiveSheet.Range("L60") = "" Then Rows("60:61").EntireRow.Hidden = True
If ActiveSheet.Range("L62") = "" Then Rows("62:63").EntireRow.Hidden = True
If ActiveSheet.Range("L64") = "" Then Rows("64:65").EntireRow.Hidden = True
If ActiveSheet.Range("L66") = "" Then Rows("66:67").EntireRow.Hidden = True
If ActiveSheet.Range("L68") = "" Then Rows("68:69").EntireRow.Hidden = True

...

2°)J'ai récupéré un bout de code sur Internet qui m'avait paru intéressant
afin de "protéger" le modèle que je suis en train de créer de Facture
Devis. Je ne souhaitais pas en effet utiliser la protection excel car
elle est trop facilement enlevable avec des logiciels comme Acyd mais
seulement protéger mon modèle contre de maunvaises manipulations en
empechant de sélectionner une ou plusiseur cellules. Malhuereusement je
ne suis pas capable d'adapter ce code tout à fait à mon problème. Le
code était le suivant:

If ActiveCell.Address = "$O$37" Then ActiveCell.Offset(0, -6).Select

Comment dois je faire si je veux "protéger" toute une plage par exemple
de O37 à O57 autrement qu'en "recopiant" plusierus fois la formule ?
Peut-on transformer cette formule en boucle dont la traduction
française serait: tant que l'utilisateut sélectionne une cellule
comprise entre O37 et O57 alors se déplacer en colonne B sur la même
ligne ?

Merci


Avatar
nicolas65
Merci pour votre rapidité.


bonjour,

Set plage = Cells(50, 12)
For I = 1 To 9
Set plage = Union(Cells(50 + 2 * I, 12), plage)
Next

For Each c In plage

If IsEmpty(c) Then Range(c, c.Offset(1, 0)).EntireRow.Hidden = True

Next

Pour le déplacement automatique, la proc suivante à mettre dans le module de
feuille concerné

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Intersect(Range("O37:O57"), Target) Is Nothing Then
Target.Offset(0, -13).Activate
End If

End Sub

A+


Je suis à la recherche d'une solution pour transformer les codes suivant en
"boucle":

1°)
If ActiveSheet.Range("L50") = "" Then Rows("50:51").EntireRow.Hidden = True
If ActiveSheet.Range("L52") = "" Then Rows("52:53").EntireRow.Hidden = True
If ActiveSheet.Range("L54") = "" Then Rows("54:55").EntireRow.Hidden = True
If ActiveSheet.Range("L56") = "" Then Rows("56:57").EntireRow.Hidden = True
If ActiveSheet.Range("L58") = "" Then Rows("58:59").EntireRow.Hidden = True
If ActiveSheet.Range("L60") = "" Then Rows("60:61").EntireRow.Hidden = True
If ActiveSheet.Range("L62") = "" Then Rows("62:63").EntireRow.Hidden = True
If ActiveSheet.Range("L64") = "" Then Rows("64:65").EntireRow.Hidden = True
If ActiveSheet.Range("L66") = "" Then Rows("66:67").EntireRow.Hidden = True
If ActiveSheet.Range("L68") = "" Then Rows("68:69").EntireRow.Hidden = True

...

2°)J'ai récupéré un bout de code sur Internet qui m'avait paru intéressant
afin de "protéger" le modèle que je suis en train de créer de Facture
Devis. Je ne souhaitais pas en effet utiliser la protection excel car
elle est trop facilement enlevable avec des logiciels comme Acyd mais
seulement protéger mon modèle contre de maunvaises manipulations en
empechant de sélectionner une ou plusiseur cellules. Malhuereusement je
ne suis pas capable d'adapter ce code tout à fait à mon problème. Le
code était le suivant:

If ActiveCell.Address = "$O$37" Then ActiveCell.Offset(0, -6).Select

Comment dois je faire si je veux "protéger" toute une plage par exemple
de O37 à O57 autrement qu'en "recopiant" plusierus fois la formule ?
Peut-on transformer cette formule en boucle dont la traduction
française serait: tant que l'utilisateut sélectionne une cellule
comprise entre O37 et O57 alors se déplacer en colonne B sur la même
ligne ?

Merci