XL 2010 Résolu par Lone Wolf et Paf : Code qui s'execute quand je clique

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,

J'ai un souci sur un code qui devrait s'exécuter au changement de valeur de ma cellule mais qui s'exécute aussi juste quand je clique sur la cellule.
Code:
Private Sub Worksheet_SelectionChange(ByVal R As Range)

Application.EnableEvents = False
Application.ScreenUpdating = False
If Not Intersect(R, Range("j7:j20000")) Is Nothing And R.Count = 1 Then 'présent(s) au RdV
    PratiqueSuivisAppels01.Show
    End If
    If Not Intersect(R, Range("p7:p20000")) Is Nothing And R.Count = 1 Then 'présent(s) au RdV
    PratiqueSuivisAppels02.Show
    If [R] = "RdV Fait" Then
    Range(R.Offset(0, -9), R.Offset(0, 1)).Select
    Call CopieTelRdV
    End If
    End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

c'est cette partie :

Code:
If [R] = "RdV Fait" Then

    Range(R.Offset(0, -9), R.Offset(0, 1)).Select
    Call CopieTelRdV
    End If


je pense que dans ce code global, ce n'est pas sa place.

j'ai tenté de l'intégrer au code suivant en remplaçant Target pas R :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Application.ScreenUpdating = False

If Not Intersect(Target, Range("I3")) Is Nothing Then
Target.Offset(0, 0).Select
Call Telephone
End If

If Not Intersect(Target, Range("i7:i20000")) Is Nothing Then
ActiveSheet.Unprotect Password:=""
Target.Offset(0, 2) = Now()
End If

If Not Intersect(Target, Range("l7:l20000")) Is Nothing Then
   ActiveSheet.Unprotect Password:=""
   Target.Offset(0, -7) = Now()
   Target.Offset(0, 4) = ""
   Target.Offset(0, 8) = ""
   Target.Offset(0, 9) = ""
End If
end sub

Mais à cet emplacement, il ne s'exécute pas.

Auriez-vous la solution car tous mes essais n'ont pas abouti.
Avec mes remerciements,
Amicalement,
Lionel,
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Voici le code modifié tel que fait par paf.
Et ça marche bien :
Code:
Private Sub Worksheet_SelectionChange(ByVal R As Range)
Application.EnableEvents = False
Application.ScreenUpdating = False
If Not Intersect(R, Range("j7:j20000")) Is Nothing And R.Count = 1 Then
    PratiqueSuivisAppels01.Show
    End If
    If Not Intersect(R, Range("p7:p20000")) Is Nothing And R.Count = 1 Then
     ' 1 )  on traite "RdV Fait"
    If R = "RdV Fait" Then
      Range(R.Offset(0, -9), R.Offset(0, 1)).Select
      Call CopieTelRdV
  End If

   ' 2 ) on affiche l'USF
PratiqueSuivisAppels02.Show
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Le souci est que cette partie :
Code:
  ' 1 )  on traite "RdV Fait"
    If R = "RdV Fait" Then
      Range(R.Offset(0, -9), R.Offset(0, 1)).Select
      Call CopieTelRdV
  End If
Qui doit s'exécuter au changement de valeur de la cellule et pas au clic.

Allé, j'arrête de vous faire travailler ... l'heure du réveillon arrive.
Un grand merci pour votre gentillesse.
Amicalement,
Lionel,
 

Pièces jointes

  • 8879_l.jpg
    8879_l.jpg
    162.9 KB · Affichages: 43

Lone-wolf

XLDnaute Barbatruc
Re

VB:
Private Sub Worksheet_SelectionChange(ByVal R As Range)
If Not Intersect(R, Columns("H:H")) Is Nothing Then
  'Quand la colonne H est sélectionnée, MsgBox
If R.Offset(0, -1) = "bonjour" Then MsgBox "Bonjour !"
End If
End Sub

Ce qui veux dire, tu inscrit le texte en colonne G et passant (avec le tabulateur du clavier) sur la colonne H, la macro va s'exécuter. Un exemple en PJ.
 

Pièces jointes

  • Classeur1.xlsm
    11.6 KB · Affichages: 42
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re Lionel

Pour avoir mis 2 fois If Not Intersect??? Plus besoin des macros.

VB:
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal R As Range)
Dim lig As Long
  Application.ScreenUpdating = False
  If Not Intersect(R, Range("Q7:Q65536")) Is Nothing Then
  If R.Offset(0, -1) = "RdV Fait" Then

  With Sheets("RendezVous")
  .Unprotect Password:=""
  lig = .Cells(Rows.Count, 1).End(xlUp).Row + 1
  .Cells(lig, 1) = lig - 3
  .Cells(lig, 7) = "X"
  .Cells(3, 1).RowHeight = 1
  .Cells(3, 6) = 1
  .Cells(2, 1) = lig - 3
  .Cells(lig, 8).Value = R.Offset(0, -10).Value
  .Cells(lig, 9).Value = R.Offset(0, -9).Value
  End With
  End If
  Else
  Exit Sub
  End If
End Sub

D'après ce que j'ai compris. Ensuite

VB:
Sub Telephone()
Application.EnableEvents = False      'A supprimer
MsgBox "entrée"

If [h1] = "$I$3" Then Exit Sub                 ' "$I$3" est l'adresse de la cellule, si c'est la valeur, à modifier.
ActiveSheet.Unprotect Password:=""       ' À quelle feuille exacte tu fait référence???
If [h1] <> 9 And IsNumeric([h1]) Then      'Met plutôt Range("h1"), idem pour les autres.
ActiveSheet.Unprotect Password:=""
[h1] = [E1] & [I3]
MsgBox "sortie"
End If
Application.EnableEvents = True
End Sub
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour Lone,

je suis un peu perdu car tu vas bcp trop vite pour moi LOL
Merci pour tes réponses et modifications.
le classeur test au post 18 n'est qu'un classeur pour traiter mon souci.
Les codes qui sont dedans sont issus de mon classeur de travail est certaines lignes peuvent paraître (sorties de leur contexte) inutiles ou erronées.
mais dans le fichier de travail, elles ont leur utilité.

Ta gentillesse, ta précision et ton vouloir que les codes soient biens écrits font que tu corriges tout LOL.
Bien sur, je t'en remercie vivement et j'en tiendrai compte.

Pour que ne je sois pas perdu, est-il possible de ne traiter que mon souci présent ?
Car pour les autres codes (certainement mal écrits, j'en conviens LOL),, ils fonctionnement quand même et le jour viendra où je me mettrai à les écrire de façon "plus pro et plus efficace" grâce aux connaissances acquises ...... grâce à vos enseignements réponse après réponse.

je reviens sur ta question :
Re Lionel,
Pour avoir mis 2 fois If Not Intersect??? Plus besoin des macros.
En fait, comme dit plus haut, le code n'est qu'un extrait du code de mon classeur de travail qui traite également d'autres colonnes.

Tout ceci étant dit, la seule chose qui ne fonctionne pas dans mon fichier test est que le code "Private Sub Worksheet_SelectionChange(ByVal R As Range)" s'exécute au clic dans la cellule
alors que j'ai besoin que le code :
Code:
If R = "RdV Fait" Then
      Range(R.Offset(0, -9), R.Offset(0, 1)).Select
      Call CopieTelRdV
  End If
Ne s'exécute que quand la valeur de la cellule change.

Encore un grand merci pour avoir là.
Heureux Noel à toutes et à tous,
Amicalement,
Lionel,
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re Lone,

Exact .....
LOL, Je n'avais pas vu, perdu dans tes explications pourtant justifiées (je ne suis pas une femme et mon neurone ne sait traiter une chose à la fois :confused:).
ca marche et je t'en remercie.
Maintenant "libéré" de ce souci, je vais pouvoir étudier tes codes, l'esprit libre ;)
Bon Noel Lone ainsi qu'à toutes et à tous,
Amicalement,
Lionel,
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 836
Messages
2 092 652
Membres
105 479
dernier inscrit
chaussadas.renaud