Microsoft 365 excel vba

PHV62

XLDnaute Junior
bonjour peut on utiliser un bouton dans un formulaire pour remplir les textbox de ce formulaire

je m explique dans le formulaire il y a 7 textbox je les remplis j appuie sur ajouter ca s ajoute dans la feuil1
avec le combobox je choisis ce nom que j ai remplie précédemment
tous les renseignement s affiche correctement a cote d un textbox il y a un bouton je voudrais que quand j appuie sur ce bouton il remplie les textbox qui correspondent a cette ligne
merci de votre aide
phv
 

Pièces jointes

  • Classeur1 test.xlsm
    24.3 KB · Affichages: 37

Dranreb

XLDnaute Barbatruc
Bonsoir.
Je n'ai pas encore ouvert votre classeur.
Mais avec le projet CLsCAs du complément CBxLCtlA.xlam tout ce que vous décrivez peut se faire automatiquement avec un minimum de programmation dans l'UserForm.
À un détail près toutefois par rapport à ce que vous dites : la saisie d'un nouvel élément se fait aussi, non pas dans une TextBox mais obligatoirement dans la même ComboBox que celle où vous le rechercherez ultérieurement. La recherche est en effet obligatoire pour éviter les doublons. Ce n'est pas vous qui décidez si vous aller créer ou modifier, c'est lui qui vous le dira après que vous aurez tapé ce dont il s'agit.
En outre il est conçu pour accepter plusieurs ComboBox correspondant à des colonnes différentes de la base et c'est la combinaison de l'ensemble qu'il considère, en ne proposant dans les listes de celle à renseigner que ce qui existe de compatible avec celles déjà renseignées.
Il est souhaitable que la plage à mettre à jour ait subi une mise sous forme de tableau.
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Bonjour PHV62, Dranreb,

j'ai fait PLEIN d'modifs, alors essaye TOUT, puis lis bien TOUT le code VBA.

bon courage, car tu vas avoir beaucoup de pain sur la planche ! 😄 😁

si besoin, tu peux demander une adaptation.
à te lire pour avoir ton avis. 😉

soan
 

Pièces jointes

  • Classeur1 test.xlsm
    29.2 KB · Affichages: 21

cp4

XLDnaute Barbatruc
Bonjour PHV62 , Dranreb , Soan :),

Désolé pour mon interférence. Juste une question à Soan. Dans la procédure ci-dessous, Pourquoi la variable T en variant implicitement et pas T() en tant qu''array.
VB:
Private Sub UserForm_Initialize()  'initialisation de UserForm1
  Dim T, n& 'ATTENTION : il ne faut PAS mettre de type pour T !
  Set Ws = Worksheets("Feuil1") 'Ws fait référence à la feuille de calcul "Feuil1"
  n = Ws.Cells(Rows.Count, 1).End(3).Row: If n = 1 Then Exit Sub
  n = n - 1: T = Ws.[A2].Resize(n): ComboBox1.List = T: flag = 0
End Sub
Merci pour tes explications.

Bon dimanche.
 

soan

XLDnaute Barbatruc
Inactif
salut Phil, ça f'sait longtemps ! :)

ouvre le formulaire, et clique sur le bouton go père ➯ ça fait rien, et c'est normal, car le champ père est vide ; dans la liste déroulante, sélectionne Alain ➯ à gauche, ça remplit les 7 TextBox ; question : QUI est le père d'Alain ? réponse : c'est Alex, car c'est bien lui que tu vois dans le champ père ; clique sur le bouton go père ➯ ça montre les infos du père d'Alain qui est Alex ! 😜 attends, c'est pas fini ! QUI est le père d'Alex ? c'est Daniel, n'est-ce pas ? clique sur le bouton go père ➯ ça fait rien, et c'est normal, car dans la liste des personnes, il n'y a pas de Daniel ! il n'a pas été trouvé : If cel Is Nothing Then Exit Sub

soan
 

soan

XLDnaute Barbatruc
Inactif
salut cp4, ça f'sait longtemps aussi ! :)

Si au lieu de Dim T de type Variant je mets Dim T() y'a cette erreur d'exécution :

Image.jpg


alors j'crois qu'c'est mieux d'laisser comme c'est ! 😜

soan
 

soan

XLDnaute Barbatruc
Inactif
Bonjour mapomme,

je viens d'essayer ; effectivement, ça marche ; mais T() est tout d'même un tableau sans type défini, donc c'est toujours un tableau de type Variant (j'ai pas pensé à en parler dans mon post #7 à @cp4) ; tout en laissant T = Ws.[A2].Resize(n).Value j'ai essayé avec Dim T$() et Dim T() As String mais ça retombe sur l'erreur n° 13 d'incompatibilité de type ! 😭

de mettre Dim T() et .Value plutôt que Dim T sans .Value y'a quel(s) avantage(s) ? car finalement, dans les 2 cas, c'est un tableau de type Variant.

edit : non, c'est plutôt ça : avec Dim T, c'est une variable de type Variant qui va contenir un tableau ; avec DimT(), c'est un tableau de plusieurs variants ; mais lequel des deux est mieux ?​



@Phil : bon jardinage ! 😄 (tu vas tondre la pelouse ? ou faire pousser des légumes et des fruits ? ou des fleurs ?)

soan
 
Dernière édition:

cp4

XLDnaute Barbatruc
Merci beaucoup, @soan et @mapomme ;),

J'ai posé la question car j'avoue que je ne maîtrise pas parfaitement la manipulation des Arrays.
Je me mêle les pinceaux. En effet, si j'ai bien compris un array 1D comme à zéro.
Dans ce fichier, dans les 2 cas [ Dim T ou Dim T() ] c'est un array 2D.
C'est ce qui me chiffonne, je n'arrive pas à anticiper le Lbound d'un tableau 1D (0 ou 1).
Merci à vous deux.
Bon dimanche.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
y'a quel(s) avantage(s) ?

Je ne sais pas s'il y a vraiment un avantage.

Dans le premier cas Dim T et et T = Ws.[A2].Resize(n), VBA voit à gauche de l'affectation n'importe quoi (un variant qui n'a pas de type de base et ne sera défini que lorsqu'on lui affecte quelque chose). A droite un objet. Il prend la valeur par défaut de l'objet (un tableau de valeur - sauf si élément unique) puis construit T comme un tableau puisqu'il doit y affecter un tableau.

Dans le cas Dim T() et T = Ws.[A2].Resize(n), VBA a une affectation où à gauche il y a une variable typée de type tableau et à droite une structure typée objet. Ce sont deux types différents: pour VBA ça ne colle pas ==> Les types de gauche et de droite diffèrent.
 

soan

XLDnaute Barbatruc
Inactif
@mapomme

merci pour tes infos ; cependant, comme y'a pas vraiment d'avantage, je continuerai comme j'ai fait au début, avec Dim T et sans .Value : c'est plus court à lire et a écrire, et ça marche bien aussi. :)

je mets quand même un "J'aime" sur ton post #9, pour ton info complémentaire. :)

soan
 

Discussions similaires

Réponses
27
Affichages
1 K

Statistiques des forums

Discussions
314 628
Messages
2 111 342
Membres
111 107
dernier inscrit
cdel