Vérification d'une plage de cellule par une macro

LeZéro

XLDnaute Nouveau
D'abord bonjour à tous, je me présente LeZéro, stagiaire débutant sur Excel et super débutant en VBA ! :p

Entrons dans le vif du sujet. On me demande de protéger une plage de cellule de la manière suivante :

Pour chaque ligne (1403 sur cette plage) il faut que la valeur X ne soit présente au maximum q'une fois (sur la ligne).
que la valeur S ne soit pas présente si la valeur X n'est pas déjà sur la ligne.

Pour éviter les doublons (soit la première condition), j'ai réussi à trouver une solution avec la validation des données personnalisée et la formule "NB.SI". Or, celle ci ne marche plus lorsqu'il s'agit de la faire fonctionner en enregistrant une macro avec cette manip (erreur 1004). Mais le problème c'est que je ne me vois pas répéter l'opération pour chacune des 1403 lignes de cette plage : il faut faire une boucle (enfin je crois).

Pour la deuxième condition, après avoir trimé sur les moteurs de recherches et autres forums, je ne trouve rien.

Votre aide me serait extrêmement précieuse ! Merci d'avance.
 

pierrejean

XLDnaute Barbatruc
Re : Vérification d'une plage de cellule par une macro

bonjour LeZero

Salut Tototiti

Une solution par macro evenementielle:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column > 12 And Target.Column < 49 Then
  For n = 13 To 48
    If n = Target.Column Then n = n + 1
   If UCase(Cells(Target.Row, n)) = "X" Then
    dejax = True
    Exit For
   End If
  Next n
Select Case UCase(Target.Value)
 Case "X"
   If dejax Then
     MsgBox ("Désolé il y a deja un X sur laligne")
     Target.Value = ""
   End If
 Case "S"
   If Not dejax Then
     MsgBox ("Il n'y a pas de X sur cette ligne donc pas de S !!")
     Target.Value = ""
   End If
End Select
End If
End Sub
 

Pièces jointes

  • LeZero.zip
    7.6 KB · Affichages: 50

LeZéro

XLDnaute Nouveau
Re : Vérification d'une plage de cellule par une macro

Il ne me reste plus qu'à vous tirer mon chapeau Pierre Jean ! :D Merci, je vous dois une fière chandelle (c'est que je commençais à être dans le pétrin, moi !).

...Woup, après un test sur ma feuille cela ne marche plus ! Etrange !
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Vérification d'une plage de cellule par une macro

Bonjour Pierre Jean,

ou alors par validation de données : (en partant du principe que ça commence à la ligne 2)

Sélectionner M2:AV1404

Menu Données - Validation
Autoriser : Personnalisé

Formule :
=ET(NB.SI($M2:$AV2;"X")<=1;SI(NB.SI($M2:$AV2;"X")=1;NB.SI($M2:$AV2;"S")=0;VRAI))
 

LeZéro

XLDnaute Nouveau
Re : Vérification d'une plage de cellule par une macro

Cette validation des données est super parce qu'elle ne comprend les cellules que ligne par ligne (ce que je n'arrivais déjà pas à faire), en revanche la valeur S peut toujours continuer à se ballader toute seule (je rappelle qu'en principe un X doit se trouver sur la même ligne pour qu'on puisse insérer S) !
 

LeZéro

XLDnaute Nouveau
Re : Vérification d'une plage de cellule par une macro

Tenez Pierre Jean, un échantillon (du à la taille du fichier de base). Mais il n'y a pas besoin d'avoir le reste après tout...

Tototiti, ton code marche bien, il ne me reste plus qu'à espérer pour l'enregistrement de la macro !
 

Pièces jointes

  • pierrejean.xls
    16 KB · Affichages: 59
Dernière édition:

LeZéro

XLDnaute Nouveau
Re : Vérification d'une plage de cellule par une macro

Tototiti, ton code marche super ! Mais lorsque je le met en macro, voilà que survient cette satanée erreur 1004 !

Sub Protection()
'
' Protection Macro
' Macro enregistrée le 01/09/2008 par L0290266
'

'
Range("M6:AV1403").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:= _
"=ET(NB.SI($M6:$AV6;""X"")<=1;SI(NB.SI($M6:$AV6;""S"")>= 1;NB.SI($M6:$AV6;""X"")=1;VRAI))"

.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Vérification d'une plage de cellule par une macro

je ne comprend pas pourquoi tu veux faire une macro... tu sélectionnes tes colonnes M à AV, sur le nombre de lignes qui t'intéressent et tu fait ta validation.
Si tu veux une macro, prend celle de PierreJean, nul doute qu'il va revenir rapidement avec une solution.
Je fais des macros quand il n'y a pas le choix, mais je considère que quand on peut s'en passer...
 

LeZéro

XLDnaute Nouveau
Re : Vérification d'une plage de cellule par une macro

En fait j'ai besoin de le faire en macro, parce que ta validation "empiete" sur une validation-liste* que j'ai déjà effectuée sur cette même plage de cellules.

*un menu choix proposant X ou S.
 

LeZéro

XLDnaute Nouveau
Re : Vérification d'une plage de cellule par une macro

Arf, merci de t'être décarcacé Tototiti !

En ce qui concerne la macro de Pierre Jean, elle me pose problème puisque je ne sais pas comment lancer les évennementielles. A vrai dire je viens de les découvrir.
Ainsi, que faut il faire pour lancer la macro, une fois que j'ai copié ton code dans l'éditeur Pierre Jean ?
 

Discussions similaires

Statistiques des forums

Discussions
312 482
Messages
2 088 766
Membres
103 955
dernier inscrit
mikaveli