Sélection de cellules précises dans un tableau

Bonjour le forum =)

Voila mon petit souci (le fichier se trouve en PJ) :

Je voudrai que lorsqu'on sélectionne une autre cellule du tableau différentes de celles portant le nom d'un chantier (ex: "PEHU"...), on sorte de la procédure et on affiche un message du type "Veuillez double cliquer sur le nom d'un chantier" (car une macro s'active quand on double-clique sur un nom de chantier)

En parcourant le forum je suis tombé la dessus :

If Application.Intersect(Target, TP.DataBodyRange) Is Nothing Then Exit Sub

Que j'ai adapté à mon programme :

If Not Application.Intersect(Target, TP.DataBodyRange) <> c Then
a = MsgBox("Veuillez double cliquer sur le nom d'un chantier", vbExclamation)
Exit Sub
End If

Le soucis c'est que même lorsque je double clique sur le nom d'un chantier, celui-ci m'affiche le message alors que je ne le veux pas =/

La macro en question se trouve dans le feuille 14 ("2022")

Merci d'avance =)

Bonjour

Je voudrai que lorsqu'on sélectionne une autre cellule du tableau différentes de celles portant le nom d'un chantier (ex: "PEHU"...), on sorte de la procédure et on affiche un message du type "Veuillez double cliquer sur le nom d'un chantier" (car une macro s'active quand on double-clique sur un nom de chantier)

Si je clique sur AV6 par exemple (donc une cellule dans votre tableau) cela affiche le message que vous mentionnez. Je ne vois pas le problème..

Le soucis c'est que même lorsque je double clique sur le nom d'un chantier, celui-ci m'affiche le message alors que je ne le veux pas

Si je double clique sur un chantier en colonne BH, on ne reçoit pas de message

Donc je ne comprends pas votre demande

Bonjour,

Oui en effet je me suis mal exprimé .

Les noms des chantiers sont ceux qui sont présents dans le grand tableau. En fait, si un chantier est entré dans le grand tableau plusieurs fois, et que l'utilisateur double clique dessus, alors ce chantier est automatiquement mis dans le petit tableau avec toutes les heures additionnées dans le chantier (cela se fait à l'aide d'une macro présente dans la feuille 14).

image

Ce que je veux justement, c'est que si l'on clique ailleurs que sur le nom d'un chantier, alors on reçois le message "Veuillez double cliquer sur le nom d'un chantier"

Cependant, si on enlève les lignes de code suivantes :

If Not Application.Intersect(Target, TP.DataBodyRange) <> c Then
a = MsgBox("Veuillez double cliquer sur le nom d'un chantier", vbExclamation)
Exit Sub
End If

un message d'erreur apparait à la ligne :

T(K) = T(K) + TP.DataBodyRange(i, j).Offset(K, 0)

Et le but est d'éviter cela en indiquant que ce n'est pas possible de cliquer ailleurs que sur le nom d'un chantier.

J'espère avoir été plus clair ^^

Merci d'avance =)

Ce que je veux justement, c'est que si l'on clique ailleurs que sur le nom d'un chantier, alors on reçois le message "Veuillez double cliquer sur le nom d'un chantier"

Mais c'est ce que fait le code ...

Double cliquez sur L11 et cela vous renvoie le message demandé
je me demande si ce n'est pas le contraire que vous voulez, à savoir si la cellule comporte une donnée vous ne voulez pas de message

Edit : ok je pense avoir compris. Je n'avais pas fait attention que c'est vous qui aviez rajouté des lignes dans le code

Faites ceci :

1. supprimez toutes les lignes comprises entre la ligne "c = Target.Value 'définit le chantier C" et la ligne "For i = 1 To TP.ListRows.Count 'boucle 1 : sur toutes les lignes I de TP"
2. Ajoutez cette ligne en lieu et place

If c = vbNullString Then MsgBox "Veuillez double cliquer sur le nom d'un chantier", vbExclamation: Exit Sub

Cordialement

C'est exactement ce que je cherchais ^^

Merci de ton aide Dan

Juste une petite chose, cela fonctionne bien quand on clique ailleurs que sur une case comportant un nom de chantier (le message s'affiche bien) mais le message d'erreur suivant est toujours affiché à la ligne :

T(K) = T(K) + TP.DataBodyRange(i, j).Offset(K, 0)
image

Il apparait quand on clique sur l'une des cases en dessous du nom (celles ayant les heures)

image

Est-ce qu'il serait possible d'éviter cela en affichant toujours le même message que précédemment ? ^^

Si ce n'est pas clair, n'hésitez pas à me le faire savoir XD

Merci d'avance =)

Bonjour,

Dan bonjour

votre boucle "i" va de 1 au nombre de ligne du tableau (22 dans le fichier fourni) hors au milieu de cette boucle vous demandez de faire une addition avec la ligne testée "i" qui subit un décalage de "k" qui lui va de 1 à 4, du coup pour i=21, le décalage de k=1 c'est ok, mais pour le décalage suivant k=2 on arrive à la ligne 23 qui n'existe pas dans le tableau, il vous faudrait faire un test de dépassement de capacité du nombre de ligne comme par exemple :

For i = 1 To TP.ListRows.Count 'boucle 1 : sur toutes les lignes I de TP
    For j = 1 To TP.ListColumns.Count 'boucle 2 : sur toutes les colonne J de TP
        If TP.DataBodyRange(i, j) = c Then 'condition : si la donnée ligne I colonne J de TP est égale au chantier C
            For K = 1 To 4 'boucle 3 : su les 4 ligne en-dessous du chantier
                If i + k <= TP.ListRows.Count then T(K) = T(K) + TP.DataBodyRange(i, j).Offset(K, 0) 'calcule de total de chaque type d'heure
            Next K 'prochaine ligne de la boucle 3
        End If 'fin de la condition
    Next j 'prochaine colonne de la boucle 2
Next i 'prochaine ligne de la boucle 1

Pas essayé...

@ bientôt

LouReeD

Est-ce qu'il serait possible d'éviter cela en affichant toujours le même message que précédemment ? ^^

Oui c'est normal car vous cliquez sur une cellule contenant une donnée. Vous pouvez essayer comme ceci

If c = vbNullString Or IsNumeric(c) Then MsgBox "Veuillez double cliquer sur le nom d'un chantier", vbExclamation: Exit Sub

Bonjour et merci de vos réponses =)

LouReed, j'ai essayé vos lignes de codes, cela me met le même message d'erreur =/

Je pense comprendre ce que vous voulez dire, en fait il me faudrait faire un test pour savoir si c'est la dernière ligne du tableau et si c'est le cas, alors on ne fait pas la boucle

Mais Dan a résolu le problème ^^ Cela fonctionne comme je le veux

Merci beaucoup pour vos réponses =)

Oui Dan a raison... Dans "mon cas" l'erreur serait plutôt "n'appartient pas..." plutot que "erreur de type..."

@ bientôt

LouReeD

Rechercher des sujets similaires à "selection precises tableau"