macro pour verrouiller des lignes sous condition

M

man

Guest
Bonjour à tous,

je fais encore une demande de bouillie prédigérée pour chat débile, mais même ça je ne suis pas capable de le réaliser...

Dans une feuille, je cherche à verrouiller des lignes depuis la ligne 1 jusquà la derniere ligne qui contient une valeur soit dans la colonne D soit dans E.

NB : les lignes sont triées dans ma macro, donc toutes les lignes qui ne contiennent rien en D ou E ou qui sont carrement vierges sont forcement après toutes les lignes qui contiennent des valeurs en D ou E.

Bon ap à tous.
 
Z

Zon

Guest
Salut Man et le forum,

Un scrollarea ne t'irais pour bloquer l'utilisateur, à mettre dans l'évènement activate de ta feuille ou dans open de ton workbook

With sheets("TaFeuille")
.scrollarea="A1:C65536"
end with

A+++
 
M

man

Guest
bonjour Zon, le forum,

merci pour ta reponse.
j'ai essayer de comprendre ce que tu me proprose et à ma connaissance le scrollaera correspond à la barre de defilement.
ça consisterai donc à cacher une partie de l'ecran par ce biais si j'ai bien compris ?
je n'ai pas réussi à faire fonctionner ce code mais je pense qu'une macro qui verrouillerai chaque ligne de 1 à 65536 si les celules D ou E correspondantes contiennnent une valeur me conviendrai mieux.
le probleme est que je ne sais pas mettre en forme cette macro à base de variable.
 
M

man

Guest
bonsoir le forum,

grace à l'exemple de solution proposée sur ce forum j'ai trouvé une manière de faire ce que je voulais merci donc à tous.


pour verouiller toutes les lignes qui contiennent une valeur en D ou E:

For i = 1 To 65536
If Not IsEmpty(Cells(i, 4)) Or Not IsEmpty(Cells(i, 5)) Then
Rows(i).Locked = True
End If
Next i

@+
 
M

man

Guest
re le forum

mais j'ai oublié de dire que cela ralenti la macro donc si quelqu'un connait un procédure plus rapide, j'enrichirai mes connaissance.

exemple : vu que les lignes sont triées et que celles qui contiennent une valeur en D ou E sont en premiers,
une selection de la ligne 1 jusqu'à la derniere qui contient une valeur en D ou E,
puis un verrouilage de la selection me semblerait plus rapide qu'une procédure ligne par ligne comme je l'ai fait...

@+
 
Z

Zon

Guest
Salut Man et le forum,

Comme tu tries tes lignes, tu peux utiliser [D65536].end(xlup).row pour récupérer le N° de la derniere ligne utilisée comme suit

if [D65536].end(xlup).row>[E65536].end(xlup).row then
rows("1;&[D65536].end(xlup).row).Locked = True
else
rows("1;&[E65536].end(xlup).row).Locked = True
end if


A+++
 
M

man

Guest
bonsoir zon, le forum

merci pour ton aide Zon.
j'ai rajouté les " qui me semblaientt manqués après "row" car sans cela le code apparaisssait en rouge.
Mais malheureusement, avec ou sans ces ", cela me renvoie erreur 13 et d'après ce que j'ai compris de la description de cette erreur cela viendrai du fait que j'ai excel 97...

voila ce que j'ai mis et qui me renvoie erreur 13:

If [D65536].End(xlUp).Row > [E65536].End(xlUp).Row Then
Rows("1;&[D65536].end(xlup).row").Locked = True
Else
Rows("1;&[E65536].end(xlup).row").Locked = True
End If
 
Z

Zon

Guest
Salut Man,

désolé plutôt cette syntaxe rows("1:"&[D65536].end(xlup).row).Locked = True; les : et les guillemets.
Avec XL97 si tu as une erreur 1004 par la suite ,testes le takefocusonclick=false dans ton bouton de controle qui te lance la procédure, au pire mets du select.

A+++
 

Discussions similaires

Statistiques des forums

Discussions
314 135
Messages
2 106 249
Membres
109 546
dernier inscrit
gbbob