Insérer des données via userform ligne par ligne

Bonjour tout le monde !

Voilà, je souhaiterais, à l'aide d'un userform, remplir des tableaux, ligne par ligne,

J'ai plusieurs tableaux, car les tableaux n'ont pas forcément les mêmes lignes de remplie, par exemple dans le tableau de la colonne L, je peux avoir 3 lignes et dans la colonne à côté 5 ligne ou + ou -.

C'est pour cela qu'à la place d'en faire un seul tableau, j'en ai fait plusieurs, peut-être que je me suis compliqué les choses.

Donc un tableau par colonne, de L à U.

Après plusieurs essais, j'arrive à le remplir, mais j'ai des bugs, par exemple, si la colonne en question est vide, il ne le remplit qu'à la ligne 3 au lieu de la 2, et à chaque nouvelle rentrée, ça se remet que sur la ligne 3.

Si la première ligne, est remplie à la main, pas de problèmes, le tableau se remplit ligne par ligne.

Fichiers :

28classeur1.xltm (30.34 Ko)

Code VBA:

'Pour le bouton Nouveau:

Private Sub add_Click()

Dim L As Integer

 If MsgBox("Confirmez ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
    'L = Sheets("Data").Range("A65536").End(xlUp).Row + 1

    'Sélectionne la première ligne du tableau vide
      L = Sheets("Data").[l1].End(xlDown).Row + 1
      MsgBox (L)
     M = Sheets("Data").[M1].End(xlDown).Row + 1
     N = Sheets("Data").[N1].End(xlDown).Row + 1
     O = Sheets("Data").[O1].End(xlDown).Row + 1
     P = Sheets("Data").[P1].End(xlDown).Row + 1
     Q = Sheets("Data").[Q1].End(xlDown).Row + 1
     R = Sheets("Data").[R1].End(xlDown).Row + 1
     S = Sheets("Data").[S1].End(xlDown).Row + 1
     T = Sheets("Data").[T1].End(xlDown).Row + 1
     U = Sheets("Data").[U1].End(xlDown).Row + 1

    'Prend la valeur et l'insére à la ligne sélectionner:
     Range("L" & L).Value = TextBox_ChargesCommunes
     Range("M" & M).Value = TextBox_MesCharges
     Range("N" & N).Value = TextBox_Abonnements
     Range("O" & O).Value = TextBox_FraisBancaires
     Range("P" & P).Value = TextBox_Assurances
     Range("Q" & Q).Value = TextBox_Voiture
     Range("R" & R).Value = TextBox_Credits
     Range("S" & S).Value = TextBox_Divers
     Range("T" & T).Value = TextBox_Eva
     Range("U" & U).Value = TextBox_Epargnes

     'Après insertion, réinitialisation du formulaire
     'TextBox_ChargesCommunes = ""
     'TextBox_MesCharges = ""
     'TextBox_Abonnements = ""
     'TextBox_FraisBancaires = ""
     'TextBox_Assurances = ""
     'TextBox_Voiture = ""
     'TextBox_Credits = ""
     'TextBox_Divers = ""
     'TextBox_Eva = ""
     'TextBox_Epargnes = ""

 End If
End Sub

Pour éclaircir le code, je souhaiterais que l'on m'indique la syntaxe pour faire des boucles sur des lettres et non des chiffres. J'ai essayé plusieurs trucs, mais connaissant vaguement le Vba la syntaxe ne devait pas être bonne.

Merci d'avance à tous ceux qui se pencheraient sur la question.

Bonjour

Ci joint ma solution

22classeur1.xltm (27.98 Ko)

A+ François

Bonjour François,

Merci pour ton taf de dingue, c'est plus que j'en espérais !

Tout marche bien sauf l'ajout, je ne sais pas pourquoi, mais au moment de cliquer sur ajouter, j'ai une fenêtre qui apparait disant :

Erreur de compilation, Utilisation incorrecte de la propriété.

Dans le code, il me souligne en jaune cette partie dans add :

Private Sub add_Click()

Pourtant, je vois pas pourquoi ça bloque, le nom est correct…

En tout cas encore merci pour ton boulot, je vais m'amuser à tout transférer dans le fichier originel

Private Sub add_Click()
 Dim n As Long, Ctrl As Control
 If MsgBox("Confirmez ?", vbYesNo, "Demande de confirmation d'ajout") <> vbYes Then Unload Me: Exit Sub
  For Each Ctrl In Me.Controls
   If TypeOf Ctrl Is msforms.TextBox Then
     Sheets("Data").ListObjects(Ctrl.Name).ListRows.add
      n = Sheets("Data").ListObjects(Ctrl.Name).ListRows.Count
    Sheets("Data").ListObjects(Ctrl.Name).DataBodyRange.Item(n, 1) = Ctrl.Value
   End If
  Next
  Unload Me
  MenuAdd.Show 'là il manquait le point....
End Sub

Ah la la la, c'est fou ce qu'un point peut causer !

Bon ça marche, j'ai faits divers tests, le seul hic, c'est que si par exemple la première ligne, je ne rentre que 8 valeurs, puis 2 valeurs dans la seconde ligne, a la troisième ligne, je remets 8 valeurs, mais au lieu de les inscrire à la suite des précédentes valeurs, il laisse une ligne vide :

capture d ecran 20230112 105135

Bon après, je ne sais pas si c'est possible de rectifier ça ...

Ci joint le fichier corrigé

23classeur1.xltm (31.59 Ko)

A+ François

Super merci !

Juste pour le transférer sur le fichier original, je dois faire attention à des choses particulières, ou des simples copier-coller feront l'affaire ?

Chaque libellé est un tableau ayant le nom que le libellé et le même nom que le textbox correspondant.

A+ François

Ok ça marche ! Merci !

Rechercher des sujets similaires à "inserer donnees via userform ligne"