liste déroulante suivi de l affichage d adresse

rudy

XLDnaute Occasionnel
bonjour a tous, dans la PJ je cherche a afficher l adresse d un fournisseur suivant le choix fait sur une liste déroulante ( onglets reclamation 1 )

le souci et que cela se trouve sur deux onglets ( 1 onglets nommer RECLAMAION et l autre nommer FOURNISSEUR )
merci d avance
A+
 

Pièces jointes

  • Classeur10.xls
    22 KB · Affichages: 136
  • Classeur10.xls
    22 KB · Affichages: 138
  • Classeur10.xls
    22 KB · Affichages: 130

PMO2

XLDnaute Accro
Re : liste déroulante suivi de l affichage d adresse

Bonjour,

Une piste en VBA qui utilise un OleObject (ListBox) créé dynamiquement.

1) copiez le code suivant dans un module standard
Code:
'°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
'°°° Faire référence à la librairie     °°°
'°°° Library MSForms                    °°°
'°°° Microsoft Forms 2.0 Object Library °°°
'°°° C:\WINDOWS\system32\FM20.DLL       °°°
'°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

'### Constantes à adapter ###
Public Const BDD_FOURNISSEURS As String = "fiche fournisseur"
Public Const OLE_NAME As String = "ole_perso_pmo"
Public Const CELLULE_LIEE As String = "d3"
Public Const CELL_DEST As String = "g3"

Const VALIDITE_CELLULE As String = "c1"
Const VALIDITE_VALUE As String = "Réclamation"
Const CALAGE As String = "Identification du fournisseur"
'############################

Sub ChoixFournisseur()
Dim S As Worksheet
Dim Plage As Range
Dim R As Range
Dim firstAddress$
Dim T()
Dim var
Dim i&
Dim OleX As OLEObject
Dim LB As MSForms.ListBox
With ActiveSheet
  If .Range(VALIDITE_CELLULE) <> VALIDITE_VALUE Then Exit Sub
  If .Range(CELLULE_LIEE) <> "" Then Exit Sub
End With
Set S = Sheets(BDD_FOURNISSEURS)
Set Plage = S.UsedRange
With Plage
  Set R = .Find(CALAGE, LookIn:=xlValues)
  If Not R Is Nothing Then
    firstAddress$ = R.Address
    Do
      i& = i& + 1
      ReDim Preserve T(1 To 2, 1 To i&)
      T(1, i&) = R.Offset(2, 0)
      T(2, i&) = R.Offset(-1, 0).Address
      Set R = .FindNext(R)
    Loop While Not R Is Nothing And R.Address <> firstAddress$
  End If
End With
var = Application.WorksheetFunction.Transpose(T)
Set R = ActiveSheet.Range(CELLULE_LIEE).Offset(0, -1)
Set OleX = ActiveSheet.OLEObjects.Add( _
  ClassType:="Forms.ListBox.1", _
  Left:=R.Left + R.Width, _
  Top:=R.Top, _
  Width:=150, _
  Height:=60)
OleX.Verb xlPrimary
OleX.LinkedCell = ActiveSheet.Range(CELLULE_LIEE).Address
OleX.Name = OLE_NAME
Set LB = OleX.Object
LB.ColumnCount = 2
LB.BoundColumn = 1
LB.ColumnWidths = "50;0"
LB.List() = var
Set LB = Nothing
Set OleX = Nothing
Set R = Nothing
Set Plage = Nothing
Set S = Nothing
End Sub

2) faites obligatoirement référence à la librairie MSForms Microsoft Forms 2.0 Object Library dans C:\WINDOWS\system32\FM20.DLL
(dans le VBE, menu Outils/Références…/Parcourir)

3) copiez le code suivant dans la fenêtre de code de ThisWorkbook
Code:
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Dim A$
Dim i&
Dim OleX As OLEObject
Dim LB As MSForms.ListBox
Dim R As Range
A$ = Sh.Range(CELLULE_LIEE)
If A$ = "" Then Exit Sub
On Error GoTo Erreur
Application.EnableEvents = False
For Each OleX In Sh.OLEObjects
  If OleX.Name = OLE_NAME Then
    Set LB = OleX.Object
    Exit For
  End If
Next OleX
If Not LB Is Nothing Then
  For i& = 0 To LB.ListCount - 1
    If A$ = LB.List(i&, 0) Then
      Set R = Sheets(BDD_FOURNISSEURS).Range(LB.List(i&, 1))
      Set R = R.Resize(R.Rows.Count + 16, R.Columns.Count + 1)
      R.Copy Destination:=Sh.Range(CELL_DEST)
      Sh.Range(CELLULE_LIEE) = ""
      Set LB = Nothing
      OleX.Delete
      Set OleX = Nothing
      Exit For
    End If
  Next i&
End If
Erreur:
Application.EnableEvents = True
End Sub

Sélectionnez la feuille "reclamation 1" et lancez la macro ChoixFournisseur.

Je me suis référé entièrement à votre classeur aussi, si votre mise en page vient à évoluer, il conviendra d'adapter
les constantes cernées par des ###

Cordialement.

PMO
Patrick Morange
 

rudy

XLDnaute Occasionnel
Re : liste déroulante suivi de l affichage d adresse

bonsoir ,
PMO2,pierrejean,
bonsoir a tous,

j ai utiliser la solution de pierrejean qui fonctionne bien par contre je n arrive pas a reproduire se qu il a fait avec B29 de l onglet reclamation et l onglet motifs de reclamation ??

pourriez vous m expliquer ( version PAS A PAS POUR LES NULS ) car j en ai d autre a faire et c est le moment d apprendre un peu
merci
A+
 

Pièces jointes

  • BL.zip
    15.3 KB · Affichages: 43
  • BL.zip
    15.3 KB · Affichages: 45
  • BL.zip
    15.3 KB · Affichages: 44

pierrejean

XLDnaute Barbatruc
Re : liste déroulante suivi de l affichage d adresse

Re

Voila les modifs
Les macros sont toutes basées sur la recherche : Find
J'ai commenté au mieux
 

Pièces jointes

  • Classeur10_b.zip
    18.5 KB · Affichages: 57
  • Classeur10_b.zip
    18.5 KB · Affichages: 57
  • Classeur10_b.zip
    18.5 KB · Affichages: 61

rudy

XLDnaute Occasionnel
Re : liste déroulante suivi de l affichage d adresse

OK merci
je vien de tester pour la parti " qualite de service " qui est OK mais pour info la parti " probleme produits elle répéte le même teste que la parti " qualite de service " ?? ça ne doit pas etre grand chose je vais relire et bricoler si besoin

merci
A+
 

pierrejean

XLDnaute Barbatruc
Re : liste déroulante suivi de l affichage d adresse

Re

Pour ne pas laisser trainer une erreur

Mais effectivement tu as la un bon exercice pour apprendre !!
 

Pièces jointes

  • Classeur10_b.zip
    19.6 KB · Affichages: 62
  • Classeur10_b.zip
    19.6 KB · Affichages: 53
  • Classeur10_b.zip
    19.6 KB · Affichages: 62

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 855
Membres
103 976
dernier inscrit
kaizertv2001@gmailcom