Problème Formulaire

Bonjour,

Je souhaite créer un formulaire afin de remplir un tableau.

J'ai donc trouvé cette formule pour ajouter des lignes. Malheureusement, une erreur apparait sur la ligne souligné et en gras. Je ne comprends pas pourquoi

Private Sub CommandButton1_Click()

If TextBox1 = “” Or ComboBox1 = “” Or TextBox2 = “” Or ComboBox2 = “” Or TextBox3 = “” Then

MsgBox "Merci de remplir tout les champs"

Else

If Sheets(“TAB”).Range(“A5”) = "" Then

Sheets(“TAB”).Range(“A5”) = TextBox3

Else

Sheets(“TAB”).ListObjects(1).ListRows.Add

End If

Dlt = Sheets(“TAB”).Range(“E1048576”).End(xlUp).Row

Sheets(“TAB”).Range(“A” & Dlt) = TextBox3

Sheets(“TAB”).Range(“B” & Dlt) = ComboBox1

Sheets(“TAB”).Range(“C” & Dlt) = TextBox2

Sheets(“TAB”).Range(“d” & Dlt) = ComboBox2

Sheets(“TAB”).Range(“e” & Dlt) = TextBox1

Unload UserForm1

End If

End Sub

Cordialement,

Lovelypain

Bonjour,

tes guillemets sont étranges, regarde la différence entre les tiennes et les miennes:

Du coup ça te fait planter tout comme ce n'est pas le bon caractère, je te renvoie le code corrigé:

Private Sub CommandButton1_Click()
If TextBox1 = "" Or ComboBox1 = "" Or TextBox2 = "" Or ComboBox2 = "" Or TextBox3 = "" Then
    MsgBox "Merci de remplir tout les champs"
Else
    If Sheets("TAB").Range("A5") = "" Then
        Sheets("TAB").Range("A5") = TextBox3
    Else
        Sheets("TAB").ListObjects(1).ListRows.Add
    End If
    Dlt = Sheets("TAB").Range("E1048576").End(xlUp).Row
    Sheets("TAB").Range("A" & Dlt) = TextBox3
    Sheets("TAB").Range("B" & Dlt) = ComboBox1
    Sheets("TAB").Range("C" & Dlt) = TextBox2
    Sheets("TAB").Range("d" & Dlt) = ComboBox2
    Sheets("TAB").Range("e" & Dlt) = TextBox1
    Unload UserForm1
End If
End Sub

Exact Probleme de Guillemet Merci .

Mais du coup nouveau Problème à signaler.

Quand je remplis le formulaire, ça m'ajoute la premiere ligne à partir de A3, mais cela me rajoute aussi la date du jour pour A5 en laissant vide les autres cellules. Puis quand j'en recrée un second ça me met une erreur sur cette ligne

Sheets("TAB").ListObjects(1).ListRows.Add

Voici ci joint le fichier

Cordialement,

Lovelypain

Bonjour,

Maintenant ça va devenir compliqué de t'aider sans le fichier, car je ne sais pas ce qu'est ton listobject(1), tu peux avoir plusieurs erreurs, le listobject peut ne pas exister, dans ce cas l'index 1 est invalide, ou bien encore, tu fais un appel de propriété incorect, soit ce n'est pas utilisable avec cet objet, soit il te manque un argument, tu peux vérifier tout ça, le message d'erreur peut aussi t'orienter vers où est le souci, mais... je n'ai accès à aucune de ces informations

EDIT:

je regarde le fichier

EDIT 2:

J'ai regardé, je n'ai pas bien compris comment tu voulais structurer ton fichier, c'est bizarre ton codage...

L'erreur est : l'indice n'appartient pas à la sélection, quand je regarde, listobjects(1) appelle un objet qui n'existe pas, car quand je regarde listobjects, la propriété count renvoie 0, autrement dis, pas de listobjects, tu n'as créé ton tableau nul part, du coup tu ne peux pas l'appeler... C'est ça qui fait planter ton code.

Ecoute j'ai suivi un tuto sur internet, et je pense pas avoir compris non plus

Du coup j'ai créer un tableau mais j'ai pas l'impression que ça change grand chose.

Merci pour ton temps

Cordialement,

Lovelypain

Rebonjour,

J'ai fait pas mal de modifications sur ton fichier:

Rennomage de tous les contrôles utilisés, pour plus de lisibilité, changement de l'ordre de tabulation, pour que tout se suive (clic droit sur le fond du formulaire puis ordre de tabulation), réécriture du programme d'exportation des données, initialisation de la textbox contenant la date au lancement du formulaire plutôt que par changement dessus. Et suppression de toutes les lignes de ton tableau, sauf la première.

Ce qui n'allait pas dans ton code:

Répétition de Sheets("TAB") partout, tu peux simplement mettre un With Sheets("TAB") au début, et un end with à la fin de son utilisation.

Pas de logique sur certaines lignes:

If Sheets("TAB").Range("A4") = "" Then
Sheets("TAB").Range("A4") = TextBox3

Ceci ne sert pas, tu calcules la dernière ligne, tu regardes si elle est vide et si ce n'est pas le cas, tu incrémentes ta ligne d'export de 1.

Sheets("TAB").ListObjects(1).ListRows.Add

Ne sert pas, le tableau le fait tout seul quand tu écris en dessous de sa dernière ligne.

Dlt = Sheets("TAB").Range("E1048576").End(xlUp).Row

Utilises plutôt Rows.count que 1048576, premièrement, tu ne cherches pas le nombre de lignes, deuxièmement, c'est compatible avec de plus anciennes versions d'un classeur, qui ont moins de lignes.

Voici le nouveau code:

Nouveau code du bouton valider:
Private Sub CommandButton_valider_Click()
If ComboBox_collectivite = "" Or ComboBox_service = "" Or TextBox_agent = "" Or TextBox_detail = "" Then
    MsgBox "Merci de remplir tout les champs"
Else
    With Sheets("TAB")
        der_lig = .Range("a" & .Rows.Count).End(xlUp).Row

        If .Range("a" & der_lig) <> "" Then
            der_lig = der_lig + 1
        End If

        .Range("a" & der_lig) = Date
        .Range("b" & der_lig) = ComboBox_collectivite
        .Range("c" & der_lig) = TextBox_agent
        .Range("d" & der_lig) = ComboBox_service
        .Range("e" & der_lig) = TextBox_detail

    End With
End If
Unload Me
End Sub

Le fichier qui va avec:

Wow , merci pour ton soutien. Je vais bucher tout ça pour essayer de le refaire tout seul.

Encore une fois merci beaucoup,

Cordialement,

Lovelypain

De rien

Et tu n'es pas au bout de tes peines, il faudra alimenter les listes de tes combobox avec ta base de données, et là... ça va te demander un peu de codage, si tu vois ce que je veux dire

Bonne lecture et bonne digestion

Rechercher des sujets similaires à "probleme formulaire"