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

Miss_tik76 Messages postés 27 Statut Membre -  
 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

  1. Miss_tik76 Messages postés 27 Statut Membre 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
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    DOUBLON !!!
    :-((
    Voir
    http://www.commentcamarche.net/forum/affich-26202208-vba-suppression-de-lignes-par-iterations
    1
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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)
      0
    2. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      Bonjour Michel,
      Effectivement, mais je n'avais pas vu ton exemple sur l'autre topic.
      Cordialement.
      0
  4. Utilisateur anonyme
     
    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
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    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
    -1
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      .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
      0
    2. Utilisateur anonyme
       
      re:

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

      Lupin
      0