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

  • Initiateur de la discussion Initiateur de la discussion Astyanax
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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)
 
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.
 
Bonjour mapomme

mapomme
Ah, zut
Moi qui croyais pouvoir zapper la déclaration as Range
Bon, comme quoi, mieux vaut éviter d'être fainéant dans VBE 😉
Par contre, sorti d'ALTF11, on peut se permettre quelques moments de paresse, non ? 😉
 
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

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

Dernière édition:
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.
 
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.
 
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.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour