Insérer données userform dans un tableau nommé

Bonjour,

Je galère depuis quelques heures et malgré mes recherches, je n'avance pas.

J'utilise un userform pour alimenter un tableau.

1- Si mon tableau n'est pas un tableau inséré ni nommé (juste ligne 1 avec une en-tête) alors pas de souci, mes données se mettent bien en place et à chaque nouvel enregistrement je descends d'une ligne

2- Si mon tableau est nommé et créé suite à l'insertion d'un tableau par le ruban alors je n'y arrive plus. Soit mes données se mettent en dessous, soit dedans mais chaque enregistrement écrase le précédent ...

Je sèche

D'avance merci pour vos explications éclairées.

Bonjour,

Tu n'as pas utilisé le même système pour localiser la ligne réceptrice.

Sans tableau :

Range("A65000").End(xlUp).Offset(1, 0).Select

... très bien tu te positionnnes sur la première ligne vide.

C'est la formule utilisé dans le deuxième cas qui entraine l'erreur.

Nota : La première règle à utiliser en programmation est de supprimer les Select... Sélection ou ActiveCell

Ton code devrait être :

Private Sub CommandButton2_Click()
Dim i
   Userform1.Hide
   i = Range("A65000").End(xlUp).Row + 1
   Cells(i, 1) = DTPicker1
   Cells(i, 2) = TextBox1
...

A+

Bonjour galopin01,

Tout d'abord, merci pour la simplification du code d'affectation des valeurs de mon usf. C'est beaucoup plus lisible et beaucoup moins long à écrire. Quand on débute, on se complique la vie... souvent par ignorance

Pour ce qui est de la localisation de la ligne, mon problème persiste. Je pense avoir mal formulé ma question. En effet, ma feuille de destination affiche un tableau inséré avec la fonction "insertion tableau" case en-tête cochée. Du coup, excel me crée un tableau vide sur deux lignes (la ligne d'en-tête et la première ligne du tableau qui ne contient pas de données). Je voudrais me positionner sur cette première ligne vide du tableau soit la ligne 2.

Or, le code que tu m'as donné me positionne en ligne 3 (comme si excel considérait que la première ligne vide du tableau n'est pas vide et mes enregistrements suivants viennent bien à la suite en descendant.

Peut-être peux-tu m'aider sur ce point.

D'avance merci

Bonsoir,

Ces tableaux sont parfois caractériels...

Tu pourrais essayer de commencer comme ça :

Private Sub CommandButton2_Click()
Dim i%
   Userform1.Hide
   If Cells(2, 1) = "" Then
      i = 2
   Else
      i = Range("A65000").End(xlUp).Row + 1
   End If
   Cells(i, 1) = DTPicker1
   Cells(i, 2) = TextBox1
'. . .

Attention toutefois à ne pas générer de ligne vide par la suite car VBA la considérerait comme pleine.

Si une ligne doit être supprimé, il faut la... Supprimer ! (et NON l'effacer ! )

A+

Re à tous,

Après diverses recherches, j'ai compris que la fonction "insérer tableau" posait des problèmes similaires au cellules fusionnées.

J'ai donc contourné le problème.

Comme j'ai besoin, quand je ne saisi pas d'info par le biais de l'usf, d'avoir mes données sous forme de tableau, j'ai inséré un tableau. A l'ouverture du fichier, j'ai mon tableau.

Lorsque je veux saisir des infos par l'usf, il faut convertir en plage et à la fermeture de l'usf, remettre en tableau.

Pas sûr d'être très clair

Private Sub CommandButton2_Click()
   'je convertis en plage
    Worksheets("saisie_manuelle").ListObjects("Table1").Unlist    
 ' j'affecte les données sur ma feuille
   Dim i
   Userform1.Hide
   i = Range("A65000").End(xlUp).Row + 1
   Cells(i, 1) = DTPicker1
'....
' si je veux continuer à saisir des données par l'usf, je crée quand même un tableau sinon ma conversion en plage du début plante
Select Case MsgBox("Saisir un autre règlement ?", vbYesNo + vbQuestion, "Autre règlement")
            Case vbYes
                Dim Ws As Worksheet
                Dim NomTable As String
                NomTable = "Table1"
                Set Ws = Worksheets("saisie_manuelle")

                With Ws
                    .ListObjects.Add(xlSrcRange, .Range("$A$1").CurrentRegion, , xlYes).Name = NomTable

                End With
                rappel_formulaire
                Exit Sub
        'si je veux retourner à l'exploitation de mes données, je crée aussi un tableau.        
            Case vbNo
                Unload Userform1

    End Select
    Dim mafeuille As Worksheet
                Dim NommaTable As String
                NommaTable = "Table1"
                Set mafeuille = Worksheets("saisie_manuelle")

                With mafeuille
                    .ListObjects.Add(xlSrcRange, .Range("$A$1").CurrentRegion, , xlYes).Name = NommaTable

                End With

Ceci n'est certainement pas très beau mais ça marche.

En tout cas merci pour l'aide


Re Galopin01,

On s'est croisé

Je vais essayé également ta proposition, car elle est beaucoup plus propre que la mienne.

Je te tiens au courant.

re re

J'ai testé ta proposition et elle fonctionne très bien et elle a l'avantage d'être beaucoup plus clean que ce que j'avais réussi à faire.

Merci beaucoup.

Désolé,

Après essai avec un ligne de totaux dans le tableau, la proposition que tu m'as indiquée ne fonctionne plus. Les nouveaux enregistrements se positionnent en dessous du tableau

J'ai essayé de modifier la valeur de "i" et ai ajouté

and cells(3,1)

mais cela ne change rien.

Pour l'instant, j'ai remis ma première solution mais bon c'est pas super.

Bonne soirée.

Bonsoir,

Ah ben non. un tableau, c'est un tableau avec des en-têtes de colonnes et des données.

Les totaux n'ont rien à voir la dedans. Ton tableau tu y mets les données. Les calculs tu les fais ailleurs !

Ou alors c'est plus un tableau.

Il faut organiser ton travail différemment.

A+

Bonsoir,

Merci pour ton aide, elle m'aura permis d'avancer.

Rechercher des sujets similaires à "inserer donnees userform tableau nomme"