Combiner 2 macros en 1 seule

Bonjour,

J'ai 2 macros dans la même feuille qui fonctionnent bien séparément.

Mais si elles sont l'une après l'autre, j'ai le message d'erreur suivant :

Erreur de compilation

Nom ambigu détecté : Worksheet_SelectionChange

avec surlignage de la 1ère ligne de la 2ème macro.

Comment les réécrire pour les garder ensemble et les faire fonctionner ?

Merci pour votre assistance.

1ère macro

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("L6:L10")) Is Nothing Then
Range("Q4").Value = Target.Value
End If
End Sub

2ème macro

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
If Not Intersect(Target, Range("H4")) Is Nothing Then
Target = [F4]
With Target.Validation
.Delete
.Add Type:=xlValidateList, Formula1:="=F4:F" & Range("F" & Rows.Count).End(xlUp).Row
End With
End If
'
End Sub

Nota : La 2ème macro cherche, en cliquant sur F4 (CLIENT), à afficher (CLIENT) en H4 (liste déroulante avec CLIENT en première position)

Bonjour FAT, le forum,

Nom ambigu détecté : Worksheet_SelectionChange

Tu ne peux avoir qu'un seul Evènement Change par feuille....

Essaies ainsi:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Not Application.Intersect(Target, Range("L6:L10")) Is Nothing Then
  Range("Q4").Value = Target.Value
 End If

 If Not Intersect(Target, Range("H4")) Is Nothing Then
  Target = [F4]
   With Target.Validation
   .Delete
   .Add Type:=xlValidateList, Formula1:="=F4:F" & Range("F" & Rows.Count).End(xlUp).Row
   End With
 End If
End Sub

Cordialement,

Merci pour la proposition, mais ça coince au niveau de Add Type.

Je ne suis pas sûr de : Formula1:="=F4:F" & Range("F" & Rows.Count).End(xlUp).Row

Faut-il garder F ou autre chose ?

Mystère et boule de gomme !

Re,

Je ne sais pas pas trop ce que tu cherches à faire, vois si ce fichier peut t'aider....

Je crées une liste déroulante en B1 à partir de F4 : F et dernière ligne.

7liste.xlsm (20.06 Ko)

Cordialement,

Bonsoir,

Par rapport à ton fichier "liste.xlsm", je cherche à afficher en B1 (liste déroulante) le 1er élément de la liste F4:F13 en cliquant sur le bouton "Liste B1" en D2-D3 (comment faire ce bouton ?). j'aurais alors CLIENT en B1à chaque clic.

Merci pour ta contribution.

Re,

comment faire ce bouton ?

  1. Clic sur développeur
  2. Insérer
  3. Tu choisis le bouton en haut à gauche.
  4. Tu le dimensionnes et positionnes sur ta feuille.
  5. Tu lui affecte la macro.

créer un bouton

Cordialement,

Re,

En cliquant sur ton bouton "Liste en B1", rien ne s'affiche en B1 !

Le but est d'afficher en B1 le 1er élément de la liste F4:F13, c'est à dire dans ce cas là "1".

Peut-on y remédier ?

Merci pour la recette "bouton", c'est OK.

Cordialement

Fat

Re,

En cliquant sur ton bouton "Liste en B1", rien ne s'affiche en B1 !

Tu as demandé une liste déroulante en B1,

  • Lorsque tu ouvre le fichier et que tu cliques sur B1: la cellule est vide
  • Si tu cliques sur le bouton, une liste déroulante est créée en B1, si tu cliques en B1, tu constateras que la liste est bien présente, tu sélectionnes alors la valeur souhaitée.

Si tu souhaites une valeur par défaut, on peut lui attribuer la valeur de F4.

Sub test()
 Dim liste
   ActiveWorkbook.Names.Add Name:="liste", RefersTo:="=" & Sheets("Feuil1").Range("F4:F" & Sheets("Feuil1").Range("F" & Rows.Count).End(xlUp).Row).Address
       With Range("B1").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=liste"
       End With
        Range("B1") = Range("F4") '.........valeur par défaut
End Sub
4listev2.xlsm (19.20 Ko)

Bonne soirée,

Bonjour xorsankukai,

Désolé de continuer à t'embêter avec mes problèmes, mais j'aimerais que tu puisses jeter un coup d'œil au fichier ci-joint.

J'ai essayé d'expliquer et d'illustrer mon objectif.

Bonne journée

Cordialement

Fat

5test-client.xlsx (24.21 Ko)

Bonjour Fat, le forum,

Pas de souci....

J'ai mis tes données de la feuille CLT sous forme de tableau structuré et définit un nom (liste) pour son contenu.

capture

Comme ça, si tu rajoutes où supprimes des noms, la liste déroulante reste à jour.

A chaque clic sur F4, on affiche la première valeur de la liste soit CLIENT (CLT!B5).

capture2

Cordialement,

Bonjour,
Oh, merci xorsankukai, c'est parfait !
Juste une question : comment as-tu fait pour traiter la cellule F4 (CLIENT) sans bouton ?
Moi, j'ai dû installer un bouton, mais je préfère ta solution.
Cordialement
Fat

Re,

Merci pour ton retour,

comment as-tu fait pour traiter la cellule F4 (CLIENT) sans bouton ?

Je pensais que tu aurais compris avec la photo que je t'avais jointe.

J'utilise l'évènement SelectionChange de la feuille avec F4 pour cible: à chaque clic sur F4, on écrit la valeur de CLT!B5 (CLIENT) en H4.

  • Tu ouvres l'éditeur VBA avec ALT + F11.
  • Tu copies ce code dans le module de la feuille SAI:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Not Application.Intersect(Target, Range("F4")) Is Nothing Then
  cancel = True
  Range("H4") = Sheets("CLT").Range("B5")
 End If
End Sub
  • Tu enregistres ton classeur au format xlsm (prise en charge des macros).

Bonne continuation,

A bientôt,

Merci xorsankukai, tu es un chef !

Tout est en ordre et je suis satisfait du résultat.

A une autre fois peut être et merci encore.

Amitiés

Fat

Rechercher des sujets similaires à "combiner macros seule"