Macro s'éxécute en pas à pas mais bug en utilisation normale

Bonjour,

Voici mon petit problème..... j'ai commencé le VBA il y a quelques jours ; voici mon but :

J'ai une boutique en ligne woo commerce avec son inventaire qui me fournit un CSV. (appelons le A) (fichier stock-manager-export.csv)

Un fichier XLS du vrai inventaire de la société.(appelons le B)(fichier seaviation.xls)

Bien entendu ils n'ont pas le même format donc pour importer dans la boutique en ligne j'ai fait une petite macro donc l'algorithme est le suivant :

Je prend dans l'ordre la référence d'un article dans le fichier B

Je recherche l'article dans le fichier A

Si la référence existe je récupère le donnée de stock

J'actualise la donnée de stock du Fichier B

Je passe à la référence suivante

Je continue tant que je ne rencontre pas une cellule de référence vide.

Mon code est le suivant : (PS oui je sais j'ai quelques noms de variables à la con)

Public Sub test()

Dim numero As String   'Numéro de référence à chercher
Dim celluletrouvee As Range  'Cellule trouvée dans le fichier inventaire réel'
Dim localise As String    'Variable mémoire pour addresse de la référence de travail
Dim PresentLydie As Boolean   'Booléen, la référence existe t'elle'
Dim Resultat As Integer       'Valeur du stock dans l'inventaire réel

Dim Actif As Workbook   'Mon classeur
Dim Macro As Workbook   'L'autre classeur

Set Actif = ThisWorkbook
Set Macro = Workbooks("seaviation.xls")

Actif.Activate

PresentLydie = False

Range("B1").Select
localise = ActiveCell.Address

    Do                        'Boucle de travail
        Actif.Activate
        Range(localise).Select
        Selection.Offset(1, 0).Select 'a chaque tour on passe à la référence suivante
        localise = ActiveCell.Address

        numero = ActiveCell.Value   'On prend la valeur de la référence

        ''''''''''''''''Chercher dans le classeur de Lydie (inventaire réel)''''''''''''''''
        Macro.Activate

        Set celluletrouvee = Cells.Find(numero, lookat:=xlWhole)  ' Je cherche ma référence

        If celluletrouvee Is Nothing Then
            PresentLydie = False

            'MsgBox ("pas trouvé")
        Else                       ' si je la trouve je vais prendre en mémoire dans la variable résultat la valeur du stock
            PresentLydie = True
            celluletrouvee.Activate
            Selection.Offset(0, 9).Select
            Resultat = ActiveCell.Value
        End If

        ''''''''''''''''Chercher dans le classeur woocommerce''''''''''''''''
        Actif.Activate

        Set celluletrouvee = Cells.Find(numero, lookat:=xlWhole) 'je retourne chercher la référence à actualiser pour l'inventaire en ligne

        If celluletrouvee Is Nothing Then
            MsgBox ("pas trouvé")
        Else
            celluletrouvee.Activate
            Selection.Offset(0, 5).Select
            If PresentLydie = True Then
                ActiveCell.Value = Resultat  'J'actualise la valeur stock si auparavant j'avais bien trouvé la valeur du stock
            End If
        End If

            Loop Until ActiveCell = ""  'tant qu'il y a des références je continue

End Sub

Le problème est le suivant :

Si j’exécute pas à pas, il n'y a pas de soucis, tout se passe bien, si la ref existe elle se bien à jour et si elle n'existe pas il ne se passe rien ; tout ROULE COMME SUR DES ROULETTES !

Mais lorsque j'éxécute ma macro pas en pas à pas (pas facile à lire ça ) je vois qu'elle travaille et fait plusieurs tours de boucle puis d'un coup excel plante......

Savez vous d'où cela pourait venir ?

La macro s'éxécute depuis le fichier stock-manager-export.


Pis là elle se met à marcher ......

Bon fin d'alerte désolé......

Bonjour TV, bonjour le forum,

Je ne comprends pas ta double recherche (qui doit pas mal embrouiller le code). Je comprends mal aussi que l'on puise activer un classeur sans spécifier l'onglet. C'est aussi source d'embrouilles. Et pour terminer, évite autant que le peux les Select inutiles qui ne font que ralentir l'exécution du code et sont sources de plantages !...

Essaie comme ça :

Sub Macro1()
Dim CA As Workbook 'déclare la variable CA (Classeur Actif)
Dim CM As Workbook 'déclare la variable CM (Classeur Macro)
Dim OA As Worksheet 'déclare la variable OA (Onglet Actif)
Dim OM As Worksheet 'déclare la variable OM (Onglet Macro)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim LI As Integer 'déclare la variable LI (LIgne)
Dim NUM As String 'déclare la variable NUM (Numéro)
Dim R As Range 'déclare la variable R (Recherche)
Dim RES As String 'déclare la variable RES (RESultat)
Dim TEST As Boolean 'déclare la variable TEST

Set CA = ThisWorkbook 'définit a classeur CA
Set OA = CA.ActiveSheet 'définit l'onglet OA (à adapter à ton cas)
Set CM = Workbooks("seaviation.xls") 'définit le claseur CM
Set OM = CM.ActiveSheet 'définit l'onglet OM (à adapter à ton cas)
DL = OA.Cells(Application.Rows.Count, "B").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne B de l'onglet OA
For LI = 2 To DL 'boucle sur toutes les lignes LI de 2 a DL
    TEST = False 'ínitialsie la varaible TEST
    NUM = OA.Cells(LI, "B").Value 'définit le numérie NUM (valeur de la cellule ligne LI colonne B de l'onglet OA)
    Set R = OM.Cells.Find(NUM, lookat:=xlWhole) 'définit la recherche R (recherche NUM entier dans toutes les cellule de l'onglet OM)
    If Not R Is Nothing Then 'condition : si aucune occurrence trouvée
        TEST = False 'définit la varaible TEST
    Else 'sinon
        TEST = True 'définit la varaible TEST
        RES = R.Offset(0, 9).Value 'définit la variable RES (valeur de la cellule de la première occurrence trouvée décalée de 9 colonne à droite)
    End If 'fin de la condition
    'si TEST est [Vrai], renvoie RES dans la cellule ligne LI colonne G
    If TEST = True Then OA.Cells(LI, "G").Value = RES
Next I 'prochaine ligne de la boucle
End Sub
Rechercher des sujets similaires à "macro execute pas bug utilisation normale"