VBA liste déroulante avec données contenant ","
Bonjour mesdames et messieurs,
J'essaie de faire une liste déroulante (validation) à partir de données que j'extrais d'une BD mais les données contiennent une virgule.
Exemple des données extraites : Tremblay, Jean (STA)
J’ai essayé de deux façons. La première avec la variable « listUsers » qui donne le message d’erreur « Erreur d’exécution ‘1004’ : Erreur définir par l’application ou par l’objet. »
Et la deuxième avec la variable « listUsers2 », vu que c’est un String et qu’il contient plein de virgule, cela sépare les données à chaque virgule.
Voici le code :
Sub WriteGALMembersToExcel2()
'On Error GoTo ErrorHandler
Dim olApp As Outlook.Application
Dim olNS As Outlook.Namespace
Dim olAL As Outlook.AddressList
Dim olEntry As Outlook.AddressEntry
Dim oldlMember As Outlook.AddressEntry
Dim listUsers As Variant
Dim listUsers2 As String
Set olApp = Outlook.Application
Set olNS = olApp.GetNamespace("MAPI")
Set olAL = olNS.AddressLists("Liste d'adresses globale")
Set olEntry = olAL.AddressEntries("EVA STA-INSP - (Inspection)")
Dim lMemberCount As Long
lMemberCount = olEntry.Members.Count
ReDim listUsers(1 To lMemberCount)
For i = 1 To olEntry.Members.Count 'boucle pour tous les données à extraire
listUsers(i) = olEntry.Members(i) 'Ajout des données dans la variable style array
listUsers2 = listUsers2 & "," & olEntry.Members(i) ' 'Ajout des données dans la variable style String
Next
listUsers2 = Right(listUsers2, Len(listUsers2) - 1) ' Pour enlever la virgule du debut
With Range("A1").Validation 'Ajout de la liste deroulante
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=listUsers 'premier essai avec Variant et autre essai avec variable String listUsers2
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = "Sélection"
.ErrorTitle = ""
.InputMessage = "Liste des usagés"
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Set olApp = Nothing
Set olNS = Nothing
Set olAL = Nothing
Set olEntry = Nothing
End SubJe sais que je peux coller les données et faire un Range avec les cellules mais j’aimerais éviter.
Merci infiniment de votre aide!
Bonjour à tous,
Est-ce moi qui n'a pas bien expliqué mon problème ou c'est que personne n'y trouve de solution??
Merci
Re-Bonjour,
Alors c'est tout?? Personne n'est assez fort en VBA pour résoudre mon problème??
Bonjour,
effectivement, je ne suis pas sûr d'avoir tout compris.
Quand je vois ton code, je me dis que tu maîtrises quand même donc pour la proposition qui suit, je ne suis pas convaincu que tu aies besoin de moi :
pour moi le plus simple est de repérer la virgule et de considérer ce qui est avant comme la ville, puis ce qui est après comme le nom et donc de faire ta cuisine sur ces éléments ...
mais quelque chose a dû m'échapper
à +
Bonjour
Essaie ainsi :
Option Explicit
Public Sub WriteGALMembersToExcel2()
Dim olApp As Outlook.Application
Dim olNS As Outlook.Namespace
Dim olAL As Outlook.AddressList
Dim olEntry As Outlook.AddressEntry
Dim oldlMember As Outlook.AddressEntry
Dim listUsers As Variant
Dim lMemberCount As Long
Set olApp = Outlook.Application
Set olNS = olApp.GetNamespace("MAPI")
Set olAL = olNS.AddressLists("Liste d'adresses globale")
Set olEntry = olAL.AddressEntries("EVA STA-INSP - (Inspection)")
lMemberCount = olEntry.Members.Count
ReDim listUsers(1 To lMemberCount)
For i = 1 To olEntry.Members.Count 'boucle pour tous les données à extraire
listUsers(i) = olEntry.Members(i) 'Ajout des données dans la variable style array
Next
With Range("A1").Validation 'Ajout de la liste deroulante
.Delete
.Add Type:=xlValidateList, _
AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, _
Formula1:=Join(listUsers, ",")
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = "Sélection"
.ErrorTitle = ""
.InputMessage = "Liste des usagés"
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Erase listUsers
Set olApp = Nothing
Set olNS = Nothing
Set olAL = Nothing
Set olEntry = Nothing
End SubMerci beaucoup ExcelBeginner et Jean-Eric pour vos réponses. Désolé du délais mais je n'ai jamais reçu de notification pour vos réponses.
@ExcelBeginner Je ne suis pas un pro de la programmation. Un partie du code à été emprunté sur un autre forum
@Jean-Eric de ta façon, on obtient le même résultat qu'avait ma deuxième solution. Vu que ce que j'extrais contient une virgule et que pour séparé des données dans une validation de type liste on utilise la virgule, le résultat se retrouve sur deux lignes.
exemple de donnée :
Nom, Prénom (Groupe)
Nom2, Prénom2 (Groupe)
Résultat dans la liste déroulante:
Nom
Prénom (Groupe)
Nom2
Prénom2 (Groupe)
Bonjour,
Pour résumer, ce n'est donc pas la virgule qui nous intéresse.
Dans ton "exemple de donnée", quel le caractère (séparateur), pour passer d'une ligne à l'autre?
Cdlt.
Bonjour,
J'ai manqué de précision dans ma précédente réponse.
Les données que j'extrais sont sous la forme "Nom, Prénom (Groupe)" sur une seule ligne et j'ai besoin de les garder sous cette forme dans la liste déroulante. Mais avec ta façon de faire (aussi avec ma deuxième façon), on ce résultat ce retrouve sur deux lignes séparé ou est la virgule.
J'ai joint un exemple concret. Dans cet exemple j'ai mis la liste des données dans les cellules A3:A9 mais il faut comprendre que dans ce que je veux faire, les données proviennent d'Outlook. Vous allez voir ce que ça donne en F5.
Merci encore de prendre le temps!