Extraire des données

Jucyla

XLDnaute Nouveau
Bonjour le forum,

dans le cadre d'un jeu j'aurais besoin de votre aide :)

J'aurais besoin d'extraire des données selon certaines valeurs présente dans un onglet.
Je vais essayer d'expliquer au mieu, mais ce n'est pas simple simple .

Dans l'onglet nommé "Jucyla_Source" du code html copié en tant que texte.
J'aurais besoin d'en extraire certaines lignes et de les mettre dans l'onglet nommé "Jucyla"

les lignes qui doivent être extraites sont les lignes qui contiennent les textes suivants :

- char-portrait-full-img
- star star
- char-portrait-full-level
- char-portrait-full-gear-level

il faut bien entendu que cela suive l'ordre du l'onglet "Jucyla_Source"
J'ai souligné en vert dans l'onglet "Jucyla_Source" les lignes qu'il faudrait récupéré des 3 premiers personnages
J'ai également souligné en vert les 2 derniers personnages.
L'idée étant de récupérér les lignes demandées pour chaque personnage, et donc de les mettre dans l'onglet nommé "Jucyla"
Dans l'onglet "Jucyla", j'ai mis ce que je voudrais arriver à faire, donc les 3 premiers personnages, ensuite tous les autres, et pour finir j'ai mis également les 2 derniers.

Merci pour toute l'aide apportée, cela me fera gagner des jours entiers :)
 

Pièces jointes

  • extract.xlsx
    128.6 KB · Affichages: 137

Jucyla

XLDnaute Nouveau
alors pour aider, si demain tu as quelques minutes :)

En fait dans la variable b tu as fixé la valeur à 7*, mais en fait cela varie.
J'ai du mal m'expliquer, je vais donner des exemples :

<img class="char-portrait-full-img" src="//swgoh.gg/static/img/assets/tex.charui_quigon.png" alt="Qui-Gon Jinn" title="Qui-Gon Jinn">
<div class="char-portrait-full-gear"></div>
<div class="star star1"></div>
<div class="star star2"></div>
<div class="star star3"></div>
<div class="star star4"></div>
<div class="star star5"></div>
<div class="star star6"></div>
<div class="star star7"></div>


là pour ce personnage on a la ligne star star7 qui apparait, ce personnage sera donc 7*

par contre pour ce personnage :

<img class="char-portrait-full-img" src="//swgoh.gg/static/img/assets/tex.charui_vader.png" alt="Darth Vader" title="Darth Vader">
<div class="char-portrait-full-gear"></div>
<div class="star star1"></div>
<div class="star star2"></div>
<div class="star star3"></div>
<div class="star star4"></div>
<div class="star star5"></div>
<div class="star star6"></div>
<div class="star star7 star-inactive"></div>
<div class="char-portrait-full-level">80</div>
<div class="char-portrait-full-gear-level">VIII</div>




la ligne star star7 est marquée avec star-inactive, ce qui veut dire que ce personnage n'est pas encore 7*
du coup on regarde la ligne au dessus donc star star6, et là il n'y a pas d'inactive donc ce personnage sera 6*

De la même façon pour ce personnage :

<img class="char-portrait-full-img" src="//swgoh.gg/static/img/assets/tex.charui_kyloren.png" alt="Kylo Ren" title="Kylo Ren">
<div class="char-portrait-full-gear"></div>
<div class="star star1"></div>
<div class="star star2"></div>
<div class="star star3"></div>
<div class="star star4"></div>
<div class="star star5"></div>
<div class="star star6 star-inactive"></div>
<div class="star star7 star-inactive"></div>
<div class="char-portrait-full-level">50</div>
<div class="char-portrait-full-gear-level">VII</div>

on a le texte inactive pour les lignes star star7 et star star 6, par contre pas de texte inactive sur la ligne des star star5.
ce personnage et donc 5*

de la même façon :

<img class="char-portrait-full-img" src="//swgoh.gg/static/img/assets/tex.charui_ahsoka.png" alt="Ahsoka Tano" title="Ahsoka Tano">
<div class="char-portrait-full-gear"></div>
<div class="star star1"></div>
<div class="star star2"></div>
<div class="star star3"></div>
<div class="star star4"></div>
<div class="star star5 star-inactive"></div>
<div class="star star6 star-inactive"></div>
<div class="star star7 star-inactive"></div>
<div class="char-portrait-full-level">8</div>
<div class="char-portrait-full-gear-level">II</div>

ce personnage est 4* vu qu'il n'y a pas texte inactive sur la ligne star star4

et ainsi de suite, et pour finir pour ce personnage :

<img class="char-portrait-full-img" src="//swgoh.gg/static/img/assets/tex.charui_coruscantpolice.png" alt="Coruscant Underworld Police" title="Coruscant Underworld Police">
<div class="char-portrait-full-gear"></div>
<div class="star star1"></div>
<div class="star star2 star-inactive"></div>
<div class="star star3 star-inactive"></div>
<div class="star star4 star-inactive"></div>
<div class="star star5 star-inactive"></div>
<div class="star star6 star-inactive"></div>
<div class="star star7 star-inactive"></div>
<div class="char-portrait-full-level">13</div>
<div class="char-portrait-full-gear-level">III</div>

il est donc en 1*

Si je prend maintenant le personnage qui suit dans la liste :

<div class="char-portrait-image"><img class="char-portrait-img" src="//swgoh.gg/static/img/assets/tex.charui_b2.png" alt="B2 Super Battle Droid" /></div>
</a>
</div>
<div class="collection-char-name"><a class="collection-char-name-link" href="/characters/b2-super-battle-droid/" rel="nofollow">B2 Super Battle Droid</a></div>
<div class="collection-char-statmods"><div class="pc-statmod-list"></div></div>
</div>
</div>
<div class="col-xs-6 col-sm-3 col-md-3 col-lg-2">
<div class="collection-char collection-char-missing collection-char-light-side">

là l n'y a aucune ligne qui contient un quelconque texte star star, cela veut dire que ce personnage n'est pas activé il est entre guillement 0* et donc il ne doit pas apparaitre dans la liste.
Idem pour tous les personnages qui suivent dans la liste
 

Staple1600

XLDnaute Barbatruc
Bonjour à tous

Apparemment la demande de prise de relais est passée inaperçue...

Alors je la relance, parce que pour le moment, je ne suis pas disponible.

Camarades XDLnautes, si vous pouviez filer un tit coup de main à Jucyla, ce serait chouette.
 

Staple1600

XLDnaute Barbatruc
Bonjour à tous

Jucyla
Désolé pour l'absence de relais (faut croire que l'esprit XLDien n'est plus ce qu'il était...)

J'ai trouvé un peu de temps pour me replonger dans ta galaxie très, très lointaine ;)
Ca semble Ok avec cette macro, non ?
VB:
Sub dd()
Dim DL&, LD&, j&, a$, b$, c$, d$, x&
Application.ScreenUpdating = False
j = 1
With Feuil2
  DL = .Cells(Rows.Count, 1).End(xlUp).Row
  For i = 2 To DL
  If InStr(1, .Cells(i, 1), "<img class=""char") > 0 Then
  On Error Resume Next
  a = Split(.Cells(i, 1).Text, """")(UBound(Split(.Cells(i, 1).Text, """")) - 1)
  c = Split(Split(.Cells(i + 9, 1).Text, ">")(1), "<")(0)
  d = Split(Split(.Cells(i + 10, 1).Text, ">")(1), "<")(0)
  For j = 1 To 7
  If InStr(1, .Cells(i + 1 + j, 1), "inactive") = 0 Then
  x = x + 1
  End If
  Next
  b = x
  .Cells(i, "B").Resize(, 4) = Array(a, b, c, d)
  x = 0
  End If
  Next
  .Columns("B:E").Columns.AutoFit
  .Columns(1).Delete
  .Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
End Sub
 

Jucyla

XLDnaute Nouveau
je teste merci beaucoup Ce lien n'existe plus :)

j'avais un autre compte dont j'ai oublié le mdp, depuis plusieurs années, et c'est vrai que les quelques fois où j'avais demandé des trucs, j'avais eu pleins de réponses. Mais bon c'est les vacances, et puis tu as été là , c'est super gentil de prendre de ton temps :)
 

Jucyla

XLDnaute Nouveau
Alors ça marche merci :)
y'a encore un petit truc si tu as encore 5 min le truc serait parfait :
nikw.jpg

pour toute ma liste de personnage c'est top donc tu as réussi à extraire toutes les infos, mais mes personnages s’arrêtent à la ligne 69 pour le coruscant underwold police, tout ceux en dessous je les ai pas, en gros ils sont en 0 étoiles si tu préférés.
Donc toute la liste qui commence à B2 super battle droid et toutes les lignes en dessous, il faut pas qu'elles apparaissent

dans tous les cas merci beaucoup :)
 

Jucyla

XLDnaute Nouveau
Je crois avoir trouvé Staple1600 :D

j'ai juste modifié la chaine de caractéres en mettant (<img class=""char-portrait-full) dans ton code qui du coup prenait trop de lignes , j'ai mis ça

VB:
Sub dd()
Dim DL&, LD&, j&, a$, b$, c$, d$, x&
Application.ScreenUpdating = False
j = 1
With Feuil2
  DL = .Cells(Rows.Count, 1).End(xlUp).Row
  For i = 2 To DL
  If InStr(1, .Cells(i, 1), "<img class=""char-portrait-full") > 0 Then
  On Error Resume Next
  a = Split(.Cells(i, 1).Text, """")(UBound(Split(.Cells(i, 1).Text, """")) - 1)
  c = Split(Split(.Cells(i + 9, 1).Text, ">")(1), "<")(0)
  d = Split(Split(.Cells(i + 10, 1).Text, ">")(1), "<")(0)
  For j = 1 To 7
  If InStr(1, .Cells(i + 1 + j, 1), "inactive") = 0 Then
  x = x + 1
  End If
  Next
  b = x
  .Cells(i, "B").Resize(, 4) = Array(a, b, c, d)
  x = 0
  End If
  Next
  .Columns("B:E").Columns.AutoFit
  .Columns(1).Delete
  .Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
End Sub

et du coup ça m'a pas pris les lignes que je voulais pas :)

Sauf si tu trouves mieux je crois que tu as résolu mon probleme et je t'en remercie vraiment énormément, ça va me faire gagner un temps considérable
 

Jucyla

XLDnaute Nouveau
Bonsoir le forum, Bonsoir Staple1600,

tout d'abord Staple1600, merci encore ça marche du tonnerre et ça m'aide beaucoup :)

J'ai pensé à ajouter un petit truc. Sur le principe c'est la même chose que de récupérer les personnages, mais j'ai essayé d'utiliser ton code et j'y suis pas arrivée :(

Si on reprend le fichier extract que j'avais posté dans mon message initial, en ligne 292 de l'onglet Jucyla_Source j'aimerais pouvoir récupérer la date .
Donc dans cette ligne :

<div class="user-last-updated text-muted">Last updated: <span class="datetime" data-datetime="2016-10-26T17:04:49Z" data-toggle="tooltip" data-placement="top" title="Oct. 26, 2016, 5:04 p.m. UTC"></span></div>

récupérer cette info : Oct. 26, 2016, 5:04 p.m. UTC

J'ai regardé le code et la phrase "Last updated" n'apparait que là

et la mettre dans l'onglet Jucyla dans la cellule F1 par exemple comme ça :

1ybz.jpg


Merci par avance :)
 

Modeste

XLDnaute Barbatruc
Bonjour Jucyla,
Salut JM :)

Pas certain d'avoir compris, pas certain que ça fonctionnera à tous les coups, pas cherché comment "articuler" ça à tout le reste ... Bref, une proposition minimaliste (mais comme il n'y en a pas d'autre :rolleyes: ... tu verras bien!)

Au pire, vers la fin du mois de mars, l'agrafe devrait sortir de son hibernation :p

À tester donc:
VB:
Sub test()
Set trouve = Sheets("Jucyla_Source").[A:A].Find(what:="Last updated:", LookIn:=xlValues, lookat:=xlPart)
If Not trouve Is Nothing Then
    débutDate = Mid(trouve, InStr(1, trouve, "title=", vbTextCompare) + 7, 30)
    Sheets("Jucyla").[F1] = Trim(Left(débutDate, InStr(1, débutDate, "UTC", vbTextCompare) - 1))
Else
    MsgBox "Pas trouvé la mention ""Last updated"" en colonne A"
End If
End Sub
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 489
Messages
2 088 855
Membres
103 977
dernier inscrit
Hermet