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 SubLe 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
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