Macro par liste déroulante ?

Rebonjour, voici une nouvelle demande. J'ai cette macro qui me filtre certaines lignes en fonction d'une valeur, ici A pour exemple. A ce jour j'ai une liste déroulante qui me permet de choisir un nom et j'aimerais que quand je sélectionne un nom par cette liste que cette macro soit activée en me donnant les résultats par rapport à ce noms.

La liste ce situe en C1 de la feuille Ct.

Avez-vous compris ma demande ?

Sub controle()
Dim i As Long, j As Long
   j = 2
   For i = 1 To 300
      If Sheets("p").Cells(i, 4).Value = "A" Then
         j = j + 1
         Sheets("Ct").Range(Sheets("Ct").Cells(j, 1), Sheets("Ct").Cells(j, 10)).Value = _
            Sheets("p").Range(Sheets("p").Cells(i, 1), Sheets("p").Cells(i, 10)).Value
      End If
   Next i
End Sub

Bonjour

Il faut savoir où se trouve la liste déroulante --> sur quelle feuille et dans quelle(s) cellule(s) ?

Sinon en supposant qu'elle se trouve en A1, utilise ce code

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
Call controle
End If
End Sub

Dans la feuille où se trouve la liste déroulante, fais clique droite sur l'onglet puis choisis "visualiser le code" et place le code ci-avant.

A te relire

Dan

Nad-Dan a écrit :

Bonjour

Il faut savoir où se trouve la liste déroulante --> sur quelle feuille et dans quelle(s) cellule(s) ?

Je l'ai stipulé dans mon topic, merci à toi

-- Dim Fév 21, 2010 3:28 pm --

Par contre j'ai dû oublié de te dire quelque chose au sujet de ma macro. Il y a plusieurs noms dans la liste et donc plusieurs données différentes, sur la macro, ça peut être A, B, C, D, etc etc

Sub controle()
Dim i As Long, j As Long
   j = 2
   For i = 1 To 300
      If Sheets("p").Cells(i, 4).Value = "A" Then
         j = j + 1
         Sheets("Ct").Range(Sheets("Ct").Cells(j, 1), Sheets("Ct").Cells(j, 10)).Value = _
            Sheets("p").Range(Sheets("p").Cells(i, 1), Sheets("p").Cells(i, 10)).Value
      End If
   Next i
End Sub

re,

je l'ai stipulé dans mon topic, merci à toi

oups désolé...--> il faut remplacer A1 par C1 dans le code.

Remplace le code que je t'ai proposé par celui-ci :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("C1")) Is Nothing Then
val = Target
Call controle
End If
End Sub

Dans le module, où tu as placé la SUB CONTROLE, mets ceci juste avant :

Public val

Il serait bon de savoir à quoi correspond A, B etc... du texte ou des chiffres ??

Amicalement

Dan

Ben en fait le "A" ou autres sera un nom choisis par le biais de la liste déroulante.

re,

Ok. Remplace alors -->

Public val

par

Public Val as string

Amicalement

Dan

Un problème subsiste, les valeurs ne s'affichent pas, il y aurait un soucis avec le "?"

Sub ct()
Public Val As String
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("C1")) Is Nothing Then
Val = Target
Call controle
End If
End Sub

Sub controle()
Dim i As Long, j As Long
   j = 2
   For i = 1 To 300
      If Sheets("passage").Cells(i, 4).Value = "?" Then
         j = j + 1
         Sheets("Ct").Range(Sheets("Ct").Cells(j, 1), Sheets("Ct").Cells(j, 10)).Value = _
            Sheets("p").Range(Sheets("p").Cells(i, 1), Sheets("p").Cells(i, 10)).Value
      End If
   Next i
End Sub

-- Dim Fév 21, 2010 6:05 pm --

Voici un exemple d'à peu près ce que je veux faire.

274classeur1.zip (10.04 Ko)

Salut le forum

Essaye ceci

Sub controle(valeur As String)
Dim i As Long, j As Long
   j = 2
   For i = 1 To 300
      If Sheets("p").Cells(i, 4).Value = valeur Then
         j = j + 1
         Sheets("Ct").Range(Sheets("Ct").Cells(j, 1), Sheets("Ct").Cells(j, 10)).Value = _
            Sheets("p").Range(Sheets("p").Cells(i, 1), Sheets("p").Cells(i, 10)).Value
      End If
   Next i
End Sub

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("C1")) Is Nothing Then
Call controle(Target.Value)
End If
End Sub

Mytå

re, salut Myta,

Dj FA, hormis la proposition de Myta, je ne t'ai pas dit de placer "Public val as string" après "sub..." mais AVANT "sub controle". De plus ta "sub controle" doit être placée dans un module et non dans la feuille.

Dans ton post, c'est quoi le "sub ct" ??

Normal que cela ne fonctionne pas.

En résumé :

  • Public Val... : avant "sub controle"
  • la macro sub controle doit être placée dans un module (en VBA -> Insertion / module -> et coller le code
  • La macro "private sub worksheet..." placée dans la feuille contenant le liste déroulante (clique droite sur l'onglet --> choisis "visualiser le code" --> et coller le code.

Que tu prennes le code de Myta ou le mien, tu dois les mettre comme je te l'ai expliqué.

Le bouton ne sert à rien. Dès que tu choisiras dans la liste les codes seront activés automatiquement.

Dan

Sub ct, c'est une erreur de ma part, je suis un novice en Excel et je m'améliore chaque jour grâce à vous tous. Merci pour votre patience et merci Myta.

Re,

Si ton pb est terminé n'oublie pas de cocher le V de couleur vert à coté du bouton "éditer". Cela cloturera le fil.

A bientôt

Dan

Je suis dessus, dès que c'est résolu je le ferai.

-- Lun Fév 22, 2010 12:05 am --

Alors ça fonctionne très bien, mais j'ai encore deux questions à ce jour :

J'ai deux petits soucis

1er : j'ai un mot "par" que je ne souhaite pas que le macro copie.

2ème : J'ai des espaces avant et après mes données ex ( Bonjour ), comment les retirer ?

re,

1er : j'ai un mot "par" que je ne souhaite pas que le macro copie.

Dans la macro Sub Controle, essaie en remplaçant

If Sheets("p").Cells(i, 4).Value = valeur Then

par

If Sheets("p").Cells(i, 4).Value = valeur and Sheets("p").Cells(i, 4).Value <> "par" then

2ème : J'ai des espaces avant et après mes données ex ( Bonjour ), comment les retirer ?

Vois ce lien utilise la macro que j'ai proposée dans le dernier post de ce fil --> https://forum.excel-pratique.com/excel/formatage-et-macro-pour-un-listing-de-produit-t4427.html

Amicalement

Dan

Merci je teste ça.

Alors avec cette formule cela ne fonctionne pas

 If Sheets("p").Cells(i, 4).Value = valeur and Sheets("p").Cells(i, 4).Value <> "par" then

Par contre j'ai mis ça :

Range("D3:D30").Select
Selection.Replace What:="PAR", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Application.CutCopyMode = False

Et ça fonctionne

Celle-ci bloque à "Trim"

Sub supprimeespace()
'Macro par DAN le 25/02
Dim c As Range
For Each c In ActiveSheet.UsedRange
c = Trim(c)
c.Replace What:=Chr(13), Replacement:=""
Next c
End Sub

-- Mer Fév 24, 2010 1:01 pm --

Je cherche en attendant, je mets en résolu.

Range("D3:D30").Select
Selection.Replace What:="PAR", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Application.CutCopyMode = False

Ce code ralentit pas mal, la macro.

Je relance le topic afin de savoir si vous avez d'autres choses à me proposer ? merci

re,

remplace

If Sheets("p").Cells(i, 4).Value = valeur and Sheets("p").Cells(i, 4).Value <> "par" then

par

If Sheets("p").Cells(i, 4).Value = valeur OR Sheets("p").Cells(i, 4).Value <> "par" then

Pour le TRIM, ce code fonctionne mais sans voir le pb dans ton fichier je ne peux te dire plus.

Amicalement

Dan

Le code ne fonctionne toujours pas avec ma macro, mais bon je verrais plus târd.

Par contre pour le "trim" j'ai lu sur le net qu'il fonctionne qu'avec des lettres, sur ma liste j'ai des chiffres et des lettres.

re,

1er : j'ai un mot "par" que je ne souhaite pas que le macro copie.

Le mot se trouve dans quelle colonne ?

Par contre pour le "trim" j'ai lu sur le net qu'il fonctionne qu'avec des lettres, sur ma liste j'ai des chiffres et des lettres.

Mets un fichier ou mieux ton fichier avec données non confidentielles, ce sera plus simple que de multiplier les posts sans voir la finalité de ce que tu veux.

Autre chose, dans ton fichier exemple je viens de voir que tu as fusionné la ligne 1 et 2 en colonne C. J'avais un bug sur le code que je t'ai proposé et sur celui de Myta. Cela m'a prit du temps pour voir le pourquoi.

A ne jamais faire pour t'éviter les pb de bug macro. Que de nombre de fois je vois cela ...

Si tu veux une ligne plus large, agrandis ta ligne plutôt que de fusionner.

Amicalement

Dan

Ok je te fais un autre fichier dès que possible, merci pour ton temps consacré.

-- Sam Fév 27, 2010 6:57 pm --

Voici le clone de mon classeur, j'espère que ça ira, merci.

34classeur1.zip (8.08 Ko)
Rechercher des sujets similaires à "macro liste deroulante"