Vérifier la valeur des cellule dans une ligne

Résolu/Fermé
zahr kall Messages postés 62 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 28 septembre 2009 - 24 oct. 2008 à 16:21
zahr kall Messages postés 62 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 28 septembre 2009 - 26 oct. 2008 à 01:21
Bonjour à tous,

Je suis entrain de réaliser un tableau excel et je bloque sur un problème :

Je souhaite vérifier la valeur des cellules dans une ligne (de A89 à Z89) et bloquer les colonnes dont la valeur de ces cellules est égale à 0.
Comme je débute en vba, je n'arrive pas à bout de ce problème. J'ai compris qu'il me faut lancer une boucle (For...next?), mais ça ne donne rien pour le moment.
Merci d'avance à ceux qui pourront m'éclairer!!
Bonne journée.
A voir également:

10 réponses

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
24 oct. 2008 à 16:52
Bonjour,

Ce petit bout de code devrait t'aider :

Dim ws As Worksheet
Dim col As Integer
Dim lig As Integer

    Set ws = Worksheets(1)
    lig = 89
    
    For col = 1 To 26
        If ws.Cells(lig, col).Value = 0 Then
            ws.Columns(col).EntireColumn.Hidden = True
        End If
    Next col
    
    Set ws = Nothing

Bon courage

;o)

Polux
-1
zahr kall Messages postés 62 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 28 septembre 2009 10
24 oct. 2008 à 17:23
merci beaucoup,
ça marche presque!!

le soucis qu'il me reste, c'est qu'au lieu de mettre "ws.Columns(col).EntireColumn.Hidden = True,
je voudrais quelques chose comme ws.Columns(col).EntireColumn.locked = True.
Sauf que là, forcément, ça ne marche pas!! :(
j'ai tenté plusieurs formules, mais en vain.
Je vais continuer à chercher chez moi, car là, c'est pour mon boulot et j'ai fini ma semaine !!^^

Merci encore pour ce gros coup d'main!
bon week end.
-1
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
24 oct. 2008 à 19:49
Bonsoir,

par défaut toutes les cellules d'une feuille sont verrouillées.
Il faut activer la protection pour que ce soit actif (menu 'outil / protection')
N'oublie pas de déverrouiller les cellules devant avoir une saisie...
eric
-1
zahr kall Messages postés 62 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 28 septembre 2009 10
24 oct. 2008 à 20:07
Justement,

je vérouille des cellules, puis j'en déverrouille d'autres. C'est assez le bazard, car c'est un tableau de saisie que je met à dispo pour tous mes collaborateurs et j'ai mis pleins de contrôles pour éviter qu'un collaborateur saisisse à la place d'un autre. Bref, voici la ligne de commande lorsque que la vérification du collaborateur est faite (avec son "matricule") :

Private Sub valider_btn_Click()

If matricule.Value = "" Then

MsgBox "vous n'avez pas saisi votre matricule."

ElseIf ActiveCell.Offset(0, 251).Value = Int(matricule.Value) Then

ActiveSheet.Unprotect Password:="XXX"

Range(Trim(Str(ActiveCell.Row)) & ":" & Trim(Str(ActiveCell.Row))).Select

Selection.Locked = False
Selection.FormulaHidden = False

Application.Goto reference:="r1c2"
ActiveCell.Offset(0, 0).Value = Int(matricule.Value)

Range("C2").Value = Range("c2").Value + 1


Dim ws As Worksheet
Dim col As Integer
Dim lig As Integer

Set ws = Worksheets(1)
lig = 89

For col = 1 To 212
If ws.Cells(lig, col).Value = 0 Then
ws.Columns(col).Locked = True
End If
Next col

Set ws = Nothing





Application.Goto reference:="r6c5"
ActiveSheet.Protect Password:=XXX", DrawingObjects:=True, Contents:=True, Scenarios:=True

Unload Verif




MsgBox "saisissez vos souhaits maintenant en notant 'CP' ou 'RTT' sur les jours choisis."


Else

MsgBox "vous n'avez pas bien saisi votre matricule."

End If

End Sub



voilà où j'en suis. Si t'as une idée pour me permettre de revérrouiller les colonnes concernées, ce serait vraiment génial. là, ça ne marche toujours pas et je ne sais plus trop quoi faire...
-1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
24 oct. 2008 à 20:17
Ben si ça marche, pourquoi ça ne marcherait pas ? (pour la partie en gras en tout cas...)
Et si tu précisais ce qui te fais dire que ça ne marche pas ?
Qu'est-ce que tu veux obtenir exactement ?
Remarque là tu verrouilles si 0 ou "", c'est ça qui te gene ?
-1
zahr kall Messages postés 62 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 28 septembre 2009 10
24 oct. 2008 à 23:39
Non, ce qui me gêne, c'est que lorsque je clique sur mon bouton valider j'ai ce message qui apparait :

Erreur d'exécution '1004':
Impossible de définir la propriété Locked de la classe Range


Et dans la macro, la ligne ws.Columns(col).Locked = True apparait en surligné, comme si c'est cette ligne qui pose problème.

Et c'est donc mon problème, car pour moi ma ligne de commande est bonne.
-1
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
25 oct. 2008 à 09:06
Bonjour,

j'ai testé chez moi je n'ai pas cette erreur ici...
Regarde quand même quelle est la valeur de col au moment de cette erreur des fois qu'elle soit modifiée par une macro evenement.
eric
-1
zahr kall Messages postés 62 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 28 septembre 2009 10
25 oct. 2008 à 11:36
Salut,
je ne sais pas faire ce que tu me demandes : vérifier la valeur de col...
je vais regarder si j'y arrive quand même
-1
zahr kall Messages postés 62 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 28 septembre 2009 10
25 oct. 2008 à 11:53
Désolé pour le double post, mais j'ai trouvé entre temps :

Dim ws As Worksheet
Dim col As Integer
Dim lig As Integer

Set ws = Worksheets(1)
lig = 89

For col = 1 To 212
If ws.Cells(lig, col).Value = 0 Then
MsgBox ("valeur de col :" & col & "!")
ws.Columns(col).Locked = True
End If
Next col

Et avec ce message, pour le moment, j'ai "1" puis "3". Donc je pense que mon problème apparait à la colonne 3 ou 4.
Il ne me reste plus qu'à voir ce qu'il en est. c'est pas gagné...
-1
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
25 oct. 2008 à 17:48
-pour voir la valeur d'une variable tu fais 'affichage / fenetre espions', tu sélectionnes ta variable dans le code et tu fais un cliqué-glissé vers la fenetre espion.
-ou bien tu poses le curseur souris sur le nom de la variable dans le code, au bout d'une temporisation sa valeur (si elle a été évaluée) apparait
-tu peux poser un point d'arret dans le programme pour qu'il s'arrete à cette ligne : cliquer dans la marge grise à gauche du code, ta ligne passe en marron et un point marron apparait dans la marge.
- à partir du point d'arret tu peut faire en pas à pas avec F8 et suivre l'évolution de tes variables.
-F5 relance le programme en abandonnant le pas à pas (jusqu'au prochain point d'arret
eric
-1
zahr kall Messages postés 62 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 28 septembre 2009 10
26 oct. 2008 à 01:21
ça y est!!! le problème venait de la fusion de plusieurs cellules, hors tableau (ligne 96, alors que le tableau était jusqu'à la ligne 89). du coup, je n'avais pas fait attention...
Bref, maintenant tout fonctionne.
Encore merci pour l'aide et le temps passé pour m'aider.
c'est vraiment sympa.
Bonne soirée et bon week end.
-1