Formulaire Userforms / liste par cascade / recherche V / Mise en forme

Bonjour à tous,

Je viens vers car je suis actuellement en train de réaliser un formulaire qui doit permettre de générer un document en fonction des éléments indiqués sur mon Userforms.

Cependant je suis confrontée à divers problèmes et manque de connaissance en la matière qui m'empêche de mener à bien mon projet ...

1. Dans mon Formulaire, le commercial doit indiquer son secteur, puis doit choisir le magasin qu'il souhaite visiter.

Cependant, je ne sais pas comment faire pour faire la liaison entre les 2 listes.

2. De plus dans mon document que je génère j'aimerais faire apparaître le prénom du commercial et non son matricule (qu'il doit remplir dans le Userform). Cependant, encore une fois, je ne sais pas comment procéder entre faire le lien avec ma base de données/ mon formulaire et mon document généré. Existe-il un équivalant de la recherchev en vba ? ^^

En pièce jointe, la base de données et mon fichier Test xlsm qui permet de générer mon document.

Je vous remercie par avance grandement pour votre aide.

24base.xlsx (307.31 Ko)
18test.xlsm (38.12 Ko)

Bonjour Violaine,

La question que je me pose est: "pourquoi utiliser deux fichiers distincts ?" Ça complique les choses, d'une part et ça va t'obliger à vérifier, chaque fois que tu voudras accéder à ton fichier "Base" qu'il n'est pas déjà ouvert.

Bonjour U. Milité,

Je te remercie tout d'abord pour l'attention portée à ma demande.

Pour plusieurs raisons :

Lors de l'envoi de mes 2 documents précédents, j'ai fortement allégé mon fichier base.

En fait, j'ai déjà crée, il y a quelques temps, un fichier qui me génère un "Plan de vente personnalisé" avec photos / codes barres par l'intermédiaire d'un formulaire réalisé sans userforms mais avec boutons filtres macros formes de filtres . Cependant, il est assez lourd et connait des dysfonctionnements, les filtres et sous filtres ne s'opèrent pas correctement, à l'impression certaines photos n'apparaissent pas, le fichier ne peut pas être envoyé et la confidentialité des données n'est pas assurée (car sur un même fichier).

Le fichier est à destination de plusieurs utilisateurs

C'est pourquoi, on m'a conseillé de refaire mon fichier sous forme de Userforms sous format xlsm ou xlam :

Pour assurer la confidentialité des données, rendre le fichier moins lourd, plus facile d'utilisation ... L'objectif est que les utilisateurs téléchargent le fichier Base toutes les semaines pour l'actualisation des données.

Bonsoir,

Pas certain que tout ça réponde à ma question, mais bon ... à l'usage, tu verras bien si tu rencontres des soucis avec le fichier selon qu'il soit (ou non) déjà ouvert (surtout s'il l'est dans une autre instance d'Excel)

Déclare une variable dans ton Module1: Dim nomComm As String

Modifie ta Sub Initialize comme suit:

Private Sub UserForm_Initialize()
    Varchemin = ActiveWorkbook.Path & "\"
    Set MonClasseurBase = Application.Workbooks.Open(Filename:=Varchemin & "Base.xlsx", ReadOnly:=True)
    With MonClasseurBase.Sheets("PARC CS")
        listeSecteurs = .Range("B2:B" & .Cells(Rows.Count, 2).End(xlUp).Row) 'liste des n° de secteurs
    End With
    Me.ComboSecteur.List = listeSecteurs
End Sub

et ajoute la procédure suivante au code de ton UserForm:

Private Sub ComboSecteur_AfterUpdate()
    If ComboSecteur.ListIndex = -1 Then Exit Sub
    nomComm = MonClasseurBase.Sheets("TEL CS").Cells(ComboSecteur.ListIndex + 2, 2) 'nom du commercial (??)
    With MonClasseurBase.Sheets("PARC CS")
    col = Application.Match(ComboSecteur.Value, .[1:1], 0) 'colonne correpondant au secteur choisi
    If IsError(col) Then MsgBox "Secteur inconnu": Exit Sub
        listeMag = .Range(.Cells(2, col), .Cells(Rows.Count, col).End(xlUp))
    End With
    ComboMagasin.List = listeMag
End Sub

Je me suis arrêté là (tu parles de matricules des commerciaux ... que je n'ai pas vus; la variable nomComm stocke le prénom voisin du n° de secteur en feuille "TEL CS" )

Merci beaucoup pour votre aide.

Précisons :En fait, pour les noms des commerciaux. Je ne souhaite pas que le nom apparaissent sur le Userforms mais j'aimerais qu'ils apparaissent directement sur mon document généré au niveau de votre interlocuteur (à la place du numéro de secteur actuellement).

Mais je ne sais pas comment faire la liaison entre les 2 ... :/

Bonjour,

Je ne souhaite pas que le nom apparaissent sur le Userforms mais j'aimerais qu'ils apparaissent directement sur mon document généré au niveau de votre interlocuteur (à la place du numéro de secteur actuellement)

Il aurait fallu que tu me dises si le nom du commercial correspond bien aux prénoms (colonne B de la feuille "TEL CS", en regard du n° de secteur) Si oui, alors il te suffit d'insérer en cellule D6 de ton modèle, la valeur affectée à la variable "nomComm".

En clair, dans ta Sub Cmd_Ok_Click(), écris:

MonClasseurFinal.Worksheets(1).Range("D6").Value = nomComm

Oui, il s'agit bien des noms des commerciaux. C'est ce que je vais faire. Merci !

J'ai appliqué ce que vous m'avez indiqué. Mais ça ne fonctionne pas. J'ai dû faire une erreur mais où ? :/

17terrena.xlsm (37.99 Ko)

Bonjour,

Désolé: en déplacement une bonne partie de la journée

Je ne vois pas de déclaration de la variable nomComm dans le Module1 (sa portée se limite donc à la procédure dans laquelle elle est utilisée). Avec tes deux autres déclarations de variables globales, ajoute

Public nomComm As String

Attention, dans ta Sub Cmd_Ok_Click(),, tu as un

ActiveWokBook.SaveAs

(ce n'est pas de la cuisine chinoise, que diable !

Attention: petite correction à apporter à ma proposition ici:

nomComm = MonClasseurBase.Sheets("TEL CS").Cells(ComboSecteur.ListIndex + 2, 2) 'nom du commercial (??)

... c'est +1 qu'il faut écrire, au lieu de +2

Faute de temps, je n'ai pas pu vous répondre plus vite.

>> Merci beaucoup pour la solution transmise. Cela fonctionne !

J'ai pu appliquer la même chose pour y mettre les tels.

Je suis cependant confrontée aujourd'hui à d'autres soucis ... :/

1. Je souhaite faire apparaître automatiquement sur mon userform l'entrepôt et l'enseigne ( en fonction de mon onglet "Base clients")

J'ai crée ce code :

Private Sub ComboMagasin_AfterUpdate()

If WorksheetFunction.CountIf(MonClasseurBase.Sheets("Base clients").Range("A:A"), Me.ComboMagasin.Value) = 0 Then

MsgBox "Ce magasin n'existe pas. Il n'est pas rattaché à une centrale. Merci d'avertir le siège du dysfonctionnement", vbInformation + vbOKOnly, "Magasin non trouvé"

End If

With Me

.Z_Entrepot = Application.WorksheetFunction.VLookup(CLng(Me.ComboMagasin), MonClasseurBase.Sheets("Base clients'").Range("A:D"), 4, 0)

End With

End Sub

Mais, il ne fonctionne pas ...

2. De plus j'aimerais faire apparaître en fonction de l'enseigne auquel le magasin est rattaché la photo correspondante sur le Userform ainsi que sur le document généré. Mais, sous VBA je ne sais pas vraiment comment appréhender la manip.

J'ai rajouté la liste des logos sur le fichier base.

Je vous remercie encore une fois par avance pour votre aide. ^^

16base.xlsx (838.61 Ko)
14test.xlsm (43.70 Ko)

Bonsoir Violaine,

Ton code pourrait presque fonctionner ... si ce n'était cet abominable CLng(Me.ComboMagasin) dans ton VLookup. Convertir du texte (le nom du magasin) en Long, c'est un peu curieux (ceci étant un euphémisme ! )

Par ailleurs, dans le cas présent, il vaut mieux utiliser l'événement Change. Ton code devient donc:

Private Sub ComboMagasin_Change()
    If WorksheetFunction.CountIf(MonClasseurBase.Sheets("Base clients").Range("A:A"), Me.ComboMagasin.Value) = 0 Then
    MsgBox "Ce magasin n'existe pas. Il n'est pas rattaché à une centrale. Merci d'avertir le siège du dysfonctionnement", vbInformation + vbOKOnly, "Magasin non trouvé"
    End If
    With Me
    .Z_Entrepot = Application.WorksheetFunction.VLookup(Me.ComboMagasin, MonClasseurBase.Sheets("Base clients").Range("A:D"), 3, 0)
    End With

End Sub

Attention: si le nom du magasin n'existe pas, ton message s'affichera bien ... mais la suite du code va tout de même s'exécuter. Il faudrait un Exit Sub dans ton If, après le MsgBox.

Ton code n'est sans doute pas le plus performant, mais au moins tu ne devras apporter que de légères adaptations.

Pour les logos, pas trop le temps ce soir ... mais il faudrait que les noms des enseignes de la feuille logo correspondent à celles qui figurent en colonne C de la feuille "Base clients" (je présume) ... ça ne semble pas être le cas ? (à moins que j'aie manqué une info)

En effet ... Merci beaucoup pour l'usage de l'euphémisme .^^

>>J'ai modifié ma base pour être en raccord avec l'affichage enseigne.

4base.xlsx (838.74 Ko)

Merci beaucoup pour l'usage de l'euphémisme

J'aime bien la fée Misme: elle fait les chose avec délicatesse

Tu ne dis pas par contre si les adaptations fonctionnent ?

Pour l'image dans ton UserForm, je stockerais les images au même emplacement que tes deux classeurs (plutôt que dans une feuille de calcul). Je nommerais chacune de ces images du nom de l'enseigne concernée (avec une extension .gif, par exemple: CARREFOUR.gif)

Dans ton UserForm, j'ai ajouté un contrôle "Image" que j'ai nommé logo, avec sa propriété PictureSizeMode en mode "Zoom". Tu verras que dans ta Sub ComboMagasin_Change(), il n'y a qu'une ligne de code ajoutée

Je te laisse le soin de poursuivre les 2-3 petits tests que je viens de faire ici.

17test.xlsm (41.93 Ko)

Bonjour U. Milité,

Oui, oui, les applications réalisées plus tôt fonctionnent, tip-top, merci !!

Pour les photos des logos j'ai appliqué la solution préconisée, sous format Gif, cela fonctionne sur Userform.

Cependant quand je fais la manip pour faire afficher les logos sur mon doc, ça ne fonctionne pas :

MonClasseurFinal.Worksheets(1).Range("K5").Value = Me.Logo.Picture

Est-ce parce que la cellule est à l'origine plus petite que le logo ?

Je suis en train de poursuivre le doc, le "nerfs de la guerre" : A savoir l'affichage des produits en fonction du référencement entrepôt.

J'ai ajouté dans mon fichier base, l'onglet "Modele1" il s'agit de l'aperçu de comment j'aimerai que ce soit en forme.

J'ai également ajouté dans l'onglet "Paramètreslocaux" (qui sera màj chaque semaine) : les données / référencements entrepôt.

Pour le code, je ne sais pas vraiment par où commencer ...

1/ Pour les photos, j'imagine que la meilleure solution reste le lien gif ( cela nécessite que toutes les photos soient enregistrées de la même façon, par le code produit)

2/ Pour la rubrique libellée : cela revient à concaténer sous VBA plusieurs cellules

3/ Mais comment gérer /automatiser / appeler l'affichage des produits pour qu'ils apparaissent et soient bien classés en rubrique / Branche / Marque / Filières / Espèces ?

Encore merci par avance pour l'aide accordée.

15test1.xlsm (37.12 Ko)

Bonjour,

Je crois bien que tu m'as perdu en route, là !

Tu annonces une feuille "Modèle 1" ... mais je ne trouve qu'une feuille "Modèle 2" dont la structure et les objectifs apparents n'ont plus rien à voir avec le modèle précédent

S'ajoute également la feuille "Paramètreslocaux" dont tu n'expliques pas vraiment ce qu'il faut faire, mais qui annonce des complications de taille ! Ce n'est plus une usine à gaz que tu construis: c'est une centrale au charbon "à la russe"

Si les choses sont claires pour toi, ce n'est pas du tout mon cas et de ce que je crois comprendre, ce ne sont pas les quelques passages que je peux faire ici, entre d'autres activités, qui suffiront !

Rechercher des sujets similaires à "formulaire userforms liste cascade recherche mise forme"