XL 2019 Erreur d'exécution 91, Variable Objet ou variable de bloc With non définie

MilkaQuercy

XLDnaute Nouveau
Bonjour,

Cette erreur m'empêche d'avancer.
Je suis novice en VBA, jusqu'à aujourd'hui, je me suis débrouillé avec des formules Excel pour arriver à mes fins. Cependant c'est devenu inévitable.
Je m'y suis donc mis, je recherche tout ce dont j'ai besoin sur des forums et donc je fais pas mal de copier/coller.
Le code ci-dessous me permet d'identifier une ligne grâce à une valeur unique dans la première colonne puis de supprimer cette ligne.
J'ai utilisé ce code via un formulaire pour renseigner un tableau simple (2 colonnes).
J'ai ensuite fabriqué un formulaire sur un onglet pour renseigner un tableau plus complexe.
VB:
Sub Delete_Machine()
    
    Set Ws = Worksheets("Home")
    Set WsMachine = Worksheets("Machine")
    
    ExistingMachine = Ws.Cells(7, 7)
    
    If ExistingMachine = "" Then
        Exit Sub
    End If

    WsMachine.Activate
    
    If MsgBox("Do you confirm the removal?", vbYesNo, "Confirmation Request") = vbYes Then
   [COLOR=rgb(250, 197, 28)]     Rows([A2:A1048576].Find(ExistingMachine).Row).EntireRow.Delete[/COLOR]
    End If
    'Search Existing Machine in Machine WorkSheet then delete the line
End Sub
Cette erreur m'identifie la ligne "find". Ce qui me rend le diagnostic compliqué c'est que l'erreur s'est déjà affichée, j'ai ajouté en amont de la ligne MsgBox "Sheets("Machine").Activate", ça a résolu le problème temporairement. Puis ça a réapparu sans que je sache pourquoi. J'ai tenté de le remettre puis l'enlever, sans succés.

J'ai le même problème avec une autre fonction (Modifier au lieu de supprimer)
Code:
    Sheets("Machine").Activate
    If MsgBox("Do you confirm the modification?", vbYesNo, "Confirmation Request") = vbYes Then
        L = Cells.Find(ExistingMachine, , , , xlByRows, xlPrevious).Row
        WsMachine.Range("K" & L) = NewInd
    End If
C'est toujours la ligne Find qui me pose problème.
J'ai essayé en déclarant une variable As Range. Comme cette formule (ci-dessous) que j'utilise pour supprimer toutes les lignes contenant la valeur que je souhaite supprimer avec le premier code ci-dessus. Sans succés nons plus.
Code:
    Do
        Set rng = WsMacMod.Range("C:C").Find(ExistingMachine)
        If rng Is Nothing Then
            Exit Do
        Else
            WsMacMod.Rows(rng.Row).Delete
        End If
    Loop
    'Search all lines with Existing Machine in Machine_Module WorkSheet then delete lines
Je vous joint le fichier. Aucune données confidentielles
Il s'agit d'une base de données pour répertorier des machines, machines constituées de modules, sur lesquels nous appliquons des variantes...
Je rencontre le problème sur le premier formulaire sur le premier onglet. La fonction "Add" a toujours fonctionné, la fonction "Modify" & "Delete" ont fonctionné mais ne fonctionnent plus.
Si vous réussissez à m'aider, merci par avance.
 

Pièces jointes

  • 000002_MachineModuleVariant_DataBase_REP_DOC_EN.xlsm
    863.3 KB · Affichages: 9
Solution
Merci Yeahou pour ta réponse.
Je m'en suis sortie en utilisant une boucle.
VB:
    If MsgBox("Do you confirm the modification?", vbYesNo, "Confirmation Request") = vbYes Then
        For nRow = 0 To 10000
            If (WsMachine.Range("A1").Offset(nRow, 0).Value = "") Then
                Exit For 'If the cell is empty, we leave the loop
            ElseIf (WsMachine.Range("A1").Offset(nRow, 0).Value = ExistingMachine) Then
                Exit For
            End If
        Next
        L = nRow + 1
        WsMachine.Range("B" & L) = NewFamily
        WsMachine.Range("C" & L) = NewGroup
        WsMachine.Range("D" & L) = NewType
        WsMachine.Range("E" & L) = NewSupplier
        WsMachine.Range("G" & L) = NewTechno...

MilkaQuercy

XLDnaute Nouveau
Précision1 : Dans le premier extrait de code du message ci-dessus, sur la ligne "find" il y a "[COLOR=rgb(250, 197, 28)" ça n'est pas dans le code, j'ai voulu mettre de la couleur sur le texte dans l'outil du forum pour mettre de la couleur sur la ligne
Précision2 : Les Variables Ws et Ws... sont déclarées en Public au début de mon module. Module qui regroupent la fonction ajouter machine, modifier machine, supprimer machine.
 

MilkaQuercy

XLDnaute Nouveau
J'ai résolu mon problème en mettant le Set et l'activation du worksheet dans le If.
Pour le moment, plus d'erreur. Je clôturerais le sujet si ça dure dans le temps.
VB:
    If MsgBox("Do you confirm the removal?", vbYesNo, "Confirmation Request") = vbYes Then
        Set WsMachine = Worksheets("Machine")
        WsMachine.Activate
        Rows([A2:A1048576].Find(ExistingMachine).Row).EntireRow.Delete
    End If
Et
Code:
    If MsgBox("Do you confirm the modification?", vbYesNo, "Confirmation Request") = vbYes Then
        Set WsMachine = Worksheets("Machine")
        WsMachine.Activate
        L = Cells.Find(ExistingMachine, , , , xlByRows, xlPrevious).Row
            WsMachine.Range("B" & L) = Family
            WsMachine.Range("C" & L) = Group
            WsMachine.Range("D" & L) = NewType
            WsMachine.Range("E" & L) = NewSupplier
            WsMachine.Range("G" & L) = NewTechno
            WsMachine.Range("H" & L) = NewNameCv
            WsMachine.Range("I" & L) = NewNameElse
            WsMachine.Range("J" & L) = NewAdjAdv
            WsMachine.Range("K" & L) = NewInd
    End If
 

MilkaQuercy

XLDnaute Nouveau
Bonjour,
ça n'a pas résolu que temporairement, comme je le craignais.
J'ai identifier le problème. Dans le tableau dans lequel je recherche, les valeurs que je recherche sont le résultat d'une formule et non des valeurs textes type : =[@[Type_Cv]]&[@Techno]&[@[Name_Cv]]&[@[Name_Machine]]&[@[Adj_Adv]]&[@Ind]
Une solution pour rechercher le résultat de ce genre de fonction?
 

MilkaQuercy

XLDnaute Nouveau
Merci Yeahou pour ta réponse.
Je m'en suis sortie en utilisant une boucle.
VB:
    If MsgBox("Do you confirm the modification?", vbYesNo, "Confirmation Request") = vbYes Then
        For nRow = 0 To 10000
            If (WsMachine.Range("A1").Offset(nRow, 0).Value = "") Then
                Exit For 'If the cell is empty, we leave the loop
            ElseIf (WsMachine.Range("A1").Offset(nRow, 0).Value = ExistingMachine) Then
                Exit For
            End If
        Next
        L = nRow + 1
        WsMachine.Range("B" & L) = NewFamily
        WsMachine.Range("C" & L) = NewGroup
        WsMachine.Range("D" & L) = NewType
        WsMachine.Range("E" & L) = NewSupplier
        WsMachine.Range("G" & L) = NewTechno
        WsMachine.Range("H" & L) = NewNameCv
        WsMachine.Range("I" & L) = NewNameElse
        WsMachine.Range("J" & L) = NewAdjAdv
        WsMachine.Range("K" & L) = NewInd
    End If
 

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16