XL 2016 Enregistrer des Contrôles ActiveX d’un Userform sur une ligne

La Vouivre

XLDnaute Occasionnel
Bonjour les amis

Bonne journée à tous

Je viens vous demander de corriger une macro que j’essaye de mettre au point.

J’ai fait un Userform pour remplir une base de données, il est possible que tous les Contrôles ActiveX

Ne soit pas tous rempli, j’ai recopié un code que j’essaye de modifier sans sucés

Je ne trouve pas d’explication dans le forum ou sur la toile pour obtenir un enregistrement sur la même ligne de tous les Contrôles ActiveX


Je voudrais enregistrer sur la même ligne plusieurs Contrôles ActiveX , même si un est vide


J’ai le bouton rouge qui ferme l’userform et interdit l’emplois de fermer par la croix


Avec le bouton bleu « enregistrer » on enregistre à la suite des cellules vides, code pour la démo, ce n’est pas ce que je veux


Mais je voudrais enregistrer sur la même ligne avec le bouton violet tous les contrôles activeX et là je coince depuis un bon moment

Je vous mets la ligne de code défectueuse, en sachant que je n’ai pas mis tous les Contrôles ActiveX pour ne pas charger le fichier

If DLig1 > DLig2 Then

‘pouvez-vous me mettre un commentaire pour expliquer cette ligne de code

.Range("B" & DLig1 + 1).Value = TextBox1.Value

Else


Je vous passe un fichier pour plus d’explications

Merci à tous pour ce super forum d’entraide
 

Pièces jointes

  • enregistre en ligne.xlsm
    28.8 KB · Affichages: 30

laetitia90

XLDnaute Barbatruc
bonjour :)
comme je comprends!!
VB:
Private Sub CommandButton2_Click()
  With Sheets("Feuil1")
     DLig = .Range("B" & Rows.Count).End(3).Row + 1
   .Range("B" & DLig) = TextBox1.Value
  .Range("B" & DLig).Offset(0, 1) = ComboBox1.Value
   .Range("B" & DLig).Offset(0, 2) = ListBox1.Value
  End With
End Sub
 

ChTi160

XLDnaute Barbatruc
Bonjour La Vouivre
Bonjour le Fil, le Forum
Pour ce qui est de de l explication
Si DLgn1 est superieure a DLgn2 alors oncolle la valeur du Texbox1 dans la cellule B DLgn1 plus 1
Pour ce qui est de transferer tout tes controls peut etre qu en les nommant par exemple de TxtbB_1 a TxtbB_10 et en faisant une boucle
Exemple non fonctionne
VB:
for i = 1 to 10
Cells(DLgn,i)= Controls(”TxtbB_” & i)
Next i
Je poste depuis mon telephone lol
Donc je regarde le fichier des que possible (14/02 lol)
oupppssss Bonjour laetia90
Bonne Journee
Jean marie
 

La Vouivre

XLDnaute Occasionnel
Bonjour laetitia90 bonne saint valentin

Je viens d’essayer le code, si tous les contrôles activeX sont rempli cela fonctionne très bien, mais si je ne remplis pas les premier contrôles activeX l’enregistrement se met pas à la suite .

Peut être une obligation de remplir tous les contrôles activeX pourrais être une solution, mais je ne sais pas faire cela


Bonjour Chti160 a toi aussi bonne saint valentin

Désolé mon ami mais je n’arrive pas à adapter la boucle dans le code, je suis pas un bon en vba , comme tu peux le voir sur mon profile je me défini comme pousseur de souris pas comme un expert

Merci à vous deux de vous intéresser à mon projet

Bonne saint valentin à tous
 

La Vouivre

XLDnaute Occasionnel
Merci laetitia90 de votre aide , effectivement cela fonctionne dans le bouton bleu , mais si je ne rempli pas le premier contrôles activeX l’enregistrement n’est pas mis dans l’ordre , voir même efface les dernières données enregistrer

Et je ne sais pas utiliser les boucles, car effectivement environ 12 contrôles activeX à enregistrer

Merci de votre aide
 

laetitia90

XLDnaute Barbatruc
re ,:):)
normal ton code repose sur la colonne b donc si textbox1 vide la prochaine saisie va ecrire sur la meme ligne
DLig = .Range("B" & Rows.Count).End(3).Row + 1 '' cherche la derniere cells non vide de la colonne B
LE +1 pour ecrire juste aprés

une methode pour contourner le pb .... mettre un espace

VB:
With Sheets("Feuil1")
     DLig = .Range("B" & Rows.Count).End(3).Row + 1
   .Range("B" & DLig) = IIf(TextBox1 <> "", TextBox1.Value, " ")
  .Range("B" & DLig).Offset(0, 1) = ComboBox1.Value
   .Range("B" & DLig).Offset(0, 2) = ListBox1.Value
  End With


apres si beaucoup de controls passer par une boucle en renommant tes controls comme indiqué par jean marie:) eventuellement manipuler TAG

regarderais en fin aprés midi si tu y arrive pas avec un exemple
 

La Vouivre

XLDnaute Occasionnel
J’ai mis ce code pour obliger de saisir la première textbox

Je vais essayer sur le fichier final pour voir si cela fonctionne avec tous les contrôles activeX


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


' pour obliger de remplir tous les textbox

Dim ctl As Control



For Each ctl In Me.Controls

If TypeOf ctl Is MSForms.TextBox Then



If ctl.Text = "" Then

MsgBox "Saisie incomplète"

Exit Sub

End If

End If



Next


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 

Discussions similaires