Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
393 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Macro Excel à executer sur une cellule selectionné

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Macro Excel à executer sur une cellule selectionné

n°2335617
themourf
Posté le 21-06-2019 à 08:42:45  profilanswer
 

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

mood
Publicité
Posté le 21-06-2019 à 08:42:45  profilanswer
 

n°2335684
patrice337​40
Avec la réponse, c'est facile.
Posté le 21-06-2019 à 16:46:24  profilanswer
 

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
n°2335822
themourf
Posté le 24-06-2019 à 11:08:00  profilanswer
 

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

n°2335845
patrice337​40
Avec la réponse, c'est facile.
Posté le 24-06-2019 à 13:55:39  profilanswer
 

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
n°2336432
themourf
Posté le 05-07-2019 à 08:46:36  profilanswer
 

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
 
 
 

n°2336460
patrice337​40
Avec la réponse, c'est facile.
Posté le 05-07-2019 à 17:13:49  profilanswer
 

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
n°2336764
themourf
Posté le 15-07-2019 à 10:01:10  profilanswer
 

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 !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Macro Excel à executer sur une cellule selectionné

 

Sujets relatifs
Arrêter une macro python à la fin de l' exécution.Erreur macro python
Erreur code Formulaire de saisie excelScript qui récupère données fichier Excel vers document
Export mails dans Excelmacro vba/word concaténer 2 paragraphes
Python 3.6 extraction de feuille excel pour convertion en PDFCopier tableau Excel sous Word page définie
[VB/VBA/VBS] Problème script pour exécuter des programmesprobleme excel en mode partager
Plus de sujets relatifs à : Macro Excel à executer sur une cellule selectionné


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR