Récupérer données dans cellules

  • Initiateur de la discussion Initiateur de la discussion RONIBO
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

RONIBO

XLDnaute Impliqué
Bonjour,

J'aimerais récupérer des données situant dans une colonne et les mettre dans un combobox.

Dans mon fichier j'ai une feuille nommée "Répertoire", il y a une colonne nommée "Nom de la Société"

J'aimerais prendre cette colonne et transférer le contenu dans un combobox de mon usf (Mail)

J'aurais plusieurs conditions :

- Ne pas lister les doublons
- Dans le combobox mettre seulement les nom de société
- Trie de A à Z


Je vous joint un fichier exemple.

Merci d'avance.

A+
 

Pièces jointes

Re : Récupérer données dans cellules

Bonsoir RONIBO, Bonsoir le fil,

Peut-être une solution, rajouter l’instruction And Cel.Value <> "Nom de la Société" dans la boucle
Code:
For Each Cel In Plage
    If Not Dico.exists(Cel.Value) And Cel.Value <> "Nom de la Société" Then
        Dico.Add Cel.Value, Cel.Value
    End If
Next Cel

EDIT
Peut-être une deuxième solution :
Code:
Dim DerLig As Long
   
With Worksheets("Répertoire")
   DerLig = .Range("A1", .Range("A65535").End(xlUp)).Rows.Count
   If DerLig < 4 Then GoTo Fin:
   Set Plage = .Range("A4:A" & DerLig)
End With

' Suite du code

Fin:
For I = 0 To Dico.Count - 1
    Mail.ComboBoxListeClient.AddItem ListeCle(I)
Next I
Bonne nuit,

A+ Jack 2
 
Dernière édition:
Re : Récupérer données dans cellules

Bonsoir,

Merci Jack2 🙂

La première solution fonctionne parfaitement 🙂

J'en profite pour poser ma deuxième question car similaire à la première.

J'aimerais que dans l'étape deux (Sélections des contacts) me liste tout les salariés du client X de cette façon :

NOM et Prénom

Exemple :

J'ai un client avec deux contacts :
SOS BAT
Mr POTIER Richard
R.potier@sosbat.fr

Et

Mme PERLE Laura
l.perle@sosbat.fr

Si dans la sélection du client je sélectionne SOS BAT
J'aimerais qu'il me filtre les données de la feuille répertoire et me liste le NOM et Prénom des contacts du client SOS BAT

Sachant que les nom prénom sera égale à une adresse e-mail

Ex : si je sélectionne PERLE Laura, c'est comme si je sélectionné l.perle@sosbat.fr

Tu as une idée Jack2?

A+
 
Re : Récupérer données dans cellules

Bonsoir RONIBO, Bonsoir le fil,

Je pense que c'est possible, mais une fois que l'on a choisi par exemple "SOS BAT", est-ce que tu veux que l'on sélectionne les contacts dans une des combobox du "2 - Sélection de contacts "ou est-ce que l'on affiche tous les contacts correspondants dans une feuille avec nom, prénom et e-mail (chacun pouvant être sélectionné).

A+ Jack2
 
Re : Récupérer données dans cellules

Bonjour RONIBO, Bonjour le fil,

J'ai un peu modifié l'USF pour que les contacts s'affichent dans une liste où l'on peut cocher les contacts choisis qui sont transférés, via le bouton valider, dans un tableau TContacts(). Ce tableau contient le nom, le prénom et l'email, chacun étant séparé par un tiret. Au cas où tu l'aurais oublié, je t'ai mis dans le module2 (Cherche_Contact_2) comment récupérer un ou plusieurs de ces éléments à l'aide de la fonction Split. Le résultat s'affiche dans la feuille Test. Cela te permettra par exemple de n'afficher que le nom dans "sélection des contacts" tout en gardant l'adresse mail à disposition.

A+ Jack2
 

Pièces jointes

Re : Récupérer données dans cellules

Salut Jack2 🙂

Merci pour ce joli travail 😉, tu as géré

Tu as eu une excellente idée avec la listbox, je n'avais pas pensé à fonctionner comme sa, en plus ça évite de sélectionner le contact en doublons.

J'aurais des questions et des petites modifications.

A quoi sert le bouton "valider"

Dans la listbox on peut mettre seulement le nom et prénom?

Si bouton valider ne sert à rien on peut la remplacer par un bouton nommé "Info" qui me donnera l'adresse e-mail du client sélectionné.

A+
 
Re : Récupérer données dans cellules

Bonsoir RONIBO, Bonsoir le fil,

Pour afficher le nom et le prénom, sans perdre l'information e-mail, remplace :
Code:
ListBoxContact.List() = Application.WorksheetFunction.Transpose(TContacts)
Par
Code:
Dim Ts() As String, St As String
For i = LBound(TContacts) To UBound(TContacts)
    St = TContacts(i)
    Ts = Split(St, "-")
    ListBoxContact.AddItem Ts(0) & " " & Ts(1)
Next i
Tu as l'explication de Spilt dans module2 (cf. post précédent). Le bouton "valider" sert à transférer les contacts choisis dans un tableau de contacts (cf. post précédent) pour t'en servir dans la partie du code qui enverra les e-mails.

EDIT Même sans l’afficher, l'e-mail correspondant au contact reste exploitable. Fais fonctionner Sub Cherche_Contact_2 dans Module2 (cf. post précédent).

A+ Jack2
 
Dernière édition:
Re : Récupérer données dans cellules

Re,

Merci pour les explication Jack2

Pour mémoriser les mail je pense avoir une autre idée, je détaillerais une fois que j'aurais finis avec l'étape 3.

Je change les codes et reviens vers toi 🙂

Et pour le bouton "Info" que je t'ai parlé tu aurais une solution?

Vu qu'on a supprimé les mail de la liste box, j'aimerais afficher un msgbox concernant l'e-mail de la ligne sélectionnée

A+

Edit : J'ai changé le code est j'ai un message d'erreur "L'indice n'apparait pas à la sélection"
Tu as une idée?
 
Dernière édition:
Re : Récupérer données dans cellules

Bonsoir Jack2,

J'ai bien avancé sur l'usf 🙂

J'ai bien étudié le principal :

J'ai rencontré certains bugs :

1 - Lorsque qu'il y a aucun client dans la feuille "Répertoire" et que je sélectionne la ligne blanche du combobox de l'étape 1 : J'ai une erreur "argument ou appel de procédure incorrect" sur cette ligne :
LBListeContacts.List() = Application.WorksheetFunction.Transpose(TContacts)

2 - Lorsque je remplace :
ListBoxContact.List() = Application.WorksheetFunction.Transpose(TContacts)

Par :
Dim Ts() As String, St As String
For i = LBound(TContacts) To UBound(TContacts)
St = TContacts(i)
Ts = Split(St, "-")
ListBoxContact.AddItem Ts(0) & " " & Ts(1)
Next i

J'ai une erreur "L'indice n'appartient pas à la sélection"
Cette ligne :
For I = LBound(TContacts) To UBound(TContacts)

3 - Est ce que c'est normal lorsque je sélectionne un client dans l'étape 1, la taille de la listbox à l'étape 2 change ?

J'ai supprimé le bouton "Valider" pour la remplacer avec le bouton "Adresse e-mail" ===> Qui va me permettre de savoir l'adresse mail de la ligne sélectionnée.

J'ai pu lister les document souhaité dans l'étape 3 (Merci à Fhoest pour son aide🙂)

Sélectionne le client "CLIENT EXEMPLE" tu verras le résultat 🙂

Si ca te dérange pas on peut continuer à travailler sur ce fichier (Ronibo_3.xlsm) s'il te plait Jack2, car j'ai fais pas mal de modif dessus

Le dossier "Attestation de TVA" est à extraire dans le bureau (Ne pas oublier de changer le code ci dessous, mettre ton nom utilisateur 🙂)
Public Const CheminDossierAttestationTVA As String = "C:\Users\Admin\Desktop\Attestation de TVA\"
Le dossier "Ronibo" dans C:/

S'il te plait
 

Pièces jointes

Dernière édition:
Re : Récupérer données dans cellules

Salut Si,

Merci pour ce fichier 🙂 c'est sympa de te part,

Pas encore testé à 100%,

Mais voici ce que j'aimerais amélioré 🙂

1 - Ne pas mettre les adresses e-mail dans la listbox de l'étape 2

2 - Créer un bouton regarder les adresses e-email (comme tu as fais pour le bouton envoyer le mail)

3 - J'ai une erreur "Pas de cellules correspondante" lorsque la feuille Répertoire est vide

Merci encore 🙂

A+

Edite : en faite je veux seulement utiliser le bouton "Envoyer un mail" pour envoyer le mail au contacts avec les pièces jointes sélectionnées (mail type)

EDIT 2 : Un autre bug rencontré 🙂 :
Si je sélectionne aucun client à l'étape 1 et que je clique sur le bouton envoyer le mail, j'ai une erreur le sur le code ou il y a le msgbox 🙂

A+
 
Dernière édition:
Re : Récupérer données dans cellules

salut
1 - Ne pas mettre les adresses e-mail dans la listbox de l'étape 2
garder la colonne mais de largeur 0 pour ne pas la faire apparaître
2 - Créer un bouton regarder les adresses e-email (comme tu as fais pour le bouton envoyer le mail)
changer le nom du bouton et en prévoir un autre pour l'envoi"
3 - J'ai une erreur "Pas de cellules correspondante" lorsque la feuille Répertoire est vide
pas chercher plus que cela


Edite : en faite je veux seulement utiliser le bouton "Envoyer un mail" pour envoyer le mail au contacts avec les pièces jointes sélectionnées (mail type)
pas assez compétent, je laisse cela à d'autres

EDIT 2 : Un autre bug rencontré 🙂 :
Si je sélectionne aucun client à l'étape 1 et que je clique sur le bouton envoyer le mail, j'ai une erreur le sur le code ou il y a le msgbox 🙂
voir la correction (ajout d'un test)

A+

ci-joint une nouvelle version
 

Pièces jointes

Re : Récupérer données dans cellules

Salut à tous,

Merci pour le fichier SI 🙂

Alors il manque certain points à corriger : (Le précise pour voir ou on en est 🙂)

1 - Une erreur apparait "Pas de cellules correspondantes" sur cette ligne :

2 - J'ai pas réussi à mettre les prénoms dans la listbox "LBListeContacts" Dans ton exemple, tu as réussi mais y'avais un trou énorme entre le nom et prénom.

3 - Lorsque je clique sur tout décocher la listbox de l'étape 3 diminue de taille, bizarre ! ??

C'est tout ce que j'ai pu identifier 🙂


Si possible continuer à bosser sur ce fichier 🙂

Merci

Bonne fin de journée
 

Pièces jointes

Re : Récupérer données dans cellules

salut

Set P = Feuil2.[A4:A10000].SpecialCells(2)
provoque une erreur si la plage est vide. Je n'ai pas mis de test car je n'ai pas pensé qu'on pouvait utiliser le programme sans aucune société.
Pour initialiser les colonnes du contrôle ListBox, il faut les définir.
Pour éviter de multiplier les lignes de codes, j'utilise ce qu'Excel met à ma disposition* et ici, la fenêtre des Propriétés (F4 si pas visible). Donc voir l'image jointe.
ListBox.jpg

Pour la hauteur qui varie, je ne vois pas (suis pas allé jusque là).

* je me demande, par exemple, quel est l'intérêt de créer un bouton pour fermer l'UsF alors qu'on a la croix. Certains vont même jusqu'à la neutraliser (tout en la laissant) avec message à l'appui. Que faire quand la taille du formulaire est plus grande que l'écran ? Je ferme et m'en vais voir ailleurs.
 

Pièces jointes

  • ListBox.jpg
    ListBox.jpg
    284.7 KB · Affichages: 63
  • ListBox.jpg
    ListBox.jpg
    284.7 KB · Affichages: 66
Re : Récupérer données dans cellules

Bonjour le Fil,

Pour RONIBO, remplacer la procédure UserForm_Initialize() par :
Code:
Private Sub UserForm_Initialize()
Set D = CreateObject("Scripting.Dictionary")
On Error GoTo Fin
Set P = Feuil2.[A4:A6500].SpecialCells(2)
For Each C In P
    D(C.Value) = C.Value
Next
ComboBoxListeClient.List = D.items
Fin:
Err.Clear
End Sub

Pour Si..., la ligne ne trie pas les données. J'ai placé l'instruction hors Userform : pareil. Je ne vois pas où je me trompe. Si tu pouvais m'aide. Ce sont des solutions comme les aime DoubleZero qui font économiser du code.

EDIT Je crois que j'arrive un peu tard

A+ Jack2
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
701
Retour