Microsoft 365 Appel d'une macro à la sélection d'une cellule

Carnould

XLDnaute Junior
Bonsoir à tous,
Je joints un classeur exemple d'un problème que je rencontre dans une application plus conséquente.
Lorsque je saisis une valeur dans une cellule (col C de la feuil2), je contrôle cette valeur par rapport au tableau de la feuil1 et applique une MFC (vert si présent et rouge si absent). Cela fonctionne bien.
Mon problème :
-le tableau de la feuil1 est grandement évolutif est nécessite d'être triée AVANT le contrôle. J'ai une macro à cet effet.
-Je voudrais que la macro se déroule automatiquement dès que l'on pointe la cellule à remplir et bien évidemment que mon curseur revienne sur ma cellule à remplir pour saisir mes valeurs.

J'ai essayé diverses façons de procéder mais sans succès (mon niveau VBA en est la cause).
Merci d'avance pour votre aide précieuse.
Bien cordialement
Christian
 

Pièces jointes

  • test couleur.xlsm
    27.8 KB · Affichages: 11

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Carnould,

A mettre impérativement dans feuille 2.
Je n'y ai mis qu'un msgbox pour l'exemple. A vous de l'enrichir.
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column = 3 Then       ' Si sélection colonne C
    ' Alors macro à éxecuter.
        MsgBox " Cellule " & Target.Address & " sélectionnée."
    End If
End Sub

Il existe la même mais sur double clic :
Code:
Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
          If Not Application.Intersect(Target, Range("B2:C4")) Is Nothing Then
          'macro à mettre
         End If
End Sub
juste un exemple. Dans le fichier est implémenté la première.
A vous de choisir en fonction de votre besoin.
 

Pièces jointes

  • test couleur (1).xlsm
    25.5 KB · Affichages: 6

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, Carnould, sylvanu

Comme j'ai pondu, je poste
Alors dans le code de la feuille Feuil2
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Me.Columns(3), Target) Is Nothing Then
If Len(Target) Then
Call Tri_2
End If
End If
End Sub
Et une version simplifiée pour le tri (dans Module1)
VB:
Sub Tri_2()
With Worksheets("Feuil1").ListObjects(1)
.Range.Sort Key1:=.ListColumns(1), Order1:=xlAscending, Header:=xlYes
End With
End Sub

PS: Sous réserve que j'ai bien compris la question ;)
 

Carnould

XLDnaute Junior
Bonsoir à tous,
Je n'ai pas réussi à faire fonctionner la solution de sylvanu qui plante probablement pour un petit détail qui m'a échappé. néanmoins, la démarche me semble intéressante.
Celle de Staple1600 a fonctionné du premier coup et je la mets en place. La seule chose qui me gêne est la nécessité de mettre le code dans chaque feuille sur laquelle se fait la saisie pour les feuilles déjà créées. Un peu de travail. Pour le nouvelles feuilles cela ne me posera pas de problème (copie d'un modèle).
Merci à tous les deux pour votre aide
Bien cordialement
Christian
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, Carnould, sylvanu

Carnould
Pour que le code soit valable pour toutes les feuilles, mettre le code dans la procédure idoine mais dans ThisWorkBook.
Comme ceci
VB:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Not Intersect(Sh.Columns(3), Target) Is Nothing Then
If Len(Target) Then
Call Tri_2
End If
End If
End Sub
PS: Non testé en profondeur ;)
 

Discussions similaires

Statistiques des forums

Discussions
312 069
Messages
2 085 041
Membres
102 764
dernier inscrit
nestu