Erreur code d'exécution

Hello le forum,

J'ai depuis ce jour des bugs sur des code et/ou fonction qui fonctionnait très bien avant.

voici un code qui pose problème et je ne comprend pas pourquoi.

J'ai un message débogage en suite il me ferme Excel ?????????????

Une idée, ça vous est déjà arriver ?

image
Private Sub Btvalider_Click()

Dim Lign As Integer

Lign = 1

While Feuil5.Range("B" & Lign).Value <> ""

Lign = Lign + 1

Wend

Feuil5.Range("B" & Lign).Value = Me.ComboBox3
Feuil5.Range("C" & Lign).Value = Me.ComboBox2
Feuil5.Range("D" & Lign).Value = Me.TextBox2
Feuil5.Range("E" & Lign).Value = Me.TextBox3
Feuil5.Range("F" & Lign).Value = Me.TextBox15
Feuil5.Range("G" & Lign).Value = Me.TextBox4
Feuil5.Range("H" & Lign).Value = Me.TextBox6
Feuil5.Range("I" & Lign).Value = Me.TextBox5
Feuil5.Range("J" & Lign).Value = Me.TextBox7
Feuil5.Range("K" & Lign).Value = Me.TextBox8
Feuil5.Range("L" & Lign).Value = Me.TextBox12
Feuil5.Range("M" & Lign).Value = Me.TextBox11
Feuil5.Range("N" & Lign).Value = Me.TextBox13
Feuil5.Range("O" & Lign).Value = Me.ComboBox4
Feuil5.Range("P" & Lign).Value = Me.TextBox9
Feuil5.Range("Q" & Lign).Value = Me.TextBox10

Me.ComboBox3 = ""
Me.ComboBox2 = ""
Me.TextBox2 = ""
Me.TextBox3 = ""
Me.TextBox15 = ""
Me.TextBox4 = ""
Me.TextBox6 = ""
Me.TextBox5 = ""
Me.TextBox7 = ""
Me.TextBox8 = ""
Me.TextBox12 = ""
Me.TextBox11 = ""
Me.TextBox13 = ""
Me.ComboBox4 = ""
Me.TextBox9 = ""
Me.TextBox10 = ""

End Sub

Merci d'avance pour votre aide

Steph

Bonjour

1. Le message ne dit rien. Cliquez sur débogage pour la ligne concernée

2. ensuite je suppose que le code complète la feuil5 dans une nouvelle ligne ?
si oui, quel est la colonne qui doit toujours être remplie dans votre feuille ? La colonne B ?

Bonjour DAN,

Merci pour ta réponse, en réalité, le code fonctionnait très bien . Maintenant j'ai la première ligne (ci-dessous) est en jaune quand je click sur "Débogage"
J'ai fait un test en supprimant cette ligne et bien c'est la nouvelle ligne qui se place en jaune et si je continue, bein, j'efface le code

effectivement je renvoi la valeur dans la feuil 5 colonne B en ajoutant une ligne.

Feuil5.Range("B" & Lign).Value = Me.ComboBox3

Merci

Steph

Maintenant j'ai la première ligne (ci-dessous) est en jaune quand je click sur "Débogage"

Essayez comme ceci

Private Sub Btvalider_Click()
Dim Lign As Integer

With feuil5
    Lign = .Range("B" & Rows.Count).End(xlUp).Row + 1
    .Range("B" & Lign) = Me.ComboBox3.Value
    .Range("C" & Lign) = Me.ComboBox2.Value
    .Range("D" & Lign) = Me.TextBox2.Value
    .Range("E" & Lign) = Me.TextBox3.Value
    .Range("F" & Lign) = Me.TextBox15.Value
    .Range("G" & Lign) = Me.TextBox4.Value
    .Range("H" & Lign) = Me.TextBox6.Value
    .Range("I" & Lign) = Me.TextBox5.Value
    .Range("J" & Lign) = Me.TextBox7.Value
    .Range("K" & Lign) = Me.TextBox8.Value
    .Range("L" & Lign) = Me.TextBox12.Value
    .Range("M" & Lign) = Me.TextBox11.Value
    .Range("N" & Lign) = Me.TextBox13.Value
    .Range("O" & Lign) = Me.ComboBox4.Value
    .Range("P" & Lign) = Me.TextBox9.Value
    .Range("Q" & Lign) = Me.TextBox10.Value
End With

Dim i As Byte
For i = 2 To 13
    Me.Controls("Textbox" & i) = vbNullString
Next i
For i = 2 To 4
    Me.Controls("Combobox" & i) = vbNullString
Next i
end sub

Si ok, pensez à

Cordialement
Ps: bonjour à Gembloux...

Dan

Merci pour le code, mais j'ai le même résultat

image

je me demande si je ne dois pas refaire le formulaire ????

Steph

je me demande si je ne dois pas refaire le formulaire ????

Non du tout si cela fonctionnait avant c'est qu'il y a autre chose

Eventuellement mettez ceci juste avant la ligne en jaune

Msgbox lign

Cela permettra de voir si votre ligne à compléter est correcte

Autre question : vous n'avez pas protégé la feuille à compléter ?

Sinon possible de voir votre fichier ou une vue du tableau ?

Je n'ai rien protéger

voici le message reçu

image

C'est votre feuille Fournisseur qui a un souci. Le mieux est de la supprimer et la refaire.

Par contre, vous avez des tableaux au format structuré et donc vos codes sont à adapter.
Une fois votre feuille refaite à l'identique :
- allez dans l'éditeur VBA pour modifier le code name de la nouvelle feuille créée en "Feuil5" (dans votre fichier la nouvelle feuille devient Feui15)
- ensuite remplacez votre code par celui ci

Private Sub Btvalider_Click()
Dim Lig As Integer

With Feuil5.ListObjects(1)
    If .ListRows.Count = 0 Then
        .ListRows.Add: Lig = 1
    Else: .ListRows.Add: Lig = .ListRows.Count
    End If
    With .DataBodyRange
        .Item(Lig, 1) = Me.ComboBox3.Value
        .Item(Lig, 2) = Me.ComboBox2.Value
        .Item(Lig, 3) = Me.TextBox2.Value
        .Item(Lig, 4) = Me.TextBox3.Value
        .Item(Lig, 5) = Me.TextBox15.Value
        .Item(Lig, 6) = Me.TextBox4.Value
        .Item(Lig, 7) = Me.TextBox6.Value
        .Item(Lig, 8) = Me.TextBox5.Value
        .Item(Lig, 9) = Me.TextBox7.Value
        .Item(Lig, 10) = Me.TextBox8.Value
        .Item(Lig, 11) = Me.TextBox12.Value
        .Item(Lig, 12) = Me.TextBox11.Value
        .Item(Lig, 13) = Me.TextBox13.Value
        .Item(Lig, 14) = Me.ComboBox4.Value
        .Item(Lig, 15) = Me.TextBox9.Value
        .Item(Lig, 16) = Me.TextBox10.Value
    End With
End With

Dim i As Byte
For i = 2 To 13
    Me.Controls("Textbox" & i) = vbNullString
Next i
For i = 2 To 4
    Me.Controls("Combobox" & i) = vbNullString
Next i
End Sub

Autre point important : vous utilisez des Rowssource pour votre listbox et dans vos combobox. Comme souvent écrit, il faut éviter l'instruction Rowssource qui provoque des soucis avec VBA et plutôt choisir les instruction LIST ou ADDITEM.

Là il y a du travail pour adapter mais cela peut se faire si vous voulez. Dites-moi

Boujour Dan, Ce serait vraiment cool pour ton aide, mais je ne veux pas que tu perte ton temps.

J'aimes aussi apprendre et apprendre de mes erreurs.

Si ca ne te derrange pas, je vais essayer par moi même et si tu es d'accord, je reviens vers toi en cas de problème.

je vais donc refaire ma feuille fournisseur.... et étudier les fonction LIST et ADDITEM

Je te remercie déjà pour ce que tu as fait et pour ton aide.

steph

Bonjour

Ce serait vraiment cool pour ton aide, mais je ne veux pas que tu perte ton temps.
J'aimes aussi apprendre et apprendre de mes erreurs.

Pas de soucis pour vous aider et je comprends votre démarche.

A titre d'exemple voici ce que j'avais regardé hier dans votre projet :
1. Usf Newfournisseur :
Le code à placer qui sera exécuté à l'ouverture pour charger la combobox2

Private Sub UserForm_Initialize()
On Error Resume Next
With Feuil10.ListObjects(1)
    If .ListRows.Count > 1 Then
        ComboBox2.List = .DataBodyRange.Value
    Else: ComboBox2.AddItem .DataBodyRange(, 1).Value
    End If
End With
End Sub

Important : Vous devez supprimer le Rowssource que vous avez mis dans les propriétés de la combo sans quoi vous aurez une erreur à l'utilisation

2. USF Newdénofns : le code pour valider l'ajout de fournisseur

Private Sub Btvalider_Click()
Dim Lign As Integer

With Feuil10.ListObjects(1)
    If .ListRows.Count = 0 Then
        .ListRows.Add: Lign = 1
    Else: .ListRows.Add: Lign = .ListRows.Count
    End If
    .DataBodyRange.Item(Lign, 1) = Me.TextBox1.Text
End With
Me.TextBox1.Text = vbNullString
End sub

Le code ne vérifie pas si le nouveau fournisseur n'est pas déjà dans la base mais cela peut se faire aussi

Rem : évitez absolument les accents, espaces dans les noms que vous utilisez. Pensez anglais avant tout. Exemple le nom de votre USF --> Newdénofns

Je suppose que vous laissez le fil ouvert pour d'autres questions.. de mon coté je garde votre fichier (bien arrangé d'ailleurs) sous le coude.

Cordialement

Hello Dan,

j'ai supprimé la feuille fournisseur et j'en ai recréé une, bizarrement elle a garder le nom de la feuil5 ????

J'ai fais un essai sans changer le code et ca fonctionne a nouveau ?????

Par contre, je suis d'accord de ne plus utiliser les Rowsource mais j'ai un peu du mal a comprendre les fonctions LIST et ADDITEM.

Je garde quand même le code sous le bras on sait jamais.

Stef.

re

j'ai supprimé la feuille fournisseur et j'en ai recréé une, bizarrement elle a garder le nom de la feuil5 ????

Ok. Si vous n'avez plus d'erreur c'est bon. Il y avait un souci à ce niveau

Par contre, je suis d'accord de ne plus utiliser les Rowsource mais j'ai un peu du mal a comprendre les fonctions LIST et ADDITEM.

Que ne comprenez-vous pas ?

List : prend les infos de la colonne A d'un seul tenant
Additem
: prend les infos de la colonne A à chaque cellule. Additem vous impose de boucler sur une plage de cellules (exemple : A1 à A3) ou de mettre en regard une donnée précise (exemple : A1 à A3 correspondent aux mois. Donc une ligne où on répète l'instruction Additem --> Additem "Janvier", Additem "fevrier, Additem "Mars")

Rechercher des sujets similaires à "erreur code execution"