VBA ne reconnait pas cel link d'un menu deroulant

Bonjour à vous tous;

j'ai créé un menu deroulant avec une plage de donnée de E1 à E7, la cel link est A1

j'ai crée un code VBA pour afficher une feuille et l'imprimer si la valeur de cel link est 2

le code fonctionne dans une seul situation: il faut que j'Entre la valeur 2 par le clavier et non le resultat du choix dans le menu qui est E2.

merci d'Avance pour votre aide

Sub Worksheet_Change(ByVal Target As Range)

If Range("a1").Value = 2 Then
    Sheets("Sheet3").Select
    Sheets("Sheet4").Visible = True
    Sheets("Sheet4").Select
    Sheets("Sheet4").Range("B8").Value = InputBox("Entrer le nom")

Application.Dialogs(xlDialogPrint).Show
Sheets("Sheet4").Visible = False
Sheets("Sheet3").Select
Range("A1").Clear

Range("c13").Select

End If

End Sub

Bonsoir,

Je crois que tu dois tester le contenu de ton Combobox avant

If test.ComboBox1 = "a" Then Sheets("Sheets3").Range "A1" = 2

Enfin me semble-t-il

Bonjour à tous,

En fait c'est un peu plus compliqué : quand vous sélectionnez un item dans la liste, même si cela fait changer la valeur en A1 en réalité le classeur ne le "voit pas" et donc l'évènement Worksheet_Change n'est pas appelé. Et donc votre code n'est pas appelé. C'est pourquoi, à l'inverse, quand vous entrez la valeur manuellement en A1, alors le classeur "le voit" et lance la macro.

Selon moi la solution la plus simple c'est encore de simplement utiliser la validation des données sur A1 (ou B2 dans l'exemple). On a une liste déroulante avec les choix directement dans la cellule, et puisque c'est une action utilisateur, on lance bien l'event.

EDIT : voir fichier joint ici : lien

Et ci-après votre code revu :

Sub Worksheet_Change(ByVal Target As Range)

  If Range("a1").Value = 2 Then
    With ThisWorkbook.Sheets("Sheet4")
      .Visible = True
      .Activate
      .Range("B8").Value = InputBox("Entrer le nom")
      Application.Dialogs(xlDialogPrint).Show
      .Visible = False
    End With

    ' quand on travaille sur la feuille qui lance l'event, il vaut mieux les desactiver
    Application.EnableEvents = False
    With Me
      .Activate
      .Range("A1").Clear
      .Range("c13").Select
    End With
    Application.EnableEvents = True
  End If
End Sub

Bonjour Saboh12617: Merci pour votre reponse. je n'ai jamais travaillé avec les activex. je ne sais pas comment faire des menu deroulant avec les activex.

J'ai telechargé votre fichier, j'ai choisi la valeur a avec l'index 2, sans que l'event se declenche

Excusez-moi, je n'avais pas fait attention au fait que votre macro originale supprimait la cellule A1, il vous manquait donc la formule :

=INDEX(Table1[Index];EQUIV($B$2;Table1[Valeur];0))

Et dans le code, retirer le Range("A1").Clear. Ci-après fichier corrigé.

superbe ca marche merci infiniment

Content d'aider, n'oubliez pas de cloturer le post. Bonne fin de journée.

avant de cloturer le sujet j'ai une question: est ce qu'on peut utiliser l'Event calculate dans le code vba de la feuille sheet4

merci d'avance

avant de cloturer le sujet j'ai une question: est ce qu'on peut utiliser l'Event calculate dans le code vba de la feuille sheet4

merci d'avance

Bah ça dépend, on peut tout faire. Dites moi plutot quel est votre objectif final, qu'on réfléchisse ensemble à la manière la plus pratique pour le faire.

au lieu d'Avoir des if imbriqués dans un seul code pour les autres index, il est preferable d'Avoir un code pour chaque index qui correspond à l'impression de chaque feuille

peut etre utiliser le code avec case au lieu de if

Je vois, je crois que j'ai compris : vous voulez sélectionner une feuille parmis la liste, et imprimer celle-ci.

Alors on pourrait utiliser Select Case, mais ça reste assez "statique" : si vous rajoutez une feuille ou en enlevez une, ça pourrait planter. Si vous voulez, je vous propose de procéder ainsi (On va reprendre votre userform) :

1. Lorsque vous cliquez sur un bouton, l'UF s'affiche avec la liste des noms de feuilles du classeur (il les scan en direct). On peut en masquer certaines si vous voulez (donnez les noms correspondants).

2. Ensuite quand l'utilisateur choisi une feuille dans le menu déroulant de l'UF, on pourrait aussi avoir dans l'userform une textbox où vous indiquez le "nom" qu'on mettra en B8.

3. Puis, quand c'est tout bon, un bouton "imprimer" qui copie le nom en B8 et imprime la feuille sélectionnée.

C'est bien ça l'idée ? N'hésitez pas à compléter.

Effectivement

je sais utiliser les userform, mais je dois m'initier au controle activex.

Bonjour,

Voir ci-joint le fichier MAJ. Vous pouvez ajouter/supprimer des feuilles pour tester. Le code est dans le module de l'UF, et dans votre module1 il y a un mini sub pour lancer l'UF.

Le code utilisé dans l'Userform :

Option Explicit

Private Sub UserForm_Initialize()
  ' ajout des noms de feuille
  Dim sht As Worksheet
  With Me.ComboBox1
    For Each sht In ThisWorkbook.Worksheets
      .AddItem sht.Name
    Next sht
  End With
End Sub

Private Sub CommandButton1_Click()
  ' verifications
  If Me.ComboBox1.Value = vbNullString Then
    MsgBox "Veuillez d'abord sélectionner une feuille", vbExclamation + vbOKOnly, "Erreur"
    Exit Sub
  End If
  If Me.TextBox1.Value = vbNullString Then
    MsgBox "Veuillez d'abord entrer un nom pour l'impression", vbExclamation + vbOKOnly, "Erreur"
    Exit Sub
  End If

  ' on peut imprimer
  With ThisWorkbook.Worksheets(Me.ComboBox1.Value)
    .Visible = True
    .Activate
    .Range("B8").Value = Me.TextBox1.Value
    Application.Dialogs(xlDialogPrint).Show
    On Error Resume Next
    .Visible = False
    On Error GoTo 0
  End With

  ' continuer ou quitter
  If MsgBox("Voulez-vous imprimer une autre feuille ?", _
    vbQuestion + vbYesNo, "Quitter l'UserForm") = vbNo Then Unload Me
End Sub

Merci beaucoup de la part d'un debutant en VBA

Au plaisir

j'Avais deja utilisé un USF qui contient des boutons pour chaque feuille: on clique sur le bouton de chaque feuille, qui demande d'Entrer le nom puis imprimer puis cacher la feuille

exemple: dans cet exemple on n'a pas besoin d'Entrer le nom dans B8

Private Sub CommandButton7_Click()
Sheets("Lot 1-2").Visible = True
Sheets("Lot 1-2").Select
Unload Me
Range("A8").Select

Application.Dialogs(xlDialogPrint).Show

Sheets("Lot 1-2").Visible = False
Sheets("Order").Select
Range("c13").Select
Impression.Show
End Sub

Rebonjour

je viens de m'initier au conbtrol activex avec la surprise que le code qui ne marchait pas en control formulaire, fonctionne sans changement. voici le code du combox du control activex en editant bien sur les proprietés du activex cell link, listfillrange et listrow, il suffit maintenant seulement de generaliser pour plusieurs feuilles pre-concu avec la condition case select:

Private Sub ComboBox1_Change()

If Range("a2").Value = "a" Then
    Sheets("Sheet3").Select
    Sheets("Sheet4").Visible = True
    Sheets("Sheet4").Select
    Sheets("Sheet4").Range("B8").Value = InputBox("Entrer le nom")

Range("B8").Select
Application.Dialogs(xlDialogPrint).Show
Sheets("Sheet4").Visible = False
Sheets("Sheet3").Select
Range("A2").Clear

Range("c13").Select
Else: Exit Sub
End If

End Sub

le meme code qui fonctionne automatiquement en control activex mais pas automatiquement en mode control formulaire

Rechercher des sujets similaires à "vba reconnait pas cel link menu deroulant"