Selectionner une ligne d'une plage donnée
seb
-
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
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
- Apparaitre hors ligne instagram - Guide
- Image de manchots sur une image de plage - Forum Musique / Radio / Clip
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