Erreur : la méthode "value" de l'objet "range" a échoué

Bonjour à Toutes et à Tous,

SVP, si quelqu’un peut m'aide je serai reconnaissant .

je viens de fini la réalisation de cette programme comme vous voyez dans les photos , c'est un USERFORM qui nous permet de saisir les arrêts techniques des lignes de production. donc quand on ouvre le programme le premier UserForm (UsrFrm2) s'affiche (Photo N°1).

1 usrfrm2

et là tu peux cliquer sur bouton LIGNES ( en bleu) pour que s'affiche le 2éme USERFORM (UsrFrm1) (Photo N°2) avec une multi-pages qui comport des boutons sous forme des lignes de production donc des machines.

2 usrfrm1 multipages

Le code que j'ai utilisé dans le bouton où je clique est :

Private Sub AA1B_Click()

UsrFrm2.TxtRes.Value = "ACHRAF"
UsrFrm2.TxtLig.Value = "A1"
UsrFrm2.TxtMac.Value = "BOUCHONNEUSE"
UsrFrm2.TxtMat.Value = "M2220"
UsrFrm1.Hide
UsrFrm2.Show

End Sub

Quand je clique sur n'import quelle bouton (Machine), le programme m'envoyer directement vers "UsrFrm2" Avec l'écriture automatique dans les zones de texte cadrées en rouge dans la photo N°3

3 ecriture automatique

ici l'utilisateur peut remplir le reste des cases, mais le PROBLEME ici quand il click sur le bouton ENREGISTRER (en vert)l'excel affiche un erreur ( la méthode "value" de l'objet "range" a échoué ) et sur place il commence à cessé. comme vous voyez sur la photo N° 4

4 erreur

Voici le code que j'ai utilisé pour le bouton ENREGISTRER :

Private Sub BtnEnr_Click()
Dim LastRow As Long

LastRow = WorksheetFunction.CountA(Sheets("B").Range("B:B"))

UsrFrm2.ListBox.RowSource = ""

If UsrFrm2.TxtRes.Value = "" Or UsrFrm2.TxtLig.Value = "" Or UsrFrm2.TxtMac.Value = "" Or UsrFrm2.TxtMat.Value = "" Or UsrFrm2.TxtDat.Value = "" Or UsrFrm2.TxtPro.Value = "" Or UsrFrm2.TxtInt.Value = "" Or UsrFrm2.TxtRem.Value = "" Or Me.TxtDur.Value = "" Or Me.TxtPdr.Value = "" Or (UsrFrm2.OptCor.Value = False And UsrFrm2.OptPre.Value = False And UsrFrm2.OptAme.Value = False) Then
MsgBox "MERCI DE REMPLIR TOUTES LES CASES !!"

Else

Sheets("B").Cells(LastRow + 1, 2).Value = UsrFrm2.TxtDat.Value
Sheets("B").Cells(LastRow + 1, 3).Value = UsrFrm2.TxtRes.Value
Sheets("B").Cells(LastRow + 1, 4).Value = UsrFrm2.TxtLig.Value
Sheets("B").Cells(LastRow + 1, 5).Value = UsrFrm2.TxtMac.Value
Sheets("B").Cells(LastRow + 1, 6).Value = UsrFrm2.TxtMat.Value
Sheets("B").Cells(LastRow + 1, 7).Value = UsrFrm2.TxtPro.Value
Sheets("B").Cells(LastRow + 1, 8).Value = UsrFrm2.TxtInt.Value
Sheets("B").Cells(LastRow + 1, 9).Value = UsrFrm2.TxtDur.Value
Sheets("B").Cells(LastRow + 1, 10).Value = UsrFrm2.TxtPdr.Value

If UsrFrm2.OptCor.Value = True Then
Sheets("B").Cells(LastRow + 1, 11).Value = "CORRECTIVE"
ElseIf UsrFrm2.OptPre.Value = True Then
Sheets("B").Cells(LastRow + 1, 11).Value = "PREVENTIVE"
Else
Sheets("B").Cells(LastRow + 1, 11).Value = "AMELIORATIVE"
End If

Sheets("B").Cells(LastRow + 1, 12).Value = UsrFrm2.TxtRem.Value

UsrFrm2.TxtRes.Value = ""
UsrFrm2.TxtLig.Value = ""
UsrFrm2.TxtMac.Value = ""
UsrFrm2.TxtMat.Value = ""
UsrFrm2.TxtDat.Value = ""
UsrFrm2.TxtInt.Value = ""
UsrFrm2.TxtPro.Value = ""
UsrFrm2.TxtInt.Value = ""
UsrFrm2.TxtRem.Value = ""
UsrFrm2.TxtDur.Value = ""
UsrFrm2.TxtPdr.Value = ""
UsrFrm2.OptCor.Value = False
UsrFrm2.OptPre.Value = False
UsrFrm2.OptAme.Value = False

End If

UsrFrm2.ListBox.RowSource = "Tble"
ActiveWorkbook.Save

End Sub

Merci en avance pour votre collaboration et attention.

NB : SVP, si le message a besoin de plus de clarification, nécessiter pas à demander pour que je reçoit la bonne solution

Très bon week end

Bonjour,

L'utilisation de cette instruction

UsrFrm2.ListBox.RowSource

fait planter Excel si la plage à laquelle elle fait référence, est modifiée en cours d'exécution. Mieux vaut utiliser :

UsrFrm2.ListBox.List

Bonjour,

est ce que cette cas peut la voir même j'ai déjà fait :

UsrFrm2.listbox.rowsource = ""

et après l'exécution des autres codes j'ai l'appeler en cours :

usrfrm2.listbox.rowsource = "Tble"

Si non, j'arrive pas à comprendre comment puis j'utilise le code que tu m'a donnée !!

usrfrm2.listbox.list

et Merci pour la réponse, comme la 1er fois que j'utilise ce forum je viens de voir votre commentaire.

Merci bcp

Bonjour,

'// pour initialiser
usrfrm2.Listbox1.Clear

'// pour charger
usrfrm2.ListBox1.List = Range("Tble").Value

Bonjour Monsieur,

j'ai essayé ce code, mais il s'affiche ce message d'erreur comme vous voyez ci-dessous :

erreur

Merci Bcp pour votre collaboration

Bonsoir,

Fournissez une version anonymisée de votre classeur. Sans cela, impossible de vous aider.

Bonjour,

D'accord veuillez trouver ci-joint l'application , si vous voulez d'entrer au classeurs et fenetre de VBA vous pouvez cliquez sur "ADMIN" Mot de pase requis est 2707.

REMARQUES :

J'ai essayé de modifier la taille de tableau comme vous voyez sur la photo( N° 5 , 6 et 7), excel s'affiche le même message d'erreur avec le même problème.

5 6 7

NB : vous pouvez enregistrer deux ou 3 arrêts mais après la fermeture et la réouverture de l'application tu peux ajouter un seul arrêt ou 2 et après il fait même erreur.

Merci encours une fois.

Bonsoir,

Encore une fois n'utilisez pas la propriété "Rowsource" pour un tableau modifié à l'exécution. Cela provoque l'arrêt d'Excel.

J'ai donc remplacé partout la propriété "Rowsource" par la propriété "List' et ai ajouté une Listbox supplémentaire pour les titres car ils ne sont pas affichés avec la propriété "List".

ci-joint fichier corrigé à tester

Bonjour,

Merci Beaucoup THEV . maintenant l'application est propre

Merci pour votre temps, et vraiment je suis heureux d'être membre de cette famille .

Bonne journée et bon week-end

Rechercher des sujets similaires à "erreur methode value objet range echoue"