Déclanchement de macro (facile pour connaisseur)

Bonjour, j'ai créé une macro qui modifie la ligne en cours et créée la suivante appelée Macro1,

Cette macro est déclenchée à la ligne 4 en pliquant sur P4 grâce au code suivant:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Address = "$P$4" Then Macro1

End Sub

Je souhaite propager cette action pour les lignes suivante en cliquant sur P5, P6,...

Merci pour votre aide.

If Target.Address = "$P$4" Then Macro1

$P$4 est la référence de ta cellule. Essaye de modifier pour que ca corresponde à tes besoins.

A vu de nez :

If Target.Address = "$P$4" Or Target.Address = "$P$5" Or Target.Address = "$P$6" Then Macro1

Sinon, si tu as beaucoup de valeur, je t'invite a faire une boucle, ce sera plus simple pour la maintenance

Merci pour ta réponse.

Oui le nombre de ligne va très vite devenir trop important, ne serait-il pas possible d'écrire quelque chose que au leiu de se limiter à une cellule avec "$P$4" le propager à toute la colonne avec quelque chose qui signifirait $P ou $p4 ?

tu peux utiliser une fonction de recherche du genre :

Public Function FindValue(ByVal ValueToFind As Variant, ParamArray SearchIn() As Variant)

    Dim i As Integer

    For i = 0 To UBound(SearchIn)
        If SearchIn(i) = ValueToFind Then
            FindValue = True
            Exit Function
        End If
    Next

End Function

Code provenant de : http://stackoverflow.com/questions/15464144/vba-finding-if-value-is-in-values

A cote tu te construit un tableau avec ta plage de données via une simple boucle.

et ton test devient un truc du genre :

If FindValue(Target.Address, tPlage) Then Macro1

Il y a probablement plus efficace en terme de temps d'execution mais c'est une solution qui à l'avantage d'être simple d'utilisation

Je comprends peut être mal mais je ne suis pas sur que cela réponde à mon problème..

Ta solution va me lancer la macro 1 pour toute les lignes non vide c'est bien ca?

moi je veux simplement qu'elle se lance pour la ligne i lorsque que clique sur la cellule Pi.

C'est bien ce que tu avais compris?

En tout cas merci pour ton intérêt.

non, elle lancera la macro pour toutes les cellules que tu auras définit dans ton tableau.

Dans l'exemple, tu définis ton tableau :

dim tPlage(nb valeur)
dim iNav as integer
dim i as integer
i=0
for iNav = debut_de_ta_plage to fin_de_ta_plage
    tPlage(i) = "$P$" & iNav
    i = i +1
next iNav

ainsi dans ta recherche, si ta cellule est dans le tableau que tu lui places en paramètre, elle retournera "true" et tu lanceras ta macro, sinon elle retourne rien et tu passes à la suite.

Bonjour,

Que penses-tu de l'idée de joindre un fichier?

Bonne année.

Cdlt.

Tu peux trouver en pièce jointe un dossier effectuant ce que tu demandes.

Tu n'auras plus qu'a y mettre ta macro.

8classeur1.xlsm (17.49 Ko)

Re,

Je pensais à un fichier exemple avec des données et les résultats escomptés.

Cdlt.

Bonjour, désolé mais je ne sais pas comment faire pour joindre un fichier et le réseau de mon entreprise bloque la vidéo qui l'explique.

cdlt

Bonjour,

d'après ce que j'ai compris :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, [P4:P10]) Is Nothing Then macro1
End Sub

eric

Merci pour vos réponses.

Mais je pense (avec ma faible connaissance du langage VBA) que ces dernières ne répondent que partiellement à mon attente donc je vais essayer de formuler le code sous forme littérale avec les condition d'activation de ma macro:

Pour une ligne n:

pour tout n appartenant à [2;"dernière ligne où An<>""],

Si An <> "" et si Bn = "" et si l'on clique sur Cn alors la Macro1 se lance.

N'hésitez pas à me faire part de vos interrogations..

Merci beaucoup.

Elles n'y répondent partiellement que parce tu n'es pas clair et qu'en plus tu viens d'ajouter des conditions.

Nos dons divinatoires ont des limites...

Essaie:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Count = 1 And Target.Column = 3 And Target.Row > 1 Then

If Cells(Target.Row, "A") <> "" And Cells(Target.Row, "B") = "" Then macro1

End If

End Sub

Sub macro1()

MsgBox "macro1 lancée"

End Sub

Se déclenche sur C si A<>"" et B=""

Sinon fait un effort de clarté.

eric

Merci pour ton aide.

Ma demande évolue car j'essaye de contourner certains problèmes qui me semblent plus difficiles à résoudre.

Ceci étant dit, il semblerait qu'un petit détail coince, parce que la Macro ne s'exécute pas pourtant le message s'affiche..

La seule partie que je ne comprends pas c'est "Target.Count=1".

Nicolas.

En enlevant la deuxième partie de ton code (où le message s'affiche) tout marche parfaitement.

Je te remercie pour le temps que tu m'as accordé.

Bonne année 2016 à toi.

Nicolas

Oui, il faut mettre ta macro à la place.

Target.Count=1

Pour que la macro ne se lance que si sélection d'une seule cellule et non d'une plage (à moins que tu ne l'aies prévu dans ta macro).

Rechercher des sujets similaires à "declanchement macro facile connaisseur"