Problème d'association de données avec un UserForm

benadry

XLDnaute Occasionnel
Bonsoir le forum,

Je viens de commencer à découvrer les Userform sous Excel et je ne parviens pas à associer les données issues de ma base.

Le but est d'aller chercher des informations concernant un salarié : dans le fichier test, le nom de "LOLO REMI" est sélectionné par défaut. Je voudrais qu'apparaissent son NIR, sa date d'entrée dans l'entreprise, son adresse ...
Je me suis largement inspiré d'un code trouvé sur un forum et, pourtant, ça ne fonctionne pas.

Voilà ce que j'ai fait :

Code:
Private Sub Adresse_Change()

End Sub

Private Sub Catégorie_Change()

End Sub

Private Sub CP_Ville_Change()

End Sub

Private Sub Date_entrée_Change()

End Sub

Private Sub Domiciliation_Change()

End Sub

Private Sub Emploi_Change()

End Sub

Private Sub Horaire_Change()

End Sub
Private Sub Serv_Change()

End Sub

Private Sub Identité_Change()
    
' Calculer la colonne par rapport au choix fait du nom de l'agent
  NumCol = 2 + Me.Identité.ListIndex + 1
  Me.NIR.Value = Cells(2, NumCol).Value
  Me.N°_agent.Value = Cells(1, NumCol).Value
  Me.Coef.Value = Cells(19, NumCol).Value
  Me.Exp.Value = Cells(20, NumCol).Value
  Me.Cptc.Value = Cells(21, NumCol).Value
  Me.Serv.Value = Cells(51, NumCol).Value
  Me.Emploi.Value = Cells(14, NumCol).Value
  'Me.Cat.Value = Cells(21, NumCol).Value
  Me.Date_entrée.Value = Cells(27, NumCol).Value
  Me.Horaire.Value = Cells(22, NumCol).Value
  'Me.Adresse.Value = Cells(21, NumCol).Value
  'Me.CP_Ville.Value = Cells(21, NumCol).Value
  'Me.Domiciliation.Value = Cells(21, NumCol).Value
End Sub

Private Sub UserForm_Activate()

  Dim selection As Range
  With Sheets("Base Agents")
    Set selection = .Range("A1:A2")
  End With
  Salarié.List = selection.Value

End Sub

Quelqu'un pourrait-il me dire ce qui cloche ?

Je joins également un fichier test.

Pour l'instant, la macro bug, car certaines "données" ne sont pas activées. Mais, cela n'explique pas mon problème.

Merci d'avance.

Cordialement.
 

Pièces jointes

  • Classeur1.xlsm
    32.1 KB · Affichages: 56
  • Classeur1.xlsm
    32.1 KB · Affichages: 59
  • Classeur1.xlsm
    32.1 KB · Affichages: 60

Paf

XLDnaute Barbatruc
Re : Problème d'association de données avec un UserForm

bonjour,

Vous déterminez un N° de colonne fixe : NumCol = 2 + Me.Identité.ListIndex + 1 qui correspond pour le premier agent de la combobox: 2+0+1 soit 3 (l'index de combobox commence à 0)

Puis vous alimentez ensuite vos différentes textbox par
Me.NIR.Value = Cells(2, NumCol).Value
Me.N°_agent.Value = Cells(1, NumCol).Value
....


Mais la syntaxe de Cells () est Cells(N°Ligne, N°Colonne)

Donc pour le premier agent vous prenez la valeur Cells(2, NumCol).Value soit B2, puis Cells(1, NumCol).Value soit B1 ..., toutes les valeurs sont "récupérées" en colonne B (ou 2). Or, dans la feuille Base Agents les données de chaque agent sont en lignes, la liste commençant en ligne 5.

Il faut donc commencer par trouver la ligne correspondant à l'agent:

NumLigne = Me.Identité.ListIndex + 5 (pour le premier 0+5 => c'est bien la 5ème ligne)
puis pour chaque valeur, repérer le N° de colonne contenant l'information
Me.NIR.Value = Cells(NumLigne , 2).Value
Me.N°_agent.Value = Cells( NumLigne , 1).Value
....


A+
 

stefan373

XLDnaute Occasionnel
Re : Problème d'association de données avec un UserForm

Bonsoir benadry, Paf et le forum,

Mêmes remarques que Paf avec une de plus, lorsque vous déclarez des variables faites attention à ne pas utiliser des noms réservé à Excel car il n'aime pas cela. :mad: bug possible, ici je parle de "selection" avec un accent de moins je vous le concède, mais vous êtes proche d'une grosse erreur en VBA. :)

Je vous ai mis un exemple en utilisant les remarques de Paf. :)
Vous devriez pouvoir faire le reste en lisant bien les explications déjà postées. Mais nous restons disponible. :)

A+ Stéfan
 

Pièces jointes

  • benadryver1.xlsm
    32.2 KB · Affichages: 73
  • benadryver1.xlsm
    32.2 KB · Affichages: 67
  • benadryver1.xlsm
    32.2 KB · Affichages: 67
Dernière édition:

benadry

XLDnaute Occasionnel
Re : Problème d'association de données avec un UserForm

Bonjour Paf, Stefan373 et le forum,

Merci beaucoup pour votre coup de main !


Je ne voulais pas revenir vers vous plus tôt, car je souhaitais d'abord comprendre pourquoi ça ne fonctionnait pas chez moi, alors que tout semblait identique.

Or, j'ai trouvé.

En fait, je souhaite que le UserForme ne soit pas dans la même feuille que la base qui l'alimente.

En effet, dans ce que je compte faire, il va y avoir plusieurs UserForm et il faut donc que la feuille soit différente des feuilles qui contiennent les données.

Or, dans ce cas, ça ne marche pas.

Pourriez-vous me dire comment faire pour que le formulaire s'alimente automatiquement s'il est Feuil1, par exemple ?

Merci encore pour votre aide précieuse.

Bien cordialement.
 

stefan373

XLDnaute Occasionnel
Re : Problème d'association de données avec un UserForm

Bonjour benadry et le forum,

Il suffit de modifier le nom de la feuille (sheets) dans le code. :)

Mais avancez au fur et à mesure pas tout en même temps, une chose à la fois. Utilisez un fichier exemple que l'on modifiera au fur et à mesure. :)

A+ Stéfan
 

benadry

XLDnaute Occasionnel
Re : Problème d'association de données avec un UserForm

Bonsoir Stéfan,

C'est pourtant ce que j'ai fait et je ne vois pas ce qui cloche !

Je joins le fichier test : vous pourrez voir qu'en cliquant sur le bouton, le formulaire s'ouvre, mais qu'il est vide !

Merci encore.

Cordialement.
 

Pièces jointes

  • benadryver1.xlsm
    36.3 KB · Affichages: 44
  • benadryver1.xlsm
    36.3 KB · Affichages: 53
  • benadryver1.xlsm
    36.3 KB · Affichages: 53

Paf

XLDnaute Barbatruc
Re : Problème d'association de données avec un UserForm

Re bonjour à tous

dans le code suivant
Code:
Private Sub UserForm_Initialize()
With Sheets("Base Agents")
    'Création d'une liste Noms (Formules\Gestionaire de noms) par VBA
    .Range("E5:E" & .[A65536].End(xlUp).Row).Name = "Noms"
End With
Me.Identité.RowSource = [noms].Address
End Sub

à chaque utilisation de votre userform vous définissez une plage nommée ! La plage nommée est crée une fois depuis Excel, de plus l'utilisation de liste ( ou Tableau pour Excel >=2007) rend cette plage dynamique.
Vous pouvez réduire le code à
Code:
Private Sub UserForm_Initialize()
Me.Identité.List = Range("noms").Value
End Sub


Par ailleurs dans

Code:
Private Sub Identité_Change()
NumLigne = Me.Identité.ListIndex + 5
Me.TextBox30.Value = Cells(NumLigne, 2).Value
Me.Date_entrée.Value = Cells(NumLigne, 21).Value
End Sub

Cells(NumLigne, 2).Value et Cells(NumLigne, 21).Value vont chercher dans la feuille courante !
c'est la que vous auriez dû préciser le nom de la feuille contenant les données !!
With Sheets("Base Agents")
Me.TextBox30.Value = .Cells(NumLigne, 2).Value
Me.Date_entrée.Value = .Cells(NumLigne, 21).Value
End With


attention à ne pas oublier le point avant Cells !

A+
 

stefan373

XLDnaute Occasionnel
Re : Problème d'association de données avec un UserForm

Bonjour,

Effectivement Paf j'ai pris le code sur un fichier ou j'efface le nom après chaque utilisation car je travail avec un deuxième classeur et j'avais toujours des pertes de mes cellules de références, :cool: donc ici inutile de les refaire à chaque fois.
Pour la suite pas de problème pour moi je connaissais le point avec with :) , je n'avais pas encore jeté un coup d’œil sur le fichier.
Comme vous aurez peut-être remarquez, je suis loin d'être un expert, mais toutes les remarques sont les bien venues.
Je vous en remercie. :):)

A+ Stéfan
 

Discussions similaires

Statistiques des forums

Discussions
312 508
Messages
2 089 138
Membres
104 046
dernier inscrit
ouiza