Problème formulaire

Bonjour à tous,

Voilà je bloque sur un petit truc mais qui m'empêche d'avancer.

Je cherche à remplir un tableau Excel à partir d'un formulaire. Le problème est qu'à chaque entrée je voudrais aller chercher la dernière cellule non vide et décaler à la ligne du dessous pour y insérer mes informations or à chaque entrée ma ligne est écrasée... je n'arrive pas à simplement décaler à la ligne du dessous au fur et à mesure afin que le tableau se remplisse.

Merci pour votre aide par avance, je vous joins le fichier Excel

Quelqu'un ?

Bonjour

A tester :

Ça fonctionne parfaitement merci infiniment

Ok super !

Si je peux me permettre, dans ce genre de formulaire ne renomme pas les textbox, ça permet d’alléger considérablement le code

Ça marche merci Tu saurais me dire pourquoi mon code ne fonctionnait pas ?

Tu écrasais la ligne car ton code partais toujours du même point (repérage de la dernière ligne non vide) et après tu demander au code de renseigner les infos sur cette ligne. En gros ton code disais d’écrire toujours au même endroit

Bonjour,

Une autre proposition pour restituer les données dans la feuille de calcul.

Cdlt.

Private Sub CommandButton1_Click()
Dim ws As Worksheet, lo As ListObject, rCell As Range

    If Listedéroulanteinitiatives.Value = "" Then
        MsgBox "Veuillez renseigner le champs 'Initiatives'", 64, "Information"
    Else
        If MsgBox("Do you confirm the entry?", vbYesNo, "Confirmation") = vbYes Then
            Set ws = ActiveWorkbook.Worksheets("Progress report")
            Set lo = ws.ListObjects(1)
            With lo
                If .InsertRowRange Is Nothing Then
                    Set rCell = .HeaderRowRange.Cells(1).Offset(.ListRows.Count + 1)
                Else
                    Set rCell = .InsertRowRange.Cells(1)
                End If
            End With
            With rCell
                .Value = Listedéroulanteinitiatives.Value
                .Offset(, 1).Value = Textsavings1.Value
                .Offset(, 2).Value = Devises.Value
                .Offset(, 4).Value = Textsavings2.Value
                .Offset(, 5).Value = Devises2.Value
            End With

            Unload Formulaire
            Formulaire.Show
        End If
    End If
End Sub

Un exemple que j'utilise pour mes formations

En pièce jointe

Code associé au bouton:

Private Sub Btn_Valider_Click()

Dim F As Worksheet

Set F = Sheets("Histo")

DerligneF = F.UsedRange.Rows.Count + 1 ' Première ligne non utilisée

Dim Coul As String

Dim J As String

If Question.Op1.Value Then Coul = "Rouge"

If Question.Op2.Value Then Coul = "Verte"

If Question.Op3.Value Then Coul = "Jaune"

J = Question.Lst_Jours.Value

F.Cells(DerligneF, 1).Value = J & " et la couleur " & Coul 'écriture sur première ligne non utilisée de la colonne 1

MsgBox "Enregistré sur onglet HISTO"

End Sub

Merci beaucoup à vous 3 !

Ça fonctionne parfaitement merci infiniment

Juste une dernière question, dans le code que tu m'as communiqué, si je supprime les données de la première ligne, celle-ci est donc vide et pourtant si je ressaisis des informations dans mon formulaire, la première ligne reste vide et il vient alimenter celle du dessous... pourrais-tu m'aider à résoudre ça ?

Le problème vient du fait que l'instruction "UsedRange.Rows.Count" renvoie le nombre de lignes utilisées sur la feuille.

Si la feuille est vierge, la valeur renvoyée est 1

Si la première ligne est saisie, la valeur renvoyée est toujours 1

Il est donc préférable d'utiliser "Cells(65535, 1).End(xlUp).Row" qui permet en plus de préciser la colonne concernée (deuxième paramètre).

Le code est modifié comme suit:

Private Sub Btn_Valider_Click()

Dim F As Worksheet

Set F = Sheets("Histo")

DerligneF = F.Cells(65535, 1).End(xlUp).Row 'dernière ligne utilisée de la colonne 1

If DerligneF = 1 And IsEmpty(F.Cells(1, 1)) Then

DerligneF = 0

End If

Dim Coul As String

Dim J As String

If Question.Op1.Value Then Coul = "Rouge"

If Question.Op2.Value Then Coul = "Verte"

If Question.Op3.Value Then Coul = "Jaune"

J = Question.Lst_Jours.Value

F.Cells(DerligneF + 1, 1).Value = J & " et la couleur " & Coul 'écriture sur première ligne non utilisée de la colonne 1

MsgBox "Enregistré sur onglet HISTO"

End Sub

En revanche, si tu souhaites plutôt combler les trous et servir la première cellule vide c'est un autre algorithme.

Il faut se positionner sur la première cellule de la colonne et descendre en boucle (Structure Do...Until) jusqu'à atteindre une cellule vide (if isempty...).

J'espère avoir répondu à ton interrogation !

Oui j'ai compris merci beaucoup

Rechercher des sujets similaires à "probleme formulaire"