Microsoft 365 Ecrire dans une textbox après que la combobox a sélectionnée la bonne ligne

Batlou

XLDnaute Nouveau
bonjour à tous,

J'ai créer une combobox sur excel qui me permet de sélectionner une cellule de ma liste dans la colonne A. je souhaite pouvoir, à l'aide des textbox que j'ai créé alimenter les colonnes B,C,D sur la ligne qui a été selectionnée par ma combobox?
pouvez-vous m'aider car comme vous le constatez je suis novice.

Merci d'avance
 

soan

XLDnaute Barbatruc
Inactif
Bonsoir Batlou,

je te propose d'utiliser une variable globale ligne, par exemple :

Dim LigListe& ou Dim LigListe As Long

à placer en début de module, avant toute Sub ou Function, comme ceci :

VB:
Option Explicit

Dim LigListe&
ton ComboBox utilisera cette variable pour faire son travail, et comme
cette variable est globale, sa valeur sera conservée en sortie de sub
et pourra être utilisée par le code VBA de tes TextBox.


soan
 

Batlou

XLDnaute Nouveau
Merci d'essayer de m'aider!!!
en fait avec ma combobox j'arrive bien sur la bonne cellule (bonne ligne en colonne A) de la liste déroulante, c'est ensuite que j'ai un problème je ne sais pas quel code mettre dans ma Private Sub TextBox1_Change() pour remplir la cellule en colonne C de la ligne selectionnée par ma combobox.

je ne suis pas sûr d'être clair. je t'envoie mon fichier, la feuille concernée est la feuille Docs DCE
 

Pièces jointes

  • Check-list PROJET_travail.xlsm
    38.5 KB · Affichages: 12

soan

XLDnaute Barbatruc
Inactif
Bonjour Batlou,

ton fichier en retour. :)

* tu es sur la feuille "Docs DCE"

* fais Ctrl d ➯ ton UserForm s'affiche ; si tu t'es trompé :
appuie sur la touche Echap et ton UF se ferme.

* fais de nouveau Ctrl d ; ton UF ne s'affichera pas si tu es sur une autre feuille
que "Docs DCE" ; donc on pourra écrire sur la feuille active sans avoir besoin
de la référencer.

* dans la 1ère liste, sélectionne un des documents, par exemple "CCAG Travaux" ;
dessous, sélectionne par exemple "En attente" ; mets la date : 18/11/2020 ; puis
pour les 4 autres données, mets : a ; b ; c ; d (c'est juste pour l'exemple)

* clique sur le bouton Valider ➯ ça écrit les données sur la bonne ligne, et dans
les bonnes colonnes... sans avoir eu besoin de sélectionner la ligne ! ;)

* ensuite, dans la 1ère liste, sélectionne par exemple "CCAP" ; vu ? 😜

pour la suite, je te laisse faire.


soan
 

Pièces jointes

  • Check-list PROJET_travail.xlsm
    38.7 KB · Affichages: 9

Batlou

XLDnaute Nouveau
Bonjour SOAN,

J'essaie de faire la même chose dans la feuille "préparation de chantier", j'ai créé un userform comme je l'avais fait pour "docs au DCE" qui comprend le même nombre de combo, textbox etc. j'ai essayé de faire un copier coller du code mais ça ne marche pas. Tu as une idée? j'utilise pas la bonne méthode?

Merci de ton aide
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Batlou,

* ouvre le fichier joint.

* tu es sur la feuille "Préparation de chantier" ;
fais Ctrl d ; puis vérifie si c'est bien OK.

* va sur la feuille "Docs DCE" ; fais Ctrl d ;
puis vérifie si c'est bien OK.

fais Alt F11 pour aller sur Visual Basic
oh ! y'a qu'un seul UserForm ! :D

eh oui, comme y'a peu de différences entre les deux,
j'ai utilisé le même UF pour les 2 feuilles.

regarde le code VBA de cet unique UF,
puis regarde aussi Module1.

à te lire pour avoir ton avis. ;)


soan
 

Pièces jointes

  • Check-list PROJET_travail.xlsm
    38.6 KB · Affichages: 6

Batlou

XLDnaute Nouveau
Génial! ça veut dire que si je souhaite mettre d'autres feuilles en utilisant le même format (respect des colonnes) je peux garder cette base en ajoutant dans module
FX = ActiveSheet.Name
If FX = "Docs DCE" Or _
FX = "Préparation de chantier" Or _

Then DocsDCE_PDC.Show
 

Batlou

XLDnaute Nouveau
Désolé une tabulation mal maitrisée m'a fais envoyer le post précédent ;)
FX = ActiveSheet.Name
If FX = "Docs DCE" Or _
FX = "Préparation de chantier" Or _
FX="Amont DCE"
Then DocsDCE_PDC.Show

ensuite je vais dans le userform et je change aussi. Enfin là ça semble un peu plus complexe mais je vais essayer de m'y coller après avoir remis ma feuille sous le même format que les autres.

en tout cas un grand merci!

Pascal
 

soan

XLDnaute Barbatruc
Inactif
@Batlou (Pascal)

dans Module1, pour l'adaptation de la sub ShowDocsDCE(), tu as bien compris ;
mais comme ça va concerner plusieurs feuilles, il vaut mieux utiliser ceci :

VB:
Option Explicit

Public FX$

Sub ShowDocsDCE()
  Dim chn$: FX = ActiveSheet.Name
  chn = "Docs DCE, Préparation de chantier, " _
    & "Amont DCE, nom de la 4ème feuille, " _
    & "nom de la 5ème feuille"
  If InStr(chn, FX) > 0 Then DocsDCE_PDC.Show
End Sub
--------------------------------------------------------------------------------------------

dans le module du UF DocsDCE_PDC, pour adapter la sub UserForm_Initialize(),
c'est effectivement un peu plus compliqué ; il y a 3 adaptations à faire :

1) le nom du UF en barre de titre :
Me.Caption = "Docs au DCE"
ou : Me.Caption = "Docs Préparation de Chantiers"

2) la liste de ComboBox1 : ComboBox1.RowSource = ["Documents_DCE"]
ou : ComboBox1.RowSource = ["Documents_PDC"]

3) la liste de ComboBox2 : ComboBox2.RowSource = ["Presence_Docs"]
ou les 2 seuls éléments "Présent" et "Effectuée"

je suppose que Label1.Caption sera toujours le même :
la donnée en cellule A1, à laquelle j'ajoute « : » ➯
"Documents au DCE:" ou "Documents / Tâches:"

le code VBA actuel de cette sub est celui-ci :

Code:
Private Sub UserForm_Initialize()
  Application.ScreenUpdating = 0
  If FX = "Docs DCE" Then
    Me.Caption = "Docs au DCE"
    ComboBox1.RowSource = ["Documents_DCE"]
    ComboBox2.RowSource = ["Presence_Docs"]
  Else
    Me.Caption = "Docs Préparation de Chantiers"
    ComboBox1.RowSource = ["Documents_PDC"]
    With ComboBox2
      .Clear: .AddItem "Présent": .AddItem "Effectuée"
    End With
  End If
  Label1.Caption = [A1] & ":"
End Sub
pour plusieurs feuilles, il vaut mieux utiliser :
VB:
Private Sub UserForm_Initialize()
  Application.ScreenUpdating = 0
  Select Case FX
    Case "Docs DCE"
      Me.Caption = "Docs au DCE"
      ComboBox1.RowSource = ["Documents_DCE"]
      ComboBox2.RowSource = ["Presence_Docs"]
    Case "Préparation de Chantier"
      Me.Caption = "Docs Préparation de Chantier"
      ComboBox1.RowSource = ["Documents_PDC"]
      With ComboBox2
        .Clear: .AddItem "Présent": .AddItem "Effectuée"
      End With
    Case "Amont DCE"
      'compléter ici
    Case "nom de la 4ème feuille"
      'compléter ici
    Case "nom de la 5ème feuille"
      'compléter ici
  End Select
  Label1.Caption = [A1] & ":"
End Sub
--------------------------------------------------------------------------------------------

Attention !

pour la 3ème feuille "Amont DCE", il y a plusieurs différences structurelles :

* pour la 1ère liste, la 1ère donnée est en A3 et plus en A2 ; de plus, A6 et A12
ne doivent pas être dans cette liste ! A2 est automatiquement évité car on
commence la liste à partir de A3.

* le nombre de colonnes n'est pas le même : 5 colonnes de A à E au lieu de
7 colonnes de A à G ; donc là, le UF aura 2 champs de trop par rapport à
la feuille de calcul !

* pour la 2ème colonne B "Conformité" : ça peut être ok si c'est aussi une liste,
comme pour Documents_DCE et Documents_PDC (cela pour ComboBox1)

* pour la 3ème colonne C "Date" : ok, c'est idem

* pour la 4ème colonne D "Réalisé par" : c'est ok si c'est comme "Fourni par"

* pour la colonne "Remarque" : ce n'est plus la colonne G mais la colonne E !

compte tenu de toutes ces différences, je pense que
c'est mieux d'utiliser un autre UF pour cette feuille.


soan
 

Regueiro

XLDnaute Impliqué
Code pour remplir les données
VB:
Private Sub CommandButton1_Click()
ligne = ComboBox1.ListIndex + 2
Cells(ligne, 2).Value = ComboBox2
Cells(ligne, 3) = CDate(TextBox1)
Cells(ligne, 4) = Me.TextBox2
Cells(ligne, 5) = Me.TextBox3
Cells(ligne, 6) = Me.TextBox4
Cells(ligne, 7) = Me.TextBox5

  Application.ScreenUpdating = -1
End Sub
 

Regueiro

XLDnaute Impliqué
Bonsoir le Forum, Batlou
Voilà Ton Fichier en retour
J'ai transformé tes données en Tableau
Pour lancer Userform sur la Feuille Crtl + D
Il n'y a qu'un seul Userform1 valable pour toute les Feuilles avec un seule tableau par feuille
Les données de Userform1 s'alimente directement, yc compris Label et Textbox
Attention Userform1 ne fonctionne pas sur la Feuille "Données Projet" car il n'y a pas de tableau
Pour le TextBox1 pour les dates un petit plus

CSS:
Option Explicit
Option Compare Text
Dim T As ListObject         'Tableau1 ou 2-3-4
Dim TCOL1 As Range
Dim TTITRE As Range     'En tête du Tableau HeaderRowRange.
Dim ligne As Long
Dim i As Byte
Dim Nom As String

Private Sub UserForm_Initialize()
Application.ScreenUpdating = 0
Set T = ActiveSheet.ListObjects(1)
Set TCOL1 = T.DataBodyRange.Columns(1)
Set TTITRE = T.HeaderRowRange

Me.ComboBox1.List = TCOL1.Value
Me.ComboBox2.RowSource = ["Presence_Docs"]
Me.Caption = ActiveSheet.Name & " : " & T.Name
Me.enreg = TCOL1.Rows.Count
Me.Label9.Caption = "VOUS ETES SUR LA FEUILLE ; " & ActiveSheet.Name & " - NOM DU TABLEAU : " & T.Name & vbCrLf & _
Environ("username") & " - " & Environ("computername")

'Caption des Labels en Fonction du Tableau choisi
'Boucle sur les entêtes du Tableau depuis 2 à 7
For i = 1 To 7
    Me.Controls("Label" & i) = TTITRE.Columns(i).Text
Next i
Me.Label8.Caption = "Nombre de Item dans : " & T.Name
End Sub
Private Sub ComboBox1_Change()
Nom = Me.ComboBox1.Value
On Error Resume Next
    ligne = Application.Match(Nom, TCOL1, 0)                                        'OK
    MsgBox "Ligne " & ligne
On Error GoTo 0
Me.ComboBox2 = ""
For i = 4 To 7
    Me.Controls("Textbox" & i - 2) = T.DataBodyRange.Cells(ligne, i).Text
Next i
End Sub
Private Sub ComboBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  If KeyAscii = 27 Then Unload Me
End Sub

Private Sub CommandButton1_Click()
Nom = Me.ComboBox1.Value
ligne = Application.Match(Nom, TCOL1, 0)
With T.DataBodyRange
.Cells(ligne, 2).Value = Me.ComboBox2
.Cells(ligne, 3).Value = CDate(TextBox1)

.Cells(ligne, 4) = Me.TextBox2
.Cells(ligne, 5) = Me.TextBox3
.Cells(ligne, 6) = Me.TextBox4
.Cells(ligne, 7) = Me.TextBox5
End With
Application.ScreenUpdating = -1
End Sub
 

Pièces jointes

  • XLD JRE Check-list PROJET_travail.xlsm
    54.8 KB · Affichages: 10

Discussions similaires

Réponses
27
Affichages
971
Réponses
17
Affichages
1 K

Statistiques des forums

Discussions
314 499
Messages
2 110 247
Membres
110 711
dernier inscrit
chmessi