Passer a la ligne suivante

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

pouillette

XLDnaute Nouveau
Bonjour,

J'ai un soucis avec un userform ou il y a plusieurs textbox. Chaque textbox renvoie sa valeur dans une colonne de mon classeur. Le probleme est que quand j'utilise pour la premiere fois le userform, les valeurs se placent bien dans la premiere de chaque colonne correspondante. Par contre, si je veux faire une nouvelle ligne de donnees avec le userform, les valeurs se placent encore et toujours dans la premiere ligne.
J'ai deja essaye pas mal de methodes trouvees sur le net :

If ActiveCell <> "" Then ActiveCell.Offset(1, 0).Select

thelast = Range("C1048576").End(xlUp).Offset(1, 0).Select

For i = 6 to n
next i

Rien ne fonctionne, je ne vois pas comment faire...
Pouvez vous m'aider ?

Voici mon code :

'Order
Range("A6").Select
order = "REC" & txt_data_order_1 & "-" & txt_data_order_2
ActiveCell.Value = order

'Size of the heat exchanger
Range("B6").Select
Size = txt_data_size_l.Value & " x " & txt_data_size_l2 & " x " & txt_data_size_h
ActiveCell.Value = Size

'Number of shift
Range("C6").Select
ActiveCell.Value = cb_data_shift.Value

'Number of hours working per person a day
Range("D6").Select
ho = (txt_data_hours_h.Value * 60) + txt_data_hours_m.Value
ActiveCell.Value = ho

'Quantity of bars to prepare
Range("E6").Select
ActiveCell.Value = txt_data_qtbars.Value

'Quantity of sheets to saw
Range("F6").Select
ActiveCell.Value = txt_data_sheets.Value

'Number of layers
Range("G6").Select
ActiveCell.Value = txt_data_layers.Value


Merci

Pouillette
 
Re : Passer a la ligne suivante

Bonjour,

pas tout compris, mais le mieux serait d'envoyer la valeur de ta textbox dans la cellule qui suit la dernière cellule renseignée de ta colonne, exemple ci-dessous pour la colonne A :
Code:
Range("A65536").End(xlUp)(2) = TextBox1
bonne journée
@+
 
Re : Passer a la ligne suivante

Re,

ok alors j'ai essaye avec ca :

Range("A6").Select
order = "REC" & txt_data_order_1 & "-" & txt_data_order_2
ActiveCell.Value = order
If ActiveCell <> "" Then Range("A1048576").End(xlUp)(2) = order

et ca :

Range("A6").Select
order = "REC" & txt_data_order_1 & "-" & txt_data_order_2
ActiveCell.Value = order
Range("A1048576").End(xlUp)(2) = order

Pour chaque colonne.
Dans les 2 cas il me place la meme valeur dans les 2 premieres lignes
Et si je fais un nouvelle entree, il me place aussi 2 nouvelles lignes mais une en-dessous et l'autre au dessus de la premiere entree que j'ai fait...

???
 
Re : Passer a la ligne suivante

Re,

enlève les :
"Range("A6").Select"
et ceci devient inutile :
"If ActiveCell <> """
A priori ceci devrait suffire...
Code:
Range("A1048576").End(xlUp)(2) = order

A condition que "order" soit bien initialisé....
 
Re : Passer a la ligne suivante

Voila tout le code :

Private Sub cmb_data_ok_Click()

Dim order As String
Dim Size As String
Dim bars_time As Long
Dim total_time As Integer
Dim layers_time As Integer
Dim ho As Long
Dim layers As Long
Dim braz As Long

Worksheets("Data").Select

order = "REC" & txt_data_order_1 & "-" & txt_data_order_2
Range("A1048576").End(xlUp)(2) = order

Size = txt_data_size_l.Value & " x " & txt_data_size_l2 & " x " & txt_data_size_h
Range("B1048576").End(xlUp)(2) = Size

Range("C1048576").End(xlUp)(2) = cb_data_shift.Value

ho = (txt_data_hours_h.Value * 60) + txt_data_hours_m.Value
Range("D1048576").End(xlUp)(2) = ho

Range("E1048576").End(xlUp)(2) = txt_data_qtbars.Value

Range("F1048576").End(xlUp)(2) = txt_data_sheets.Value

Range("G1048576").End(xlUp)(2) = txt_data_layers.Value

bars_time = (Val(txt_data_qtbars) * 150) / 60
Range("H1048576").End(xlUp)(2) = bars_time

Range("I1048576").End(xlUp)(2) = txt_data_sheets.Value

Range("L1048576").End(xlUp)(2) = txt_data_degreasing1.Value
Range("M1048576").End(xlUp)(2) = txt_data_degreasing2.Value
Range("N1048576").End(xlUp)(2) = txt_data_degreasing3.Value


layers_time = (Val(txt_data_layers) * 2) + 360
Range("O1048576").End(xlUp)(2) = layers_time

braz = (txt_data_brazing_h.Value * 60) + txt_data_brazing_m.Value
Range("P1048576").End(xlUp)(2) = braz

End

End Sub


Seulement la partie en vert fonctionne.
Pour le reste il n'y a rien qui s'affiche.
 
Re : Passer a la ligne suivante

Re,

Desole mais je vois pas trop ce que ca doit m'apprendre...
Ca me donne le meme resultat.

Et ca ecrit Break a chaque etape, mais ce qui est en vert a fonctionner
J'ai verifie les noms de mes textbox, elles sont bonnes
Je comprend pas la...
 
Re : Passer a la ligne suivante

Bonjour Pouillette, bonjour le fil,

Un code pour l'userform qui résoudra déjà ton problème de passage à la ligne. Il manquera des contrôles (je suppose qu'il ne faut pas écrire une ligne si certaines informations n'ont pas été remplies ou ont des valeurs fantaisistes ou des fautes de frappes..).
Je vois que tu as prévu une listbox dont tu te sert comme une textbox (cb_data_shift), il faudra donc y charger quelque chose lors de l'initialisation de l'userform à l'aide de
VB:
Private Sub UserForm_Initialize()
Les multiples (source d'erreurs potentielles si une cellule de la dernière ligne écrite est vide ou a été effacée par erreur) 1048576 sont remplacés par un seul rows.count pour que celà marche aussi avec des versions d'excel possédant un nombre différent de lignes (65536).
Il manque la sub du bouton fins dont toi seul sait à quoi il correspond 🙂
est ce normal que les colonnes J et K ne soient pas remplies lors de la validation?
Bref, un squelette encore à habiller selon ton "cahier des charges". Cordialement


VB:
Private Sub cmb_data_ok_Click()

Dim NLig As Long 'numéro de la ligne d'écriture

    'Déterminer la ligne d'écriture
    If Cells(6, 1) = "" Then
        Cells(6, 1).Select 'Si c'est le 1er enregistrement
    Else    'on doit distinguer les deux cas à cause de la fusion des cellules A3,A4,A5
        Cells(Rows.Count, 1).End(xlUp)(2).Select 'Si ce n'est pas le premier on ajoute à la suite
    End If
    NLig = ActiveCell.Row

    'order
    Cells(NLig, 1) = "REC" & Val(txt_data_order_1) & "-" & Val(txt_data_order_2)
    'Size of the heat exchanger
    Cells(NLig, 2) = txt_data_size_l.Value & " x " & txt_data_size_l2.Value & " x " & txt_data_size_h.Value
    'Number of shift
    Cells(NLig, 3) = cb_data_shift.Value
    'Number of hours working per person a day
    Cells(NLig, 4) = (txt_data_hours_h.Value * 60) + txt_data_hours_m.Value
    'Quantity of bars to prepare
    Cells(NLig, 5) = txt_data_qtbars.Value
    'Quantity of sheets to saw
    Cells(NLig, 6) = txt_data_sheets.Value
    'Number of layers
    Cells(NLig, 7) = txt_data_layers.Value
    'Bars time
    Cells(NLig, 8) = (Val(txt_data_qtbars) * 150) / 60
    'Sheets time
    Cells(NLig, 9) = txt_data_sheets.Value
    'Degreasing time
    Cells(NLig, 12) = txt_data_degreasing1.Value
    Cells(NLig, 13) = txt_data_degreasing2.Value
    Cells(NLig, 14) = txt_data_degreasing3.Value
    'Number of layers
    Cells(NLig, 15) = (Val(txt_data_layers) * 2) + 360
    'Brazing time
    Cells(NLig, 16) = (txt_data_brazing_h.Value * 60) + txt_data_brazing_m.Value
    
    Unload Frm_Data
End Sub

Private Sub cmb_data_cancel_Click()
    Unload Frm_Data
End Sub
 
Dernière édition:
Re : Passer a la ligne suivante

Merci beaucoup ca fonctionne !

Effectivement il manque des informations sur le fichier que j'ai envoye car le vrai etait trop important.
J'ai donc fais un copier coller dans un autre fichier et je n'ai pas tout renote.

Je comprend mieux maintenant pourquoi seulement les colonnes degreasing fonctionnaient, c'etait a cause de la fusion des cellules.

Encore une fois merci et bonne journee

Pouillette
 
Re : Passer a la ligne suivante

Il faut surtout que tu comprennes le code, si tu as des questions dessus ou pour la suite hésite pas. La ça va si y'a que toi qui utilise ce fichier mais si il est destiné a des collègues les contrôles, entre autre, seront indispensables. Bonne journée
 
Re : Passer a la ligne suivante

Je modifie le paragraphe 'Déterminer la ligne d'écriture', les select dans du code sont à éviter comme la peste! 🙂


VB:
Private Sub cmb_data_ok_Click()

Dim NLig As Long 'numéro de la ligne d'écriture

    'Déterminer la ligne d'écriture
    If Cells(6, 1) = "" Then
        NLig = 6 'Si c'est le 1er enregistrement
    Else    'on doit distinguer les deux cas à cause de la fusion des cellules A3,A4,A5
        NLig = Cells(Rows.Count, 1).End(xlUp)(2).Row 'Si ce n'est pas le premier on ajoute à la suite
    End If
   
    'order
    Cells(NLig, 1) = "REC" & Val(txt_data_order_1) & "-" & Val(txt_data_order_2)
    'Size of the heat exchanger
    Cells(NLig, 2) = txt_data_size_l.Value & " x " & txt_data_size_l2.Value & " x " & txt_data_size_h.Value
    'Number of shift
    Cells(NLig, 3) = cb_data_shift.Value
    'Number of hours working per person a day
    Cells(NLig, 4) = (txt_data_hours_h.Value * 60) + txt_data_hours_m.Value
    'Quantity of bars to prepare
    Cells(NLig, 5) = txt_data_qtbars.Value
    'Quantity of sheets to saw
    Cells(NLig, 6) = txt_data_sheets.Value
    'Number of layers
    Cells(NLig, 7) = txt_data_layers.Value
    'Bars time
    Cells(NLig, 8) = (Val(txt_data_qtbars) * 150) / 60
    'Sheets time
    Cells(NLig, 9) = txt_data_sheets.Value
    'Degreasing time
    Cells(NLig, 12) = txt_data_degreasing1.Value
    Cells(NLig, 13) = txt_data_degreasing2.Value
    Cells(NLig, 14) = txt_data_degreasing3.Value
    'Number of layers
    Cells(NLig, 15) = (Val(txt_data_layers) * 2) + 360
    'Brazing time
    Cells(NLig, 16) = (txt_data_brazing_h.Value * 60) + txt_data_brazing_m.Value
    
    Unload Frm_Data
End Sub

Private Sub cmb_data_cancel_Click()
    Unload Frm_Data
End Sub
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour