VBA variable objet ou variabe de bloc With non définie [Fermé]

Signaler
Messages postés
26
Date d'inscription
dimanche 3 août 2008
Statut
Membre
Dernière intervention
23 janvier 2014
-
 Utilisateur anonyme -
Bonjour,

Voici mon code :

Private Sub ok_click()

    Sheets("Donnees").Select

    Dim DerligC, Iter, LigC As Integer
    Dim Col_C As Range
    Dim Nb_Tr As Long

    Application.ScreenUpdating = False

    With Worksheets("Donnees")
'Recherche derniere ligne colonne C
        DerligC = .Columns("C").Find(commande.Value, , , , , xlPrevious).Row
        Set Col_C = .Range("C2:C" & DerligC)
        
'Pour diminuer le temps de recherche
        Nb_Tr = Application.CountIf(Col_C, commande.Value)
        If Nb_Tr > 0 Then
            LigC = 1

            For Iter = 1 To DerligC Step 1
            
'Recherche de la ligne à supprimer (xlWhole recherche une valeur exacte)
                LigC = .Columns("C").Find(commande.Value, .Cells(LigC, "C"), , xlWhole).Row
                If Cells(LigC, "H").Value = produit.Value And Cells(LigC, "E").Value = delai.Value Then
                    Rows(LigC).Select
                    Selection.Delete Shift:=xlUp
                Else
                    Unload Me
                End If
            Next Iter
        End If
    End With
    
    Application.ScreenUpdating = True
  
    Unload Me

End Sub


Je ne comprends pas pourquoi à la dernière ittération le programme bug et affiche le message suivant : "variable objet ou variabe de bloc With non définie"

Merci par avance pour votre aide !

5 réponses

Messages postés
26
Date d'inscription
dimanche 3 août 2008
Statut
Membre
Dernière intervention
23 janvier 2014
1
Voici mon code suite à vos explications, mais j'ai toujours la même erreur arrivé à la dernière ittération :

Private Sub ok_click()

    Sheets("Donnees").Select

    Dim DerligC, Iter As Integer
    Dim LigC As Long
    Dim Col_C As Range
    Dim Nb_Tr As Long

    Application.ScreenUpdating = False

    With ActiveSheet

'Recherche derniere ligne colonne K
        DerligC = .Columns("C").Find(commande.Value, , , , , xlPrevious).Row
        Set Col_C = .Range("C2:C" & DerligC)
        
'Pour diminuer le temps de recherche
        Nb_Tr = Application.CountIf(Col_C, commande.Value)
        If Nb_Tr > 0 Then
            LigC = 1

            For Iter = DerligC To 1 Step -1
            
'Recherche de la position pour copier la ligne (xlWhole recherche une valeur exacte)
                LigC = .Columns("C").Find(commande.Value, .Cells(LigC, "C"), , xlWhole).Row
                If .Cells(LigC, "H").Value = produit.Value And .Cells(LigC, "E").Value = delai.Value Then
                    Rows(LigC).Select
                    Selection.Delete Shift:=xlUp
                Else
                    Unload Me
                End If
            Next Iter
        End If
    End With
    
    Application.ScreenUpdating = True
  
    Unload Me

End Sub
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 56874 internautes nous ont dit merci ce mois-ci

Messages postés
16173
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
14 juillet 2020
2 999
DOUBLON !!!
:-((
Voir
http://www.commentcamarche.net/forum/affich-26202208-vba-suppression-de-lignes-par-iterations
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 56874 internautes nous ont dit merci ce mois-ci

Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 099
Bonjour tous,
Quand plus de résultat sur la fonction Find -> renvoi erreur 91
Essaye en intercalant ces lignes..
'Recherche de la position pour copier la ligne (xlWhole recherche une valeur exacte)
                On Error Resume Next
                LigC = .Columns("C").Find(commande.Value, .Cells(LigC, "C"), , xlWhole).Row
                'C'est qu'il n'y a plus de concordance
                If Err <> 0 Then Unload Me
                If .Cells(LigC, "H").Value = produit.Value And .Cells(LigC, "E").Value = delai.Value Then
                    Rows(LigC).Select
                    Selection.Delete Shift:=xlUp
                Else
                    Unload Me
                End If

A+
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 56874 internautes nous ont dit merci ce mois-ci

Messages postés
16173
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
14 juillet 2020
2 999
Bonjour Lermite,

Mystik n'a pas compris une des réponses que je lui avais proposé (patchwork de plusieurs macros récupérées) de recherche avec la fonction Find sans avoir à actionner le gestionnaire d'erreur ni connaitre la dernière ligne du tableau ni boucler sur toutes les lignes...
d'où mon indication de doublon...

Cordialement :o)
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 099
Bonjour Michel,
Effectivement, mais je n'avais pas vu ton exemple sur l'autre topic.
Cordialement.
Bonjour,

1.) Puisque l'instruction [ Sheets("Donnees").Select ] est utilisé.
l'instruction [ With ] devient :

With ActiveSheet

2.) Puisque l'instruction [ With ] est utilisé :

l'instruction [ If Cells(LigC, "H").Value = produit.Value And Cells(LigC, "E").Value = delai.Value Then ]

devient

If .Cells(LigC, "H").Value = produit.Value And .Cells(LigC, "E").Value = delai.Value Then

3.) L'utilisation de l'instructions [ Cells ] implique l'utilisation de 2 paramètres de type Long

donc [ .Cells(LigC, "H") ] est illicite, person je n'ai jamais travaillé avec ce type d'index,

Cells( Ligne As Long, Colonne As Long )

Cdt

Lupin

Bonjour,

:-(

disons pour le plaisirs :-)

.Cells(LigC, "C") ne peut fonctionner

.Cells(Ligne As Long, Colonne As Long)

LigC est bien de type Long, mais "C" est de type string

.Cells( LigC,Columns("C").Column ) devrait fonctionner.

de même que :

.Cells(LigC, "H").Value

devrait s'écrire :

.Cells(LigC, Columns("H").Column).Value

Cdt

Lupin
Messages postés
16173
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
14 juillet 2020
2 999
.Cells(LigC, "C") ne peut fonctionner

.Cells(Ligne As Long, Colonne As Long)

LigC est bien de type Long, mais "C" est de type string


ARCHI-FAUX: FAIRE UN ESSAI AVANT DE DIRE DES BETISES !

Pour le plaisir
Utilisateur anonyme
re:

Tout à fait, c'est mon erreur :-(

Lupin