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:
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
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