XL 2019 Variable objet ou variable de block with non définie - erreur 91 sur userform

thespeedy20

XLDnaute Occasionnel
Bonjour le forum,

Jai un userform pour la gestion de client, avec 2 combobox (clients et clients archivés) et divers textbox

L'erreur se produit soit sur le combobox clients ou clients archivés sur la ligne suivante :

VB:
Cells(cell.Row, 6) = CDbl(Cells(cell.Row, 6))

mon fichier ci-joint
Merci de votre aide

Oli
 

Pièces jointes

  • Facture_test.xlsm
    180.7 KB · Affichages: 6

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Dans votre procédure vous cherchez à initialiser une variable range si le nom est trouvé dans la feuille.
Mais si le nom n'est pas trouvé (else) alors la variable 'cell' = nothing. D'où votre erreur qui dit bien ce qu'elle veut dire.

C'est pas une très bonne idée que de nommer une variable du nom d'un mot clef de vba : cell
Appelez votre variable c ou cellule mais pas cell. Ca porte à confusion.

Je n'ai pas autorisé les macros sur votre fichier à cause de 'WorkBook_Open' (pas apprécié du tout)

VB:
    Set cell = Range("A2:A" & Application.Max(3, Range("A" & Rows.Count).End(xlUp).Row)).Find(CmbNom, lookat:=xlWhole)
    ' Si le nom a été trouvé cell est différent de nothing
    If Not cell Is Nothing Then
        For j = 1 To 8
            Controls("TextBox" & j) = Cells(cell.Row, j)
        Next j
    Else ' Si le nom n'a pas été trouvé, cell = nothing
        TextBox1 = CmbNom
        For j = 2 To 8
            Controls("TextBox" & j) = ""
            Cells(cell.Row, 6) = CDbl(Cells(cell.Row, 6))
        Next j
    End If

Cordialement
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

j'ai renommé cell en cellu , toujours la même erreur, j ai désactivé le workbook open...
Je ne vous ai pas dit que le problème venait de là.

Je vous ai dit ce qui n'allait pas dans votre logique de test de la variable cell.

Qu'avez-vous tenter pour changer ça ?

Qu'est-ce qui n'est pas clair dans :
... si le nom n'est pas trouvé (else) alors la variable 'cellu' = nothing. D'où votre erreur qui dit bien ce qu'elle veut dire.

Si cellu = nothing (rien) , vous ne pouvez pas utiliser ses propriétés (cellu.row) puisque cellu n'existe pas.
Il vous faut trouver autre chose.

cordialement
 

thespeedy20

XLDnaute Occasionnel
re,

j 'ai redéfini comme suit :

VB:
    Dim c As Range, sh As Worksheet
    Set sh = Worksheets("Clients")
    Set c = sh.[A:A].Find(CmbNom, LookIn:=xlValues, lookat:=xlWhole)
    
    If Not c Is Nothing Then
        For j = 1 To 8
            Controls("TextBox" & j) = Cells(c.Row, j)
        Next j
    Else
        TextBox1 = CmbNom
        For j = 2 To 8
            Controls("TextBox" & j) = ""
            Cells(c.Row, 6) = CDbl(Cells(c.Row, 6))
        Next j
    End If

et je n'ai plus d'erreur... sur aucun combobox

Oli
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,
et je n'ai plus d'erreur... sur aucun combobox

Si vous n'avez plus de problème, c'est que la partie entre le else et le end if n'est jamais exécuté dans vos tests.
Parce que vos modifications n'ont rien changé au problème lui-même.

Quand c est égal à nothing il est égal à nothing et rien d'autre ce qui fait que
Cells(c.Row, 6) ne peut QUE produire une erreur.

Vous ajoutez une variable (sh) pour la feuille et changez le nom de la variable en c. Cela ne change rien au problème.

Tant que vous ne vous attaquerez pas à ce qu'il y a entre else et end if qui gère les cas où c= nothing vous n'y arriverez pas.

La question est "que mettre à la place de c.Row ?"

quel est le but de votre ligne problématique : Cells(c.Row, 6) = CDbl(Cells(c.Row, 6)) ????
convertir en double le contenu de la cellule ? et pour quelle raison ?

Bon week-end de réflexion.
 

ChTi160

XLDnaute Barbatruc
Re
ou alors
Supprimer la partie qui pose problème
Soit faire de
VB:
Else 'Si pas trouvé 
        TextBox1 = CmbNom'on colle la valeur du combo dans textbox
        For j = 2 To 8
            Controls("TextBox" & j) = "" 'On vide les Textbox
            Cells(c.Row, 6) = CDbl(Cells(c.Row, 6)) 'on formate la valeur (qui n'existe pas )de la cellule en Double
        Next j
    End If

VB:
Else'si pas trouvé 
   TextBox1 = CmbNom 'on colle la valeur du combo dans textbox
For j = 2 To 8
            Controls("TextBox" & j) = "" 'puis on vide les textbox
       Next j
   End If
et là plus d'erreur (non testé depuis mon téléphone)
Bonne fin de journée
Jean marie
 

thespeedy20

XLDnaute Occasionnel
Bonjour Hasco, ChTi160, le forum,

Après avoir regarder de plus prêt mon code, j'ai opté pour ceci

Code:
If Not c Is Nothing Then
        For j = 1 To 8
        Controls("TextBox" & j) = Cells(c.Row, j)
        Next j
    
    Else
    
     Exit Sub
    
     End if

Je n'ai trouvé d'autre, plus aucunes erreurs. je sais c'est peut-être simpliste...

Je vous remercie encore pour votre aide...

OLi
 

Discussions similaires

Réponses
7
Affichages
1 K

Statistiques des forums

Discussions
315 093
Messages
2 116 136
Membres
112 667
dernier inscrit
foyoman