Code erreur VBA range

AMIGOVBA

XLDnaute Nouveau
Bonjour, j'ai créé un formulaire pour remplir un fichier Excel, dont voici le code et j'ai cette erreur.

J'aimerais votre avis merci à tous

1700542668808.png
 

AMIGOVBA

XLDnaute Nouveau
Bonsoir , j'explique le fonctionnement, j'ai un bouton pour faire une recherche
le bouton bleu , le second bouton appeler bouton 5 je desire remplir le tableau FAQ avec celui , pour integrer des element dont une photo et j'aimerais qu'il ne soit acccesible que par Mot de passe , au gestionnaire de la FAQ ( Foire aux questions )

Merci a toi
 

Pièces jointes

  • FAQ-OCW v14-1 PI-SSI + saisie.xlsm
    738.9 KB · Affichages: 9

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour AmigoVba, Job,
En PJ la macro reprise en partie avec :
VB:
Private Sub Valider_Click()
Dim ligne As Long, Target As Range, NomImg As String
    If [Tableau1].Item(1, 1) = "" Then ligne = 1 Else ligne = 1 + [Tableau1].ListObject.ListRows.Count
    With Worksheets("FAQ")
        .Activate
        [Tableau1].Item(ligne, 1) = TextBox1.Value
        [Tableau1].Item(ligne, 2) = TextBox2.Value
        [Tableau1].Item(ligne, 3) = TextBox4.Value
        [Tableau1].Item(ligne, 4) = TextBox3.Value
        [Tableau1].Item(ligne, 5) = TextBox5.Value
        [Tableau1].Item(ligne, 6) = TextBox6.Value
    End With
End Sub
NB: La partie qui suit a été mise en commentaires.
D'autre part dans un TDS il faut laisser XL gérer les lignes, donc supprimer toutes les lignes vides.
 

Pièces jointes

  • FAQ-OCW v14-1 PI-SSI + saisie.xlsm
    574.2 KB · Affichages: 2

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Ce qui est étonnant c'est que vous écriviez une si longue macro sans la tester dès le départ.
Il suffit d'écrire :
VB:
Private Sub Valider_Click()
Dim ligne As Long, Target As Range, NomImg As String
    If Range("FAQ").Item(1, 1) <> "" Then ligne = Range("FAQ").Rows.Count + 1 Else ligne = 1
    With Worksheets("FAQ")
        .Activate
        .Range("FAQ" & "[Titre]").Item(ligne, 1) = TextBox1.Value
    End With
End Sub
Et déjà là, ça ne marche pas. Donc vous débuguer ce petit code et lorsqu'il marche vous continuez.
Et vous gagnerez énormément de temps.
 

AMIGOVBA

XLDnaute Nouveau
Bonjour AmigoVba, Job,
En PJ la macro reprise en partie avec :
VB:
Private Sub Valider_Click()
Dim ligne As Long, Target As Range, NomImg As String
    If [Tableau1].Item(1, 1) = "" Then ligne = 1 Else ligne = 1 + [Tableau1].ListObject.ListRows.Count
    With Worksheets("FAQ")
        .Activate
        [Tableau1].Item(ligne, 1) = TextBox1.Value
        [Tableau1].Item(ligne, 2) = TextBox2.Value
        [Tableau1].Item(ligne, 3) = TextBox4.Value
        [Tableau1].Item(ligne, 4) = TextBox3.Value
        [Tableau1].Item(ligne, 5) = TextBox5.Value
        [Tableau1].Item(ligne, 6) = TextBox6.Value
    End With
End Sub
NB: La partie qui suit a été mise en commentaires.
D'autre part dans un TDS il faut laisser XL gérer les lignes, donc supprimer toutes les lignes vides.
merci a toi au top
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Comme ça, ça marche, on peut encore optimiser avec :
Code:
Private Sub Valider_Click()
Dim ligne As Long, Target As Range, NomImg As String, i%
    If [Tableau1].Item(1, 1) = "" Then ligne = 1 Else ligne = 1 + [Tableau1].ListObject.ListRows.Count
    For i = 1 To 6
        [Tableau1].Item(ligne, i) = UserForm1.Controls("TextBox" & i).Value
    Next i
End Sub
 

patricktoulon

XLDnaute Barbatruc
Bonjour à tous
Apprenez a travailler avec les tableaux structurés avec les bons outils et de la bonne manière
si le tableau1 a été créé correctement la ligne 1 n'est que visuelle au départ
VB:
Private Sub valider_Click()
    With Range("Tableau1").ListObject.ListRows.Add.Range
        For i = 1 To 6
            .Cells(i) = Me.Controls("TextBox" & i).Value
        Next
    End With
End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Patrick,
Apprenez a travailler avec les tableaux structurés avec les bons outils et de la bonne manière
C'est ce que j'essaie de faire, Maitre.
Mais si le tableau est vide alors votre macro commence en ligne 2, la ligne 1 est ignorée.
1700647438490.png


Lorsque j'applique ma macro :
VB:
Private Sub Valider_Click()
Dim ligne As Long, Target As Range, NomImg As String, i%
    If [Tableau1].Item(1, 1) = "" Then ligne = 1 Else ligne = 1 + [Tableau1].ListObject.ListRows.Count
    For i = 1 To 6
        [Tableau1].Item(ligne, i) = UserForm1.Controls("TextBox" & i).Value
    Next i
End Sub
La ligne 1 est bien prise comme référence au début :
1700647571792.png


En quoi mon code n'est pas conçu "de la bonne manière" ?
 

Statistiques des forums

Discussions
314 626
Messages
2 111 297
Membres
111 093
dernier inscrit
Yvounet