Userform probleme je deviens folle
Bonjour j'ai écrit un autre post pour Userform et un gentil monsieur ma répondu en me disant que c'était un peu bordelic et c'était vrai
Maintenant j' ai arrangé tout mais malgré tout
Quand Je clique sur nouveau et que je clique oui ca me dit
Erreur d'exécution 9
L'indice n'appartient pas à la sélection
Quand je clique pour l'arranger je vois en jaune
L = Sheets(«Clients»).Range("a65536").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement à la première ligne de tableau non vide
SVP. Pouvez vous m'aider un bon samaritain
Merci
Bonjour,
ton problème vient des guillemets. Les guillemets qu'il faut utiliser en vba sont " et non «
Merci énormement doit-je changer le guillemet dans tous mes codes
re bonjour,
oui
Merci Jai tout remplacer
ce que je ne comprend pas c'est qu'on dirait mon formulaire n'a aucun lien
Désolée de vous de vous poser une question
Par exemple quand je rentre un nouveau client ca n'enregistre pas dans la feuille Clients
mais plutôt dans la feuille création de client et c'est un peu bizarre
J'ENVOIE UN AUTRE FICHIER
Le ‘gentil monsieur’ te remercie de ton compliment
Si tu ne précises pas de quel ‘Range’ il s’agit, ta macro considère qu’il s’agit de ceux la feuille active à l’écran. Si tu veux qu’il fasse référence à une autre feuille tu dois la préciser, par exemple Sheets("Clients").Range("A" & L).Value = ComboBox1 à la place de Range("A" & L).Value = ComboBox1.
Comme tu fais références très souvent à la feuille ‘Clients’, tu peux travailler avec l’instruction With/End With, comme dans le bout de code ci-dessous :
With Sheets("Clients")
L = .Range("a65536").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement à la première ligne de tableau non vide
.Range("A" & L).Value = ComboBox1
.Range("B" & L).Value = ComboBox2
.Range("C" & L).Value = TextBox1
.Range("D" & L).Value = TextBox2
.Range("E" & L).Value = TextBox3
.Range("F" & L).Value = TextBox4
.Range("G" & L).Value = TextBox5
.Range("H" & L).Value = TextBox6
.Range("I" & L).Value = TextBox7
.Range("J" & L).Value = TextBox8
.Range("K" & L).Value = TextBox9
.Range("L" & L).Value = TextBox10
.Range("M" & L).Value = TextBox11
.Range("N" & L).Value = TextBox12
End WithTu remarqueras le point placé devant chaque instruction devant faire référence à la base inscrite après 'With'.
NB : Je n'ai pas vraiment testé le reste du code, à toi de voir.
Amicalement.
Bonsoir,
je t'ai corrigé ta procédure commandbutton_click, je n'ai pas regardé les autres
si tu ne précises pas la feuille devant une instruction range, par défaut c'est la feuille active qui est considérée.
Private Sub CommandButton1_Click()
'Pour le bouton Nouveau contact
Dim L As Integer
If MsgBox("Confirmez-vous l’insertion de ce nouveau contact ? ", vbYesNo, "Demande de confirmation d’ajout ") = vbYes Then
With Sheets("Clients")
L = .Range("a65536").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement à la première ligne de tableau non vide
.Range("A" & L).Value = ComboBox1
.Range("B" & L).Value = ComboBox2
.Range("C" & L).Value = TextBox1
.Range("D" & L).Value = TextBox2
.Range("E" & L).Value = TextBox3
.Range("F" & L).Value = TextBox4
.Range("G" & L).Value = TextBox5
.Range("H" & L).Value = TextBox6
.Range("I" & L).Value = TextBox7
.Range("J" & L).Value = TextBox8
.Range("K" & L).Value = TextBox9
.Range("L" & L).Value = TextBox10
.Range("M" & L).Value = TextBox11
.Range("N" & L).Value = TextBox12
End With
End If
Unload Me
UserForm1.Show
End SubSalut H2so4,
Désolé de t’avoir brûlé la politesse, mais comme ‘je connaissais le cas’ …….
Au moins on dit la même chose
Amicalement.
Bonsoir Yvouille,
pas de problème. je n'avais pas vu que tu avais répondu, je me serais abstenu.
bonne soirée.
Merci de tout cœur
Je m'excuse de prendre votre temps encore
tout a été fait grace a vous ce que je ne comprends pas c est que malgré tout dans mon formulaire je suis incapable de voir mes clients de les modifier de choisir code client pourtant jai tout fait
Voici mon code merci à l'avance
Private Sub UserForm1_Click()
Option Explicit
Dim Ws As Worksheet
'Pour le formulaire
Private Sub UserForm1_Initialize()
Dim J As Long
Dim I As Integer
ComboBox2.ColumnCount = 1 'Pour la liste déroulante Civilité
ComboBox2.List() = Array("", "M.", "Mme", "Mlle")
Set Ws = Sheets("Clients") 'Correspond au nom de votre onglet dans le fichier Excel
With Me.ComboBox1
For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
.AddItem Ws.Range("A" & J)
Next J
End With
For I = 1 To 10
Me.Controls("TextBox" & I).Visible = True
Next I
End Sub
Private Sub ComboBox1_Change()
'Pour la liste déroulante Code client
Dim Ligne As Long
Dim I As Integer
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
Ligne = Me.ComboBox1.ListIndex + 2
ComboBox2 = Ws.Cells(Ligne, "B2")
For I = 1 To 10
Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 2)
Next I
End Sub
Private Sub CommandButton1_Click()
'Pour le bouton Nouveau contact
Dim L As Integer
If MsgBox("Confirmez-vous l’insertion de ce nouveau contact ? ", vbYesNo, "Demande de confirmation d’ajout ") = vbYes Then
With Sheets("Clients")
L = .Range("a65536").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement à la première ligne de tableau non vide
.Range("A" & L).Value = ComboBox1
.Range("D" & L).Value = ComboBox2
.Range("B" & L).Value = TextBox1
.Range("C" & L).Value = TextBox2
.Range("E" & L).Value = TextBox3
.Range("K" & L).Value = TextBox4
.Range("F" & L).Value = TextBox5
.Range("G" & L).Value = TextBox6
.Range("H" & L).Value = TextBox7
.Range("I" & L).Value = TextBox8
.Range("J" & L).Value = TextBox9
.Range("L" & L).Value = TextBox10
End With
End If
Unload Me
UserForm1.Show
End Sub
Private Sub CommandButton2_Click()
'Pour le bouton Modifier
Dim Ligne As Long
Dim I As Integer
If MsgBox(" Confirmez-vous la modification de ce contact ? ", vbYesNo, "Demande de confirmation de modification ") = vbYes Then
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
Ligne = Me.ComboBox1.ListIndex + 2
Ws.Cells(Ligne, "B") = ComboBox2
For I = 1 To 10
If Me.Controls("TextBox" & I).Visible = True Then
Ws.Cells(Ligne, I + 2) = Me.Controls("TextBox" & I)
End If
Next I
End If
Unload Me
UserForm1.Show
End Sub
Private Sub CommandButton4_Click()
'Pour le bouton Quitter
Unload Me
End Sub
Salut,
Après en avoir parlé avec H2so4 en privé, je vais plutôt continuer la discussion avec toi ; il m’a indiqué que les formulaires n’étaient pas vraiment sa passion. De mon côté, je ne suis pas certain de pouvoir t’aider à résoudre tous tes problèmes, mais on peut déjà y aller un bon bout.
Je pense que tu devais de suite prendre certaines petites habitudes.
Premièrement je te conseille de numéroter les versions des fichiers que tu fournis afin que l’on sache facilement de quel fichier l’on parle. Par exemple la première fois tu nous as fourni le fichier ‘Gestions de clients2’ puis je t’ai renvoyé le fichier ‘Gestions de clients2 – V1’. Tu aurais alors pu renvoyer le fichier ‘Gestions de clients2 – V2’, etc.
Je pense également que ça ne sert à rien de nous fournir des kilomètres de codes approximatifs. Prends plutôt la peine d’expliquer en deux mots ce que tu désires, avec si possible des exemples.
Ensuite ça ne sert à rien de vouloir brûler les étapes. On va prendre un problème après l’autre, au risque de tout mélanger.
Je pense encore qu’il vaudrait mieux séparer ton formulaire en autant de formulaires nécessaires selon le genre de travaux que tu désires réaliser. Par exemple avoir un formulaire pour saisir un nouveau client, puis un autre formulaire pour modifier un client existant, etc. Un exemple peut peut-être te montrer les raisons de ma proposition : si tu crées un nouveau client, ce serait bien d’avoir une numérotation automatisée qui t’indique le prochain numéro de client à utiliser (le champ correspondant à ‘No Client’ devrait dont être rempli automatiquement) alors que si tu veux modifier un client existant, il faudrait que tu puisses choisir dans le champ correspondant à ‘No Client’ quel client tu veux traiter. Dans le premier cas, il faudrait que tu puisses compléter toi-même le nom du nouveau client alors que dans le second cas, le nom du client recherché par son numéro de client devrait apparaître automatiquement à l’écran afin d’être éventuellement modifié, etc.
Il est bien entendu que l’on peut garder qu’un seul formulaire qui réalise tout ça à la fois, mais c’est bien plus compliqué et tu pourras y penser lorsque tu maitriseras bien mieux les macros.
Je n’ai pas un temps illimité à te consacrer et mes interventions peuvent durer quelques jours à chaque fois.
Alors, si tu es intéressée à continuer dans ces conditions, indique-moi en deux mots que l’on peut démarrer
NB : Evite les majuscules, ça correspond à crier. Edite éventuellement ton titre dans ce sens.
A te relire.
Salut,
Après en avoir parlé avec H2so4 en privé, je vais plutôt continuer la discussion avec toi ; il m’a indiqué que les formulaires n’étaient pas vraiment sa passion. De mon côté, je ne suis pas certain de pouvoir t’aider à résoudre tous tes problèmes, mais on peut déjà y aller un bon bout.
Je pense que tu devais de suite prendre certaines petites habitudes.
Premièrement je te conseille de numéroter les versions des fichiers que tu fournis afin que l’on sache facilement de quel fichier l’on parle. Par exemple la première fois tu nous as fourni le fichier ‘Gestions de clients2’ puis je t’ai renvoyé le fichier ‘Gestions de clients2 – V1’. Tu aurais alors pu renvoyer le fichier ‘Gestions de clients2 – V2’, etc.
Je pense également que ça ne sert à rien de nous fournir des kilomètres de codes approximatifs. Prends plutôt la peine d’expliquer en deux mots ce que tu désires, avec si possible des exemples.
Ensuite ça ne sert à rien de vouloir brûler les étapes. On va prendre un problème après l’autre, au risque de tout mélanger.
Je pense encore qu’il vaudrait mieux séparer ton formulaire en autant de formulaires nécessaires selon le genre de travaux que tu désires réaliser. Par exemple avoir un formulaire pour saisir un nouveau client, puis un autre formulaire pour modifier un client existant, etc. Un exemple peut peut-être te montrer les raisons de ma proposition : si tu crées un nouveau client, ce serait bien d’avoir une numérotation automatisée qui t’indique le prochain numéro de client à utiliser (le champ correspondant à ‘No Client’ devrait dont être rempli automatiquement) alors que si tu veux modifier un client existant, il faudrait que tu puisses choisir dans le champ correspondant à ‘No Client’ quel client tu veux traiter. Dans le premier cas, il faudrait que tu puisses compléter toi-même le nom du nouveau client alors que dans le second cas, le nom du client recherché par son numéro de client devrait apparaître automatiquement à l’écran afin d’être éventuellement modifié, etc.
Il est bien entendu que l’on peut garder qu’un seul formulaire qui réalise tout ça à la fois, mais c’est bien plus compliqué et tu pourrais y penser lorsque tu maitriseras bien mieux les macros.
Je n’ai pas un temps illimité à te consacrer et mes interventions peuvent durer quelques jours à chaque fois.
Alors, si tu es intéressée à continuer dans ces conditions, indique-moi en deux mots que l’on peut démarrer
NB : Evite les majuscules, ça correspond à crier. Edite éventuellement ton titre dans ce sens.
A te relire.