XL 2016 Recherche une lettre dans une ligne de 10 cases puis affectation d'un autre lettre aux autres cases

Astyanax

XLDnaute Occasionnel
Bonjour,
j'ai presque tout dit dans le titre.
Voici mon problème :
j'ai une ligne de 10 cases A1 à J1 et sur cette ligne je ne peux placer une lettre spécifique qu'une seule fois.
Par ex : O
Si le O est détecté sur une des 10 cases, je dois affecter une autre lettre aux 9 cases restantes.
Par ex : X
Je ne vois pas trop comment trouver la bonne formule.
Si quelqu'un a une idée, merci
 

Staple1600

XLDnaute Barbatruc
Re

J'étais sérieux
Tu dimensionnes xrng en Variant et pas en Range
Cela n'a pas d'incidence?
D'habitude, on déclare les range:
Dim rng As Range puis Set rng= Range(...
J'ai aussi vu des écriture sans Dim, juste Set rng=Range(...
Au final quelle est la meilleure option?
(Par usage, j'ai toujours utilisé Dim rng As Range, mais si le Variant par défaut suffit, ca me va)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re @Staple1600,

Habituellement, je suis un adepte du typage des variables (du moins quand je connais par avance le type de son contenu).
Si ici je ne l'ai pas fait, c'est par oubli ou fainéantise (tu choisiras ;)).

Le déclarer en tant que range est préférable (selon moi).

En effet, supprimons de l'instruction set xrg = ..., le terme Set.
La complication sera OK, Le programme passera sur cette instruction sans problème. C'est en arrivant sur xrg.column qu'on aura une erreur (si on teste, ne pas oubliez de remettre en route la détection des évènement ! après l'erreur)

Si dans ce cas, on avait déclaré xrg comme range, l'erreur apparait à l'instruction xrg = Intersect(Range("a1:j1"), Target)(1, 1) donc exactement où se situe le défaut logique de codage et non pas plus loin.
 

job75

XLDnaute Barbatruc
Bonjour Astyanax, JBARBE, mapomme, JM, le forum,

Pas besoin de VBA, voyez le fichier joint avec :

- validation des données en A1 =SI(NB.SI(B1:J1;"O");A1="X";OU(A1="O";A1="X"))

- validation des données en J1 =SI(NB.SI(A1:I1;"O");J1="X";OU(J1="O";J1="X"))

- validation des données sur B1:I1 =SI(NB.SI($A1:A1;"O")+NB.SI(C1:$J1;"O");B1="X";OU(B1="O";B1="X"))

Bonne journée.
 

Pièces jointes

  • Validation(1).xlsx
    15.1 KB · Affichages: 7

mapomme

XLDnaute Barbatruc
Supporter XLD
Re @Astyanax ;)
Mapomme, je serai ravi que tu commentes ta procédure.

J'ai commenté la procédure dans le fichier joint (après l'avoir modifiée un tout petit peu)
Es tu donc rempli de ravissement ?

edit: Bonjour @job75 :)
edit: rectifié des fautes de grammaire et d'orthographes...
 

Pièces jointes

  • Astyanax- X ou O- v1 commenté (a).xlsm
    17.2 KB · Affichages: 3
Dernière édition:

Astyanax

XLDnaute Occasionnel
Bonjour Job45,
à moins que je n'ai pas tout compris, ta solution ne permet que d'empêcher d'avoir deux "O" sur la ligne, pas de remplir les 9 autres cases avec des "X" si un "O" est détecté.

Désolé de ne pas avoir répondu plus tôt mais j'essayais de comprendre ta solution.
Autre chose, je ne te réponds pas parce que tu m'as envoyé un avertissement.
Ton avertissement, je l'ai reçu alors que ma réponse était déjà partie. Donc, je l'ai éditée pour la modifier et te donner une explication.
Je suis fortement désolé de n'être pas aussi compétent que toi dans Excel.
Il me faut du temps mais je ne déprime pas.
 

Astyanax

XLDnaute Occasionnel
Il ne peut pas avoir de copier-coller. Le "O" est rentré obligatoirement manuellement.
C'est seulement après que l'on complète automatiquement avec des "X".
Je ne voudrais pas embrouiller davantage mais des "X" peuvent être rentrés manuellement mais il n'y a aucune action qui en découle.
Ils sont affichés là où on a sélectionné la case comme une entrée toute simple.
C'est seulement un "O" dans une case sur la ligne qui déclenche le remplissage des autres cases.
 

Astyanax

XLDnaute Occasionnel
Mapomme, j'ai un petit problème avec ta procédure mais sans doute dû à une mauvaise explication de ma part.
Au départ, toutes les cases doivent être vierges. Pas de X ni de O.
Je dois pouvoir placer des X sur n'importe quelles cases et je dois pouvoir les supprimer.
C'est seulement lorsque je place un O que l'on affecte des X aux autres cases.
 

Discussions similaires

Statistiques des forums

Discussions
311 729
Messages
2 081 970
Membres
101 852
dernier inscrit
dthi16088