Macro Excel à executer sur une cellule selectionné

Macro Excel à executer sur une cellule selectionné - VB/VBA/VBS - Programmation

Marsh Posté le 21-06-2019 à 08:42:45    

Bonjour,
 
je cherche comment faire pour exécuter une macro sur une ligne entière seulement si une cellule particulière de cette ligne est sélectionnée ?
En gros j'ai une macro qui génère des calculs en fonction de paramètre mais j'aimerais quelle ne s'execute seulement si la quatrième cellule de la ligne est sélectionnée, c'est pour éviter d'écraser des valeurs précédemment rentrées dans le tableau ….
 
Merci

Reply

Marsh Posté le 21-06-2019 à 08:42:45   

Reply

Marsh Posté le 21-06-2019 à 16:46:24    

Bonjour,
 
Par exemple dans le module de feuille :

Code :
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. If Target.Count > 1 Or Intersect(Target, Columns(4)) Is Nothing Then Exit Sub
  3.   'ici la macro
  4.   '...
  5. End Sub


---------------
Cordialement, Patrice
Reply

Marsh Posté le 24-06-2019 à 11:08:00    

patrice33740 a écrit :

Bonjour,
 
Par exemple dans le module de feuille :

Code :
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. If Target.Count > 1 Or Intersect(Target, Columns(4)) Is Nothing Then Exit Sub
  3.   'ici la macro
  4.   '...
  5. End Sub



 
Bonjour Patrice,
 
Merci pour ta réponse, mais du coup je me rend compte que ça ne marche pas parce que ma macro s'exécute sur toute une colonne (enfin de de d3 à d500).
 
If Range("C1" ) <> "." Then
Selection.Copy
    Range("D3:D500" ).Select
    Selection.Copy
    Range("E3" ).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End If
 
il faudra qu'à la place de  :  Range("D3:D500" ).Select      je puisse récupérer la ligne de la cellule selectionné avec quelque chose comme ça : Ligne = ActiveCell.Row
 
et du coup exécuter la suite du code…
 
Est-ce que vous auriez une idée ?
 
Merci par avance

Reply

Marsh Posté le 24-06-2019 à 13:55:39    

Bonjour,
 
En VBA, à de très très rares exceptions prés, il ne faut jamais utiliser .Select
et éviter d'utiliser Selection, ActiveCell, ...
 
Essaies :

Code :
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.   If Target.Count > 1 Or Intersect(Target, Columns(4)) Is Nothing Then Exit Sub
  3.   If Range("C1" ) <> "." Then
  4.     Target.Offset(0, 1).Value = Target.Value
  5.   End If
  6. End Sub


 


---------------
Cordialement, Patrice
Reply

Marsh Posté le 05-07-2019 à 08:46:36    

patrice33740 a écrit :

Bonjour,
 
En VBA, à de très très rares exceptions prés, il ne faut jamais utiliser .Select
et éviter d'utiliser Selection, ActiveCell, ...
 
Essaies :

Code :
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.   If Target.Count > 1 Or Intersect(Target, Columns(4)) Is Nothing Then Exit Sub
  3.   If Range("C1" ) <> "." Then
  4.     Target.Offset(0, 1).Value = Target.Value
  5.   End If
  6. End Sub


 


 
Bonjour,
 
je suis un peu perdu  …. je ne sais pas quoi modifier
en gros dans ma feuille excel j'ai ce bout de code qui dès que le contenu des cellules C3 à C500 change je lance la macro4  :
 
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C3:C500" )) Is Nothing Then
Call Macro4
End If
End Sub
 
la macro4 : me sert a faire un copier coller en version texte (paste value) d'un résultat de recherche dans un onglet qui s'appel DB.
Sub Macro4()
'
' Macro4 Macro
'
 
If Range("C1" ) <> "." Then
Selection.Copy
    Range("D3:D500" ).Select
    Selection.Copy
    Range("E3" ).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End If
 
If Range("F1" ) <> "." Then
Selection.Copy
    Range("F3:F500" ).Select
    Selection.Copy
    Range("G3" ).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End If
 
End Sub
 
je fais ce copier coller parce que je veux pouvoir rajouter des caractères à mon résultat de recherche.
 
 
Actuellement quand je modifie la case C6 le résultat de la recherche est bien copier dans les deux cases ou je veux, dans cet exemple en E6 et G6 par contre dans la macro4 j'ai la ligne : Range("D3:D500" ).Select qui m'écrase toute les autres résultats aussi … Par exemple si j'ai quelque chose d'écris dans la cellule E4 ou G8 c'est écrasé …
J'aimerais modifier la macro pour quelle ne copie les résultats que sur la ligne ou je me trouve …. si je viens de changer le contenu de la ligne C9 la macro ne doit s'exécuter que sur la ligne 9 et donc n'écrase pas les résultats des autres lignes déjà rentré ….
 
 
J'espère que mon explication fumeuse est plus claire ! ;)
 
Merci pour votre aide
 
 
 

Reply

Marsh Posté le 05-07-2019 à 17:13:49    

Bonjour,
 
Je répète : En VBA, à de très très rares exceptions prés, il ne faut jamais utiliser .Select
et éviter d'utiliser Selection, ActiveCell, ...
 
Il suffit de transmettre la plage modifiée (Target) à ta macro4 :

Code :
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.   If Not Intersect(Target, Range("C3:C500" )) Is Nothing Then
  3.     Call Macro4(Target)
  4.   End If
  5. End Sub
  6. Sub Macro4(t As Range)
  7.   If Me.Range("C1" ) <> "." Then
  8.     t.Offset(0, 2).Value = t.Offset(0, 1).Value 'E = D
  9.   End If
  10.   If Me.Range("F1" ) <> "." Then
  11.     t.Offset(0, 4).Value = t.Offset(0, 3).Value 'G = F
  12.   End If
  13. End Sub


 
 


---------------
Cordialement, Patrice
Reply

Marsh Posté le 15-07-2019 à 10:01:10    

patrice33740 a écrit :

Bonjour,
 
Je répète : En VBA, à de très très rares exceptions prés, il ne faut jamais utiliser .Select
et éviter d'utiliser Selection, ActiveCell, ...
 
Il suffit de transmettre la plage modifiée (Target) à ta macro4 :

Code :
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.   If Not Intersect(Target, Range("C3:C500" )) Is Nothing Then
  3.     Call Macro4(Target)
  4.   End If
  5. End Sub
  6. Sub Macro4(t As Range)
  7.   If Me.Range("C1" ) <> "." Then
  8.     t.Offset(0, 2).Value = t.Offset(0, 1).Value 'E = D
  9.   End If
  10.   If Me.Range("F1" ) <> "." Then
  11.     t.Offset(0, 4).Value = t.Offset(0, 3).Value 'G = F
  12.   End If
  13. End Sub


 
 


 
Super merci ça à l'air de fonctionner !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed