Application d'une condition si toutes les cellules font partie d'une plage

Bonjour à tous,

Cela fait plusieurs jours que je recherche une solution à mon problème, mais je n'ai jamais pu trouver de solution concluante... Et comme je débute en VBA, je tourne le problème dans tous les sens mais je n'arrive à rien

Voici mon problème :

Actuellement, j'ai une formule qui me permet de changer la valeur d'une cellule au clic sur une plage donnée.

Sa formule est la suivante :

Private Sub worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, [D8:W37]) Is Nothing Then Exit Sub
ActiveCell = ActiveCell + 1
Target = ActiveCell
If ActiveCell = 4 Then ActiveCell = Empty
Cells(ActiveCell.Row, 3).Select
End Sub

Or, si je sélectionne plusieurs cellules dont au moins une des cellules fait partie de la plage [D8:W37], cela applique la condition à toutes les cellules sélectionnées, même celles qui ne sont pas censées changer (ce qui est logique). Seulement, cela modifie aussi les cellules que j'ai soi-disant verrouillées, ce qui m'empêche d'avancer dans mon projet !

J'aimerai donc trouver une formule qui me permette d'appliquer la condition : Si l'une ou plusieurs des cellules sélectionnée ne font pas partie de la plage [D8:W37], alors ne rien faire.

Pouvez-vous m'aidez s'il vous plait ?

Si vous avez la moindre idée, je vous en serais très reconnaissante !

Merci d'avance.

Bonjour

Essayes comme cela

Private Sub worksheet_SelectionChange(ByVal Target As Range)
   If Not Intersect(Target, [D8:W37]) Is Nothing and target.count = 1 Then 
      ActiveCell = ActiveCell + 1
      Target = ActiveCell
      If ActiveCell = 4 Then ActiveCell = Empty
      Cells(ActiveCell.Row, 3).Select
   End If
End Sub

Les instructions ne s'exécutent que si ta sélection se trouve dans la plage et qu'une seule cellule est sélectionnée.

Bonjour Yal,

Merci pour ta réponse ! Effectivement, cela fonctionne uniquement si j'en sélectionne une seule. Seulement (je sais, je suis casse pied ) je voulais savoir si c'était possible que la condition marche si je sélectionne plusieurs cellules de la même plage ...

Par exemple , j'aimerai que la formule fonctionne ainsi :

- si je sélectionne D8 à F16 ==> la condition marche (toutes les cellules sont dans la plage sélectionnée)

- si je sélectionne B5 à D8 ==> ça ne fonctionne pas (même si D8 fait partie de la plage, comme au moins une des cellules n'est pas dans la plage cible, cela ne fonctionne pas)

Je sais que ce que je cherche est sûrement compliqué à mettre en place, mais ça me ferait gagner un temps fou pour la suite du projet... Quelqu'un a une idée SVP ?

Encore merci en tout cas pour ta réponse, si je n'arrive pas à trouver, j'utiliserai ta formule

Essayes en supprimant : and target.count = 1 mais sans garantie, je n'ai pas testé

J'ai essayé en enlevant "and target.count = 1", mais je me retrouve avec le même problème : si je sélectionne plusieurs cellules, cela m'affiche des 1 partout, même dans les cellules préremplies

Après sur ce fichier là, je n'ai pas verrouillé mes cellules, mais quand j'ai essayé avec le verrouillage, ça n'avait pas marché...

D'après ce que j'ai vu sur les différents forums et cours existant, "if not intersect() is nothing then..." signifie en code "si on ne peut pas dire que l'intersection de (ma sélection [target] + ma plage cible [ici D8 à W37]) n'existe pas, alors ...", ce qui voudrait dire que si on a ne serait-ce qu'une seule cellule qui rentre dans les deux espace (ma sélection + ma plage cible), eh ben ma condition s'applique, quelque soit le nombre de cellule sélectionné.

Je me suis demandée si je ne devais pas procéder autrement, du type : "si (ma ou )mes cellules font parties des colonnes D à W et si elles font parties des lignes 8 à 37, alors la condition s'applique". Seulement, en code VBA, je pense que ça va être compliqué... ou pas ? Je ne sais pas encore l'écrire...

Tu en penses quoi ?

Elle est censé faire quoi précisément cette macro?

Cette macro me permet de faire des évaluation d'élèves sur tablette. Donc à chaque fois que je clique une fois sur une case, ça note si la compétence est "acquise" (1), "en cours d'acquisition" (2), "non acquise"(3) ou "non évaluée"(vide). Si je peux valider plusieurs compétences en même temps en sélectionnant plusieurs cases, ça me fait gagner du temps. Par contre, je souhaite pouvoir "masquer" des colonnes de critères, mais si je tente de masquer la colonne, ça me "valide" la colonne complète, et m'enlève toutes mes données d'origines.

Mais après, je sais que je cherche un peu la petite bête

Envoies le fichier ce sera plus efficace pour trouver une possible solution

Merci beaucoup en tout cas pour le temps et les réponse que tu m'apportes, ça m'aide beaucoup pour mon projet

Bonjour

Une proposition qui me semble faire ce que tu cherches. Je n'ai codé que la plage "D:W". Il ne reste qu'à adapter le code pour les autres plages. J'ai aussi créé les macro pour masquer/afficher les plages.

Bonjour Yal.

Merci ça marche nickel ! Est-ce que tu peux m'expliquer comment tu as procédé ? J'arrive à voir ton code, mais il y a des éléments de langage que je comprend pas toujours …

Merci beaucoup !!

En revenant dessus je me suis rendu compte qu'en fait mon bout de code gérait l'ensemble des cas. J'ai donc supprimé toutes les lignes inutiles. J'ai mis des commentaires pour expliquer la procédure. Si ça n'est pas assez clair n'hésites pas à demander des précisions.

Bonjour yal,

Merci beaucoup pour tes réponses, j'arrive enfin à faire ce que je souhaite ! Je sais pas combien de temps j'aurais mis à trouver la solution seule...

Rechercher des sujets similaires à "application condition toutes font partie plage"