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 With

Tu 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 Sub

Salut 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 à vous deux

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.

Rechercher des sujets similaires à "userform probleme deviens folle"