Bonjour,
J'ai réalisé cette macro qui fonctionne très bien en exploitant des bribes de code ici et là. Vous avez aussi contribuez en m'aidant sur le forum.
Mais j'ai du rajouter pas mal de goto. D'après les messages que j'ai lu sur le forum il faut éviter.
Pouvez vous regarder le code et me donner des pistes d'améliorations ?
Pour ma part je planche déjà sur une seconde version qui fait les recherche directement sur une page html plutôt que de spliter les données sur un onglet.
Merci pour votre temps.
J'ai réalisé cette macro qui fonctionne très bien en exploitant des bribes de code ici et là. Vous avez aussi contribuez en m'aidant sur le forum.
Mais j'ai du rajouter pas mal de goto. D'après les messages que j'ai lu sur le forum il faut éviter.
Pouvez vous regarder le code et me donner des pistes d'améliorations ?
Pour ma part je planche déjà sur une seconde version qui fait les recherche directement sur une page html plutôt que de spliter les données sur un onglet.
Merci pour votre temps.
VB:
Sub Mise_a_jour_disponibilité()
vchrono = Now() 'pour mesurer la durée de la macro
Application.ScreenUpdating = False 'on désactive l'affichage
'Définition des variable
Dim L As Worksheet, C As Worksheet, adresse_URL As String, attribut As String
Dim Trouve As Range, PlageDeRecherche As Range
Dim disponible As String, DL As Integer, j As Integer, indisponible As String, tablo
Dim Cpt As Integer, CptSh As Integer
'vérification que l'onglet code source existe sinon création
Cpt = 0
CptSh = Sheets.Count
For i = 1 To CptSh
If Sheets(i).Name <> "code source" Then Cpt = Cpt + 1 Else Exit For
Next i
If Cpt = CptSh Then
Sheets.Add.Name = "code source"
End If
'vérification que l'onglet tri existe sinon création
Cpt = 0
CptSh = Sheets.Count
For i = 1 To CptSh
If Sheets(i).Name <> "tri" Then Cpt = Cpt + 1 Else Exit For
Next i
If Cpt = CptSh Then
Sheets.Add.Name = "tri"
End If
'Affectation de valeur aux variable
Set L = Worksheets("Feuil1") 'Je définie mon onglet Feuil1 par L
Set C = Worksheets("code source") 'Je définie mon onglet code source par C
DL = L.Cells(Application.Rows.Count, "C").End(xlUp).Row ' on calcul la dernière ligne non vide
'Début de la boucle
For j = 2 To DL
adresse_URL = L.Cells(j, 3) 'L'adresse URL se trouve dans la feuille L (liste)
codeHtml = htmlCodePage(adresse_URL) 'j'affecte ma variable adresse_URL a ce petit boût de code qui necessite un pack complémentaire pour fonctionner
Sheets("code source").Activate 'J'active la feuille ou je veux les données
codeHtml = Split(codeHtml, Chr(10)) 'Division par ligne de code
For i = 0 To UBound(codeHtml) 'je ne comprend pas cette partie du code
Cells(i + 1, 1) = codeHtml(i) 'je ne comprend pas cette partie du code
Next 'je ne comprend pas cette partie du code
'résultat je me retrouve avec le code source sur l'onglet code source et je peux lancer ma recherche
Set PlageDeRecherche = Sheets("code source").Columns(1) 'on définit la plage de recherche : onglet code source, colonne 1
emotion_stock = "<input type=""hidden"" id=""prodquantity"" value=""" 'j'affecte une valeur à la variable emotion_stock
If L.Cells(j, 3) Like "*grossisteecigarette.fr*" Then 'Première condition : je vérifie que les url contiennent le texte de la condition
Set Trouve = PlageDeRecherche.Cells.Find(What:=emotion_stock, LookIn:=xlValues, LookAt:=xlPart) 'On lance la recherche pour trouver la variable emotion_stock (enfin une partie seulement du texte)
If Trouve Is Nothing Then 'second if
L.Cells(j, 11) = "ARRET"
Else 'second else
milieu = Len(Trouve.Value) - 50 'permet le calcul de mid
stock = Mid(Trouve.Value, 47, milieu) 'permet d'extaire la quantité en stock
L.Cells(j, 11) = stock
GoTo ligneSuivante
End If 'fermeture du second if
Else
GoTo suite
End If 'fermeture du 1er if
suite:
disponible = "<span id=""availability_value"" class=""available"">" 'il s'agit de la variable qui est présente si le produit est disponible
indisponible = "<span id=""availability_value"" class=""outofstock"">" 'il s'agit de la variable qui est présente si le produit n'est pas disponible
If L.Cells(j, 10) = "simple" Then
Set Trouve = PlageDeRecherche.Cells.Find(What:=disponible, LookIn:=xlValues, LookAt:=xlPart) 'On lance la recherche pour trouver la variable disponible (enfin une partie seulement du texte)
If Trouve Is Nothing Then
Set Trouve = PlageDeRecherche.Cells.Find(What:=indisponible, LookIn:=xlValues, LookAt:=xlPart) 'On lance la recherche pour trouver la variable disponible (enfin une partie seulement du texte)
If Trouve Is Nothing Then
L.Cells(j, 11) = 0
L.Cells(j, 12) = "ARRET"
GoTo ligneSuivante
Else
L.Cells(j, 11) = 0 'le résultat lorsque tout marche
GoTo ligneSuivante
End If
Else
L.Cells(j, 11) = 10 'le résultat lorsque tout marche
GoTo ligneSuivante
End If
Else
GoTo suite1
End If
suite1:
attribut = "new Array('" & L.Cells(j, 10) & "')," 'On affecte à la variable attribut_4_nicotine la valeur recherché qui est composé des élément situé dans la colonne F via k"
Set Trouve = PlageDeRecherche.Cells.Find(What:=attribut, LookIn:=xlValues, LookAt:=xlPart) 'On lance la recherche pour trouver la variable attribut_4_nicotine (enfin une partie seulement du texte)
If Trouve Is Nothing Then
L.Cells(j, 11) = 0
L.Cells(j, 12) = "ARRET"
GoTo ligneSuivante
End If
tablo = Trouve.Value
Sheets("tri").Activate
tablo = Split(tablo, attribut)
For h = 0 To UBound(tablo)
Cells(h + 1, 1) = tablo(h)
Next
place = InStr(Cells(2, 1), ",")
stock = Left(Cells(2, 1), place - 1)
L.Cells(j, 11) = stock
ligneSuivante:
Set Trouve = Nothing
Set PlageDeRecherche = Nothing
Sheets("code source").Columns(1).ClearContents
Next j
L.Cells(1, 11) = "Stock"
Application.ScreenUpdating = True
vchrono = Now() - vchrono
MsgBox Format(vchrono, "hh:mm:ss:") & Right(Format(Timer, "#0.00"), 2)
End Sub