OVH Cloud OVH Cloud

Forcer valeur 1 ou 0 dans cellules.

9 réponses
Avatar
Quaisako
Bonsoir le Forum,

Dans une plage "B7:AExxxxxxx", certaines cellules ont pour valeur un "X".

Ces "X" sont des repères et doivent être remplacés par des "1" ou des "0".

En VBA, je souhaiterai forcer les cellules ayant un "X" à n'avoir pour autre
valeur que des "1" ou des "0" et interdire la saisie dans les autres
cellules.

Merci pour votre aide.
Jipé

9 réponses

Avatar
isabelle
bonjour Jipé,

Sub Macro1()
For Each c In Range("B7:B" & Range("B65536").End(xlUp).Row)
If c = "x" Then addr = addr & "," & c.Address
Next
addr = Right(addr, Len(addr) - 1)
Range(addr).Select
'_________________________________________
'efface la valeur "x" et met la cellule en bleu
Selection.Clear
Selection.Interior.ColorIndex = 34
'__________________________________________
With Selection.Validation
.Delete
.Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:="0", Formula2:="1"
.IgnoreBlank = False
.InCellDropdown = False
.InputTitle = ""
.ErrorTitle = "Attention"
.InputMessage = ""
.ErrorMessage = "vous devez saisir 1 ou 0 obligatoirement"
.ShowInput = True
.ShowError = True
End With
End Sub

isabelle




Bonsoir le Forum,

Dans une plage "B7:AExxxxxxx", certaines cellules ont pour valeur un "X".

Ces "X" sont des repères et doivent être remplacés par des "1" ou des "0".

En VBA, je souhaiterai forcer les cellules ayant un "X" à n'avoir pour autre
valeur que des "1" ou des "0" et interdire la saisie dans les autres
cellules.

Merci pour votre aide.
Jipé




Avatar
isabelle
correction,
il faut changer la plage :

Range("B7:B" & Range("B65536").End(xlUp).Row)
par
Range("B7:AE" & Range("AE65536").End(xlUp).Row)

isabelle


bonjour Jipé,

Sub Macro1()
For Each c In Range("B7:B" & Range("B65536").End(xlUp).Row)
If c = "x" Then addr = addr & "," & c.Address
Next
addr = Right(addr, Len(addr) - 1)
Range(addr).Select
'_________________________________________
'efface la valeur "x" et met la cellule en bleu
Selection.Clear
Selection.Interior.ColorIndex = 34
'__________________________________________
With Selection.Validation
.Delete
.Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:="0", Formula2:="1"
.IgnoreBlank = False
.InCellDropdown = False
.InputTitle = ""
.ErrorTitle = "Attention"
.InputMessage = ""
.ErrorMessage = "vous devez saisir 1 ou 0 obligatoirement"
.ShowInput = True
.ShowError = True
End With
End Sub

isabelle




Bonsoir le Forum,

Dans une plage "B7:AExxxxxxx", certaines cellules ont pour valeur un "X".

Ces "X" sont des repères et doivent être remplacés par des "1" ou des
"0".

En VBA, je souhaiterai forcer les cellules ayant un "X" à n'avoir pour
autre valeur que des "1" ou des "0" et interdire la saisie dans les
autres cellules.

Merci pour votre aide.
Jipé





Avatar
JB
Bonjour,


PJ :http://cjoint.com/?buheSMckpT

Crée des menus déroulants avec 0,1:

Sub CreeValidation()
For Each c In [B7:AE20]
If c.Value = "x" Then
With c.Validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop,
Operator:= _
xlBetween, Formula1:="0,1"
.InputMessage = "0 ou 1"
.ErrorMessage = "0 ou 1 seulement"
End With
End If
Next c
End Sub

Cordialement JB
Avatar
JB
-SI le no de la dernière ligne avec X de la colonne AE est supérieur
aux nos de dernière ligne des autres colonnes, on peut remplacer:

For Each c In Range([B7:AE20] par
For Each c In Range([B7], [AE65000].End(xlUp))

JB
Avatar
Quaisako
Bonjour le Forum,

Merci Isabelle, merci JB,
je pensais m'en sortir avec vos conseil et codes, mais c'est encore trop
pointu pour moi.

voici l'exemple.
http://cjoint.com/?bumdPMARF4

Jipé


"JB" a écrit dans le message de news:

-SI le no de la dernière ligne avec X de la colonne AE est supérieur
aux nos de dernière ligne des autres colonnes, on peut remplacer:

For Each c In Range([B7:AE20] par
For Each c In Range([B7], [AE65000].End(xlUp))

JB
Avatar
isabelle
bonjour Jipé,

j'ai ajouté la macro1 sur le classeur suivant et cela fonctionne.
du moins comme je crois que cela doit fonctionner.
dit moi ci tout est ok.

http://cjoint.com/?buoFLG1irP


isabelle

Bonjour le Forum,

Merci Isabelle, merci JB,
je pensais m'en sortir avec vos conseil et codes, mais c'est encore trop
pointu pour moi.

voici l'exemple.
http://cjoint.com/?bumdPMARF4

Jipé


"JB" a écrit dans le message de news:

-SI le no de la dernière ligne avec X de la colonne AE est supérieur
aux nos de dernière ligne des autres colonnes, on peut remplacer:

For Each c In Range([B7:AE20] par
For Each c In Range([B7], [AE65000].End(xlUp))

JB




Avatar
JB
Code dans Mod_JB

http://cjoint.com/?bupgmvZp87

JB
Avatar
Quaisako
Re à tous,

Isabelle, JB, je ne sais pas si vous pourrez améliorer encore vos codes,
mais, merci pour ce qui est déjà fait.
A ce niveau, je ne suis plus actif (manque de connaissances VBA)

Quelques soucis relevés.

========= Pour l'affichage des "1" et des "0" ======== Aucun souci lorsque un "1" est saisi.
Par contre lorsqu'il s'agit d'un "0", ce dernier n'apparait pas.
Pour cela il faut activer "Valeur zéro" dans Options.
----Est-il possible d'avoir l'option activée et du code pour ôter les "0"
des cellules où ils ne doivent pas paraitre ? ou une autre solution.

========= Pour les nouvelles lignes de notation ======== Lorsque je clique sur le Cmd "Nouvelle notation", la nouvelle ligne vient
normalement, mais si dans la ligne précédente, j'ai saisi des "1", il y a
une incrémentation dans la nouvelle ligne.

========= Cellules jaunes ========= Je ne devrais pas pouvoir saisir dans ces cellules.

========= Messages de saisie ======== J'avais mis un message de saisie dans chaque cellule de la 1ere ligne.
Ils ont disparu.

Jipé



"JB" a écrit dans le message de news:

Code dans Mod_JB

http://cjoint.com/?bupgmvZp87

JB



Avatar
Thierry
Bonjour à tous,

je ne sais pas si ce fil est toujours suivi, mais j'ai un peu progressé.

Le code ci-dessous écrit par Jacky, fait presque ce que je demandais.

Le seul hic, est qu'il faut absolument se positionner sur la dernière ligne
avant d'en insérer une autre. Je referais un fil pour avoir des explications
sur ce code.

Private Sub Cmd_Nouvelle_notation_Click()

Dim ZtNumLig As Integer
Dim ZtDerCol As Integer

ActiveCell.Range("A7").EntireRow.Insert
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig + 1, 1), Cells(ZtNumLig + 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol
If Not Cells(ZtNumLig + 1, i).HasFormula Then
Cells(ZtNumLig + 1, i).ClearContents
End If
Next i
ActiveCell.Range("A7").Select
End Sub

Encore merci, à tous
Jipé


"Quaisako" a écrit dans le message de news:

Re à tous,

Isabelle, JB, je ne sais pas si vous pourrez améliorer encore vos codes,
mais, merci pour ce qui est déjà fait.
A ce niveau, je ne suis plus actif (manque de connaissances VBA)

Quelques soucis relevés.

========= Pour l'affichage des "1" et des "0" ======== > Aucun souci lorsque un "1" est saisi.
Par contre lorsqu'il s'agit d'un "0", ce dernier n'apparait pas.
Pour cela il faut activer "Valeur zéro" dans Options.
----Est-il possible d'avoir l'option activée et du code pour ôter les "0"
des cellules où ils ne doivent pas paraitre ? ou une autre solution.

========= Pour les nouvelles lignes de notation ======== > Lorsque je clique sur le Cmd "Nouvelle notation", la nouvelle ligne vient
normalement, mais si dans la ligne précédente, j'ai saisi des "1", il y a
une incrémentation dans la nouvelle ligne.

========= Cellules jaunes ========= > Je ne devrais pas pouvoir saisir dans ces cellules.

========= Messages de saisie ======== > J'avais mis un message de saisie dans chaque cellule de la 1ere ligne.
Ils ont disparu.

Jipé



"JB" a écrit dans le message de news:

Code dans Mod_JB

http://cjoint.com/?bupgmvZp87

JB