Selectionner une ligne d'une plage donnée
seb
-
Patrice33740 Messages postés 8930 Statut Membre -
Patrice33740 Messages postés 8930 Statut Membre -
Bonjour à toutes et à tous,
Voila, j'ai effectuer plusieurs recherche sur le net et sur différents forum mais je n'est pas trouver ma réponse.
A l'aide du VBA, je souhaite, dans une plage donnée, sélectionner la ligne qui ce trouve en face d'un mot définie.
J'ai déjà réussi a faire quelque chose mais le problème, c'est que ca sélectionne toute la colonne et non ma plage.
un aperçu de ce que j'ai réalisé:
"
Sub verrouillage()
'------------------------------------------------------- declaration des variable
Dim plage As Range
Set plage = Range("g7:h9,g13:h15,g19:h21")
'plage.Select
Dim i As Integer
i = 1
'------------------------------------------------------- boucle sur les ligne 7 a 21
For i = 7 To 21
Application.ScreenUpdating = False '------------ desactivation de la mise à jour
'------------------------------------------------------- condition "si vrai"
If Range("j" & i).Value Like "FERIE" Then '- recherche dans la colonne J la valeur "FERIE"
With ActiveSheet '-------------------------- active la feuille
.Unprotect Password:="123" '---------------- désactive la protection de feuille
Range("g" & i, "h" & i).Select
Range("g" & i, "h" & i).Locked = True '----- selectionne les cellules en face du "FERIE" et les rends verrouiller
'ActiveCell.EntireRow.Locked = True
'Range(plage & i).Locked = True
.Protect Password:="123" '------------------ active la protection de feuille
End With
'------------------------------------------------------- condition "si faux"
Else
With ActiveSheet '-------------------------- active la feuille
.Unprotect Password:="123" '---------------- désactive la protection de feuille
Range("g" & i, "h" & i).Locked = False '---- selectionne les cellules en face du "FERIE" et les rends déverrouiller
'ActiveCell.EntireRow.Locked = False
'Range(plage & i).Locked = False
.Protect Password:="123" '------------------ active la protection de feuille
End With
'------------------------------------------------------- fin de la condition If
End If
'------------------------------------------------------- fin de la boucle
Next
Application.ScreenUpdating = True '----------------- activation de la mise à jour
End Sub
"
Je vous remercie de l'aide que vous allez m'apporter.
Seb
excel office Pro Plus 2013
Voila, j'ai effectuer plusieurs recherche sur le net et sur différents forum mais je n'est pas trouver ma réponse.
A l'aide du VBA, je souhaite, dans une plage donnée, sélectionner la ligne qui ce trouve en face d'un mot définie.
J'ai déjà réussi a faire quelque chose mais le problème, c'est que ca sélectionne toute la colonne et non ma plage.
un aperçu de ce que j'ai réalisé:
"
Sub verrouillage()
'------------------------------------------------------- declaration des variable
Dim plage As Range
Set plage = Range("g7:h9,g13:h15,g19:h21")
'plage.Select
Dim i As Integer
i = 1
'------------------------------------------------------- boucle sur les ligne 7 a 21
For i = 7 To 21
Application.ScreenUpdating = False '------------ desactivation de la mise à jour
'------------------------------------------------------- condition "si vrai"
If Range("j" & i).Value Like "FERIE" Then '- recherche dans la colonne J la valeur "FERIE"
With ActiveSheet '-------------------------- active la feuille
.Unprotect Password:="123" '---------------- désactive la protection de feuille
Range("g" & i, "h" & i).Select
Range("g" & i, "h" & i).Locked = True '----- selectionne les cellules en face du "FERIE" et les rends verrouiller
'ActiveCell.EntireRow.Locked = True
'Range(plage & i).Locked = True
.Protect Password:="123" '------------------ active la protection de feuille
End With
'------------------------------------------------------- condition "si faux"
Else
With ActiveSheet '-------------------------- active la feuille
.Unprotect Password:="123" '---------------- désactive la protection de feuille
Range("g" & i, "h" & i).Locked = False '---- selectionne les cellules en face du "FERIE" et les rends déverrouiller
'ActiveCell.EntireRow.Locked = False
'Range(plage & i).Locked = False
.Protect Password:="123" '------------------ active la protection de feuille
End With
'------------------------------------------------------- fin de la condition If
End If
'------------------------------------------------------- fin de la boucle
Next
Application.ScreenUpdating = True '----------------- activation de la mise à jour
End Sub
"
Je vous remercie de l'aide que vous allez m'apporter.
Seb
excel office Pro Plus 2013
A voir également:
- Selectionner une ligne d'une plage donnée
- Partager photos en ligne - Guide
- Mètre en ligne - Guide
- Aller à la ligne dans une cellule excel - Guide
- Formulaire en ligne de meta - Guide
- Apparaitre hors ligne instagram - Guide
3 réponses
Bonjour,
Sélectionner dans quel but ?
En général sélectionner est toujours une mauvaise méthode.
Pour chercher FERIE dans la colonne J la méthode FIND est bien plus rapide qu'une boucle sur toutes les cellules.
Sélectionner dans quel but ?
En général sélectionner est toujours une mauvaise méthode.
Pour chercher FERIE dans la colonne J la méthode FIND est bien plus rapide qu'une boucle sur toutes les cellules.
Bonjour et merci de prendre le temps de me répondre,
En faite, sélectionner les cellules qui ce trouvent en face de "FERIE" me permets de faire 2 choses.
- Soit "FERIE" est présent, alors les cellules sont verrouillées (et donc "immodifiable").
- Soit "FERIE" n'est pas présent, et là, les cellules sont déverrouillées (et donc "modifiable").
cordialement,
Séb
En faite, sélectionner les cellules qui ce trouvent en face de "FERIE" me permets de faire 2 choses.
- Soit "FERIE" est présent, alors les cellules sont verrouillées (et donc "immodifiable").
- Soit "FERIE" n'est pas présent, et là, les cellules sont déverrouillées (et donc "modifiable").
cordialement,
Séb
Bonjour,
Essaies :
Pas besoin de sélectionner quoi que ce soit !
Essaies :
Option Explicit
Public Sub verrouillage()
' Déclaration des variable
Dim plage As Range
Dim ferie As Range
Dim adresse As String
' Initialisation des varaibles
Set plage = ActiveSheet.Range("J7:J21")
' Déverrouiller toutes les cellules (soit la plage G7:H21)
plage.Offset(0, -3).Resize(, 2).Locked = False
' Chercher la première cellule contenant FERIE
Set ferie = plage.Find("FERIE", , xlValues, xlPart)
'ou .Find("FERIE", , xlValues, xlWhole)
'pour chercher la valeur exacte.
If Not ferie Is Nothing Then
' Si elle existe, noter son adresse
adresse = ferie.Address
' Déprotéger la feuille
ActiveSheet.Unprotect 'Inutile de mettre un mot de passe qui
'apparaît en clair dans la macro !!!
Do
' Verrouiller les cellules G:H de la ligne
ferie.Offset(0, -3).Resize(, 2).Locked = True
' Chercher le FERIE suivant
Set ferie = plage.FindNext(ferie)
Loop While ferie.Address <> adresse 'Boucler tant qu'on n'est
'pas revenu à la 1° cellule
' Protéger la feuille
ActiveSheet.Protect
End If
End Sub
Pas besoin de sélectionner quoi que ce soit !
Effectivement, désolé, il faut déprotéger la feuille avant :
Public Sub verrouillage()
' Déclaration des variable
Dim plage As Range
Dim ferie As Range
Dim adresse As String
' Initialisation des variables
Set plage = ActiveSheet.Range("J7:J21")
' Déprotéger la feuille
ActiveSheet.Unprotect 'Inutile de mettre un mot de passe qui
'apparaît en clair dans la macro !!!
' Déverrouiller toutes les cellules (soit la plage G7:H21)
plage.Offset(0, -3).Resize(, 2).Locked = False
' Chercher la première cellule contenant FERIE
Set ferie = plage.Find("FERIE", , xlValues, xlPart)
'ou .Find("FERIE", , xlValues, xlWhole)
'pour chercher la valeur exacte.
If Not ferie Is Nothing Then
' Si elle existe, noter son adresse
adresse = ferie.Address
Do
' Verrouiller les cellules G:H de la ligne
ferie.Offset(0, -3).Resize(, 2).Locked = True
' Chercher le FERIE suivant
Set ferie = plage.FindNext(ferie)
Loop While ferie.Address <> adresse 'Boucler tant qu'on n'est
'pas revenu à la 1° cellule
End If
' Protéger la feuille
ActiveSheet.Protect
End Sub
Il faut traiter chaque zone :
Public Sub verrouillage()
Dim plage As Range
Dim zone As Range
Dim ferie As Range
Dim adresse As String
Set plage = ActiveSheet.Range("J7:J9,J13:J15,J19:J21")
ActiveSheet.Unprotect
For Each zone In plage.Areas
zone.Offset(0, -3).Resize(, 2).Locked = False
Next zone
Set ferie = plage.Find("FERIE", , xlValues, xlPart)
If Not ferie Is Nothing Then
adresse = ferie.Address
Do
ferie.Offset(0, -3).Resize(, 2).Locked = True
Set ferie = plage.FindNext(ferie)
Loop While ferie.Address <> adresse
End If
ActiveSheet.Protect
End Sub