Condition de saisie dans une cellule + validation

mathiouze

XLDnaute Nouveau
Bonjour à tous,

Ca fait longtemps que je n'ai pas eu l'occasion de venir sur le forum et de retoucher à VBA et il se trouve que même à l'époque où j'en faisais je n'ai jamais abordé ce problème, alors peut être pourrez-vous m'aider?

Dans une colonne, j'ai appliqué une validation avec un mini et un maxi mais je souhaiterais rajouter en plus une autre condition pour la saisie qui serait:
si la valeur de la cellule de gauche ou de droite est = à "X" alors j'interdis la saisie dans la cellule.

Pensez-vous que ce soit possible?

Merci ^^
 

porcinet82

XLDnaute Barbatruc
Re : Condition de saisie dans une cellule + validation

Salut,

C'est possible avec un code vba via une macro evenementielle, c'est a dire qui se declenche sur une action dans une feuille.
Par exemple, apres avoir enlevé ta validation, essais de mettre ca dans le module de la feuille concernée :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value < 1000 And Target.Value > 100 Then
    If Target.Offset(0, 1) = "X" Or Target.Offset(0, -1) = "X" Then
        MsgBox "ton message d'erreur", vbCritical + vbOKOnly, "ton_titre"
    End If
Else
    MsgBox "ton message d'erreur", vbCritical + vbOKOnly, "ton_titre"
End If
End Sub

@+
 

mathiouze

XLDnaute Nouveau
Re : Condition de saisie dans une cellule + validation

je suis désolé je me remets dedans progressivement et j'arrive à comprendre à peut près ton code mais faut-il que je définisse le range de target d'abord ou pas?
d'autant plus que je n'ai jamais codé cette foncion...
en fait le "Private Sub Worksheet_Change(ByVal Target As Range)" analyse chaque changement de cellule c'est ça?

si oui, peux tu me rappeler comment le faire?

Merci
 
Dernière édition:

porcinet82

XLDnaute Barbatruc
Re : Condition de saisie dans une cellule + validation

Salut,

Qu'est ce que tu entends par le range de target ?
Target reprend les coordonnées de la cellule que tu modifies, donc a partir de la, pas de range a definir...
Apres, peut etre que tu veux parler d'une zone sur laquelle la macro est active. A ce moment la, utilises un truc du genre :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:F50")) Is Nothing Then
    If Target.Value < 1000 And Target.Value > 100 Then
        If Target.Offset(0, 1) = "X" Or Target.Offset(0, -1) = "X" Then
            MsgBox "ton message d'erreur", vbCritical + vbOKOnly, "ton_titre"
        End If
    Else
        MsgBox "ton message d'erreur", vbCritical + vbOKOnly, "ton_titre"
    End If
End If
End Sub

Worksheet_Change se lance a chaque fois que tu rentres dans une cellule (i.e. lorsque le curseur est actif dans la cellule)
En espérant ne pas avoir tapé a coté...

@+
 

mathiouze

XLDnaute Nouveau
Re : Condition de saisie dans une cellule + validation

En l'adaptant à ma problématique ca donne ça mais cela ne marche pas :s
(c18:c23) étant la plage sur laquelle je souhaite que cela soit actif

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("c18:c23")) Is Nothing Then
    If Target.Value <> 0 Then
        If Target.Offset(0, 1) = "X" Then
            MsgBox "ton message d'erreur", vbCritical + vbOKOnly, "ton_titre"
        End If
    Else
        MsgBox "ton message d'erreur", vbCritical + vbOKOnly, "ton_titre"
    End If
End If
End Sub
ou alors peut être que je me suis mal expliqué,
je veux que si la cellule de droite comporte déjà un X, on ne puisse pas entrer d'information dans la cellule de gauche
 

porcinet82

XLDnaute Barbatruc
Re : Condition de saisie dans une cellule + validation

re,

Je ne comprend pas car chez moi ca fonctionne parfaitement. Tu as bien mis le code dans le module de la feuille concernée ?
Au cas ou, click droit que l'onglet, visualiser le code et coller le code.

@+
 

mathiouze

XLDnaute Nouveau
Re : Condition de saisie dans une cellule + validation

dernière question:
voila le code une fois que je l'ai adapté, tout marche mais j'ai un dernier problème
quand je veux supprimer les données des cellules concernées par le target, par exemple de d18:d20, ca me donne une erreur d'éxécution 13 - incompatibilité de type

why? :(

Code:
Private Sub Worksheet_change(ByVal Target As Range)
If Not Intersect(Target, Range("c18:d23,c29:d34,c40:d45,c51:d56,c62:d67,c73:d78,c84:d89,c95:d100,c106:d111,c117:d122,c128:d133,c139:d144,c150:d155,c161:d166,c172:d177")) Is Nothing Then
    If Target.Value <> 0 And Target.Column = 3 Then
        If Target.Offset(0, 4) <> 0 Or Target.Offset(0, 5) <> 0 Then
            MsgBox "Une référence pour un box mis à niveau est déjà renseignée", vbcritidal + vbOKOnly, "Erreur"
        Target.ClearContents
        End If
        Else
        If Target.Value <> 0 And Target.Column = 4 Then
        If Target.Offset(0, 3) <> 0 Or Target.Offset(0, 4) <> 0 Then
            MsgBox "Une référence pour un box mis à niveau est déjà renseignée", vbcritidal + vbOKOnly, "Erreur"
        Target.ClearContents
        End If
        Else
    
        End If
    End If
End If
End Sub
 
Dernière édition:

porcinet82

XLDnaute Barbatruc
Re : Condition de saisie dans une cellule + validation

re,

Essais comme ceci :
Code:
Private Sub Worksheet_change(ByVal Target As Range)
If Not Intersect(Target, Range("c18:d23,c29:d34,c40:d45,c51:d56,c62:d67,c73:d78,c84:d89,c95:d100,c106:d111,c117:d122,c128:d133,c139:d144,c150:d155,c161:d166,c172:d177")) Is Nothing Then
    If Target.Count = 1 Then
        If Target.Value <> 0 And Target.Column = 3 Then
            If Target.Offset(0, 4) <> 0 Or Target.Offset(0, 5) <> 0 Then
                MsgBox "Une référence pour un box mis à niveau est déjà renseignée", vbcritidal + vbOKOnly, "Erreur"
            Target.ClearContents
            End If
            Else
            If Target.Value <> 0 And Target.Column = 4 Then
            If Target.Offset(0, 3) <> 0 Or Target.Offset(0, 4) <> 0 Then
                MsgBox "Une référence pour un box mis à niveau est déjà renseignée", vbcritidal + vbOKOnly, "Erreur"
            Target.ClearContents
            End If
            Else
        
            End If
        End If
    End If
End If
End Sub

@+
 

porcinet82

XLDnaute Barbatruc
Re : Condition de saisie dans une cellule + validation

re,

Bien sur que je peux !!!
En fait, il s'agit de vérifier que le target est constitué d'une seule cellule et pas d'une plage. Donc en mettant Target.Count, on regarde combien de cellule sont comptabilisées dans le Target.
En faite, ca plantait au départ car dans le code on faisait une vérif sur le target.value. Or comme il s'agit d'une plage, on ne peut pas faire de .value directement...

@+
 

Cousinhub

XLDnaute Barbatruc
Re : Condition de saisie dans une cellule + validation

Bonjour le fil,

Pssst, Porcinet, tu as eu de la chance que ce soit en colonne C et au delà la zone de travail...::cool:
Car :

Code:
If Not Intersect(Target, Range("A1:F50")) Is Nothing Then
    If Target.Value < 1000 And Target.Value > 100 Then
        If Target.Offset(0, 1) = "X" Or Target.Offset(0, -1) = "X" Then

Un If Target.Column>1 aurait été bien vu, tu ne crois pas?

sinon le Target.Offset(0, -1) t'aurait proprement injurié, dans le cas de A1 à Axxx......:D:D

Bon après-midi quand même ;)
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 453
Messages
2 088 550
Membres
103 881
dernier inscrit
malbousquet