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
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 !
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 WithCeci 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.