Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1057 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4
Page Suivante
Auteur Sujet :

Excel macro/vba récupérer données wikipedia

n°2470313
Marc L
Posté le 23-05-2024 à 19:28:59  profilanswer
 

Reprise du message précédent :
 
  Sur le coup je ne voyais pas trop à quoi cela pouvait me servir mais depuis cela m'a donné une idée :
  je vais me servir de cette liste pour nettoyer les colonnes Développeur et Editeur par différenciation avec la plate-forme renseignée
  donc il faudra la compléter, à suivre …
 
  Il me reste encore un tiers des tests à effectuer.
 

mood
Publicité
Posté le 23-05-2024 à 19:28:59  profilanswer
 

n°2470396
xenesys
Posté le 25-05-2024 à 11:11:00  profilanswer
 

Hola j'aurais pas pensé que ça donnerait autant de job.... merci encore.


Message édité par xenesys le 29-05-2024 à 22:06:12

---------------
Topic MSI X570-X470&Co | RetourXP OC 2700X+DDR4
n°2470475
Marc L
Posté le 28-05-2024 à 18:06:32  profilanswer
 

 
  Non, c'est aussi que j'ai moins de temps ces derniers temps …
 
  Ajouts dans la liste des plates-formes :

Android
Arcade
DS
GBA
GBC
iOS
Linux
mobile
N64
N-Gage
OS X
Pocket
PS
SNES
X360
Xbla
Xbox


n°2470476
xenesys
Posté le 28-05-2024 à 19:15:03  profilanswer
 

Ah ok.  pas de souci.
Liste complétée.

 

GBA + GBC = GameBoy Advance et Color >> edit : oui


Message édité par xenesys le 28-05-2024 à 21:22:17

---------------
Topic MSI X570-X470&Co | RetourXP OC 2700X+DDR4
n°2470542
Marc L
Posté le 29-05-2024 à 19:20:10  profilanswer
 

 
  Je pensais en avoir fini avec les variations mais non …
  Affinage de la liste des plates-formes :
  - remplacer xbla par XB
  - remplacer xblb par WonderSwan …
 

n°2470606
Marc L
Posté le 30-05-2024 à 14:08:56  profilanswer
 

 
  Coder est juste une affaire de concessions vu les pages web non normalisées  …
 
  Options :
 
  1) Pour l'année : il y a des pages sans Date de sortie, ce sont principalement des pages génériques pour une franchise / saga
      mais pas celle dédiée spécifiquement au jeu en question.
      a) Récupérer l'année depuis Premier jeu ou
      b) si page générique l'année affichera trois petits points. Mettre à jour la bonne page web, celle spécifique au jeu comportant la date de sortie
          car pour certains jeux vis à vis de la plate-forme il peut y avoir une année différente avec celle du premier jeu (exemple Splinter Cell).
          Pour la mise à jour il faudra soit juste modifier le lien hypertexte (la procédure donnant priorité au lien hypertexte)
          ou bien le supprimer et corriger le nom du jeu …
 
  2) Pour Développeur & Éditeur : quelles sont les règles de conservation ou de suppression ?
      a) Supprimer toutes les sociétés comportant entre parenthèses une plate-forme différente (via la liste des plate-formes évoquée précedemment)
          mais que faire de celles comportant d'autres informations ? (ex : multijoueur, gameplay, HD, J2ME, Steam, level design, assistance, DLC, …)
      b) Conserver la première société si sans parenthèse et toute société correspondant à la plate-forme.
 

n°2470647
xenesys
Posté le 30-05-2024 à 21:45:03  profilanswer
 

1) Vu que le nom du jeu doit être un minimum précis, cela ne devrait pas tomber sur la page "saga" mais si c'est le cas vaut mieux faire la date du 1er jeu. non ?

 

2)
   a) c'est possible d'avoir un exemple avec tous ces "multijoueur, gameplay, HD, J2ME, Steam, level design, assistance, DLC" ? je n'ai pas trouvé de jeux avec ces détails.

 

  b) cela semble le mieux. Le 1er nom de société est l'éditeur principal du jeu + les autres noms sont des sociétés qui ont adapté le jeu pour la plate-forme sélectionnée.

 

reste les zones géographiques à filtrer ou non ? perso ca me dérange pas plus que ca.
ex : https://fr.wikipedia.org/wiki/Cadence_of_Hyrule
qui remonte "Spike Chunsoft au Japon Nintendo dans le reste du monde"....

 

exemple : https://fr.wikipedia.org/wiki/BioShock_(jeu_vid%C3%A9o)
ca garderait "Éditeur : 2K Games" et date "EUR : 29 août 2007" ou juste "2007" ?


Message édité par xenesys le 30-05-2024 à 21:45:37

---------------
Topic MSI X570-X470&Co | RetourXP OC 2700X+DDR4
n°2470659
Marc L
Posté le 31-05-2024 à 09:19:06  profilanswer
 

 
  Réponses :
 
  1) Malgré le nom une vingtaine de jeux pointent sur une page générique au lieu de la page ad'hoc.
      L'année du Premier jeu ne correspond pas toujours à l'année de la plate-forme dans la page ad'hoc, mon capitaine …
      Exemple avec Splinter Cell :
      page générique du catalogue                      année du Premier jeu : 2002
      page ad'hoc du jeu année plate-forme (PC aka Windows) zone EUR : 2003 …
                            Et si cela avait été pour la PlayStation 3 l'année est 2011, un gouffre !
      Pour les pages génériques je peux récupérer l'année du Premier jeu donc peu importe la plate-forme
      entre accolades {2002} afin d'indiquer que p't'être ben qu'elle est bonne mais p't'être ben qu' non !
      Laissant ainsi la possibilité de corriger plus tard soit l'année soit le lien hypertexte …
 
      Si choix sur le Premier jeu alors je ferais de même pour les jeux dont l'année est indiquée entre parenthèses dans le nom du jeu (ou dans le lien).
 
  2) a) Voir : https://fr.wikipedia.org/wiki/Bioshock
                  https://fr.wikipedia.org/wiki/Bioshock_2
                  https://fr.wikipedia.org/wiki/Another_World_(jeu_vidéo)
                  https://fr.wikipedia.org/wiki/Age_o [...] e_of_Kings
                  https://fr.wikipedia.org/wiki/Age_of_Mythology
                  https://fr.wikipedia.org/wiki/Assas [...] Black_Flag
                  https://fr.wikipedia.org/wiki/Borderlands_(jeu_vidéo)
                  https://fr.wikipedia.org/wiki/Borde [...] of_Dr._Ned
                  https://fr.wikipedia.org/wiki/Far_Cry_3
                  https://fr.wikipedia.org/wiki/Far_Cry_4
                  https://fr.wikipedia.org/wiki/Half-Life_2
                  https://fr.wikipedia.org/wiki/Quake
                  https://fr.wikipedia.org/wiki/Retur [...] olfenstein
                  https://fr.wikipedia.org/wiki/Le_Se [...] aux_Online
                  https://fr.wikipedia.org/wiki/Driver_:_San_Francisco
                  https://fr.wikipedia.org/wiki/Watch_Dogs_(jeu_vidéo)
                  https://fr.wikipedia.org/wiki/Prey_(jeu_vidéo,_2006)
                  https://fr.wikipedia.org/wiki/Tomb_ [...] déo,_2013)
                  https://fr.wikipedia.org/wiki/Doom_64
 
  2) b) Avec une nouvelle idée : limiter à la largeur de la colonne …
 
  Oui en tenant compte de la zone géographique, pour Cadence of Hyrule seul restera Nintendo.
 
  Pour Bioshock comme Y est indiqué dans le titre de la colonne et non pas Date de sortie donc je suis parti sur l'année …
  A cause de l'inconsistance des pages Wiki de jeux j'ai codé pour le plus grand nombre et quand la plate-forme n'est pas trouvée selon un contexte précis
  - il y a plusieurs contextes, quand je code pour les moins nombreux cela casse ce qui marche pour les autres
    donc tous les contextes ne sont pas traités évitant ainsi la super usine à gaz -
  alors la première année trouvée est extraite …
  Même si l'année n'est pas extraite de la bonne ligne souvent c'est la bonne, coup de bol !
  Seule une page de jeu codée avec les pieds pose problème : Fez
 
  S'il faut partir sur la date au lieu de l'année, autant mettre Date de sortie en titre de colonne mais il y aura donc plus d'erreurs d'extraction.
 

n°2470660
Marc L
Posté le 31-05-2024 à 09:30:26  profilanswer
 

 
  Autre idée pour les pages génériques de jeux mais je n'ai pas encore étudié la faisabilité, cela dépendra de la constance sur ce point :
  si pas de Date de sortie alors remplacer la page par celle en lien dans Premier jeu


Message édité par Marc L le 31-05-2024 à 09:32:14
n°2470726
xenesys
Posté le 31-05-2024 à 18:29:32  profilanswer
 

1) j'aurais tendance à dire que si ca récupère déjà une année en fonction de la plateforme, c'est déjà pas mal. Si c'est faux pour quelques cas, ca se corrige à la main.

 

2) a) ah pardon j'ai oublié de supprimer des cas.... steam/multijoueur/J2ME j'avais vu mais pas vu de cas avec "level design, assistance," ok.

 

2) b) je pense qu'il faut rester sur l'année. Si en plus ca évite des erreurs c'est encore plus le meilleur choix.

 

>> le 2)b) semble le meilleur choix pour le script ?

 

Pour les pages génériques, j'aurais dit de ne rien remplir. Pour ces cas là, faudra remplir à la main. Si la grande majorité d'un tableau est rempli par le script, ca sera déjà très bien.

 

Message cité 1 fois
Message édité par xenesys le 31-05-2024 à 18:29:50

---------------
Topic MSI X570-X470&Co | RetourXP OC 2700X+DDR4
mood
Publicité
Posté le 31-05-2024 à 18:29:32  profilanswer
 

n°2470736
Marc L
Posté le 31-05-2024 à 19:31:41  profilanswer
 

xenesys a écrit :

1) j'aurais tendance à dire que si ca récupère déjà une année en fonction de la plateforme


             A la Magdane « je récapépète depuis le début » : pour récupérer une année en fonction de la plate-forme
             il faut déjà ouvrir la page ad'hoc car la date de la page générique peut ne pas correspondre à celle de la plate-forme.
             Et je viens de vérifier, c'est bon depuis la page générique : si lien dans Premier jeu alors ce lien remplace la page générique,
             sinon l'année de la page générique est extraite entre accolades …
 
 

xenesys a écrit :

2) a) j'ai oublié de supprimer des cas.... steam/multijoueur/J2ME …


             Que supprimer ? Uniquement la partie entre parenthèses (incluses) ou la ligne complète société comprise ?


Message édité par Marc L le 31-05-2024 à 19:31:56
n°2470740
xenesys
Posté le 31-05-2024 à 20:23:45  profilanswer
 

Désolé j'ai l'impression de ne pas bien tout comprendre par moment....
 
1) OK je pense avoir mieux compris. l'idée est bonne ca me va.
 

Citation :

2)
   a) c'est possible d'avoir un exemple avec tous ces "multijoueur, gameplay, HD, J2ME, Steam, level design, assistance, DLC" ? je n'ai pas trouvé de jeux avec ces détails.


 
Dans ma réponse j'avais oublié de supprimer les éléments que j'avais trouvés dans les pages wikipédia de certains jeux. donc je cherchais des cas avec "level design" par exemple.
Mais j'ai compris qu'ils étaient tous entre parenthèses à cotés des noms d'éditeurs.
>> Pour le script, je dirais qu'il faut garder l'éditeur uniquement (pas l'élément entre parenthèse).


---------------
Topic MSI X570-X470&Co | RetourXP OC 2700X+DDR4
n°2470993
Marc L
Posté le 05-06-2024 à 11:04:17  profilanswer
 

 
  Suite aux derniers tests, mise à jour de la liste des plates-formes : modifier Mac OS X en Mac et corriger Pocket en Pocket PC
 
  Sinon en fin de la semaine dernière j'ai subi différents crashes, même parfois sans la procédure en cours d'exécution !
  Ou bien à l'ouverture du classeur, message fichier corrompu / endommagé etc …
  La récupération / réparation ne donnant rien (vague message problème de formules de calculs (?),  
  j'ai fini par perdre le dernier code, me remémorant quand même le squelette principal.
 
  Le lendemain voulant repartir de ton fichier téléchargé quand j'ai voulu dupliquer la feuille pour de futures comparaisons avant / après
  de nouveau le crash d'Excel donc j'ai commencé à douter de l'ordinateur : état du disque ok, vérification d'erreurs de la partition ok …
  J'ai testé la même opération de duplication d'une feuille d'un autre gros classeur : pas de souci.
  Je retente avec le tien : crash de nouveau …
  Donc pour conclure soit c'est une histoire d'incompatibilité entre ma version d'Excel et la tienne devant être bien plus récente, du genre 365,
  ou il y a vraiment un loup dans ce classeur.
  Du reste dans les classeurs récents d'Excel il y a un point d'exclamation dans l’icône de ce classeur téléchargé
  ce qui n'empêche pas de l'ouvrir mais après on connait la suite …
 
  Pour redémarrer je n'ai conservé que la feuille DATA dans un nouveau classeur puis ajout d'une nouvelle feuille pour le catalogue
  puis copie des données du fichier téléchargé pour les coller dans le nouveau classeur, ne prenant maintenant sans le superflu que 140 Ko …
 
  Depuis j'exporte le code dans un fichier texte - au cas où - et j'ai mis en place un double backup automatique lors de la sauvegarde :
  jusqu'à présent je n'ai plus eu de crash …
 
  Du coup j'ai pu intégrer dans la nouvelle version certains cas spéciaux (pages codées avec les pieds, ok maintenant pour Fez).
  Une procédure en cascade louvoyant entre les différents cas rencontrés parmi 382 web pages, pour ne pas dire une mini usine à gaz …
  Je pense en avoir fini mais avant de partager le code j'attends de pouvoir le tester sur une version plus récente de Windows et d'Excel
  afin d'éviter le souci rencontré avec la procédure du catalogue des BD.
 

n°2471034
xenesys
Posté le 05-06-2024 à 23:00:54  profilanswer
 

Ah merde. beaucoup de bordel pour un fichier xlsm ?? surprenant que cela arrive "que" maintenant.
Pourtant mon fichier xlsm a été créé depuis une version 2019 pro de Office (win 11 pro 64b). Donc un pack office loin d'être le plus récent ou online comme 365.
 
Au cas où j'ai remis le fichier avec les plateformes à jour :
https://transfert.free.fr/KvlD35N


---------------
Topic MSI X570-X470&Co | RetourXP OC 2700X+DDR4
n°2471066
Marc L
Posté le 06-06-2024 à 13:17:49  profilanswer
 

 
  En fait je codais sur une version précédente me servant de primo tests avant d'intégrer dans le dernier fichier téléchargé …
  Téléchargement du fichier du post précédent, test de copie de la feuille du catalogue dans un nouveau document : ok et merci.
 
  En attendant de pouvoir tester sur un Windows plus récent j'essaie d'affiner un peu mais déjà cela frise les 100% …
 

n°2471501
Marc L
Posté le 10-06-2024 à 09:38:01  profilanswer
 

 
  Les jeux ci-dessous ont-ils une page Wiki ?
 
  Age of Mythology: Extended Edition
  Bioshock Infinite : Clash in the Clouds
  Bioshock Infinite : Tombeau Sous-Marin - 1ere partie
  Bioshock Infinite : Tombeau Sous-Marin - 2ème partie
  Duke Nukem 3D: 20th Anniversary Edition World Tour
  Nascar Racing 2005 Simracing
  NASCAR The Game: Inside Line
  NASCAR Heat 2
  Prince of Persia : L'Ame du Guerrier
  Project IGI-2 : Covert Strike
  Rise of Nations : Extended Edition
  SpellForce : The Breath of Winter
  Spore : Pack d'Eléments Etranges & Mignons
  The Elder Scrolls IV: Oblivion : The Shivering Isles
  The Elder Scrolls V: Skyrim - Dawnguard
  The Elder Scrolls V: Skyrim : Special Edition
  Race Driver : GRID
  Shift 2 Unleashed
  Fairy Bloom Freesia
  The Talos Principle : Road to Gehenna
  Supraland
  Castlevania Anniversary Collection
  TURRICAN ANTHOLOGY
  The Legend of Zelda : The Wind Waker HD
  The Legend of Zelda : Twilight Princess HD
 

n°2471629
xenesys
Posté le 10-06-2024 à 20:54:16  profilanswer
 

 Age of Mythology: Extended Edition >> NON
  Bioshock Infinite : Clash in the Clouds >> NON
  Bioshock Infinite : Tombeau Sous-Marin - 1ere partie >> NON
  Bioshock Infinite : Tombeau Sous-Marin - 2ème partie >> NON
  Duke Nukem 3D: 20th Anniversary Edition World Tour >> NON
  Nascar Racing 2005 Simracing >> NON
  NASCAR The Game: Inside Line >> NON
  NASCAR Heat 2 >> NON
  Prince of Persia : L'Ame du Guerrier >> https://fr.wikipedia.org/wiki/Princ [...] u_guerrier
  Project IGI-2 : Covert Strike >> https://fr.wikipedia.org/wiki/I.G.I.-2:_Covert_Strike
  Rise of Nations : Extended Edition >> le jeu de base oui mais pas la version extended edition  https://fr.wikipedia.org/wiki/Rise_of_Nations
  SpellForce : The Breath of Winter >> NON / intégré au jeu de base https://fr.wikipedia.org/wiki/Spell [...] _of_Winter
  Spore : Pack d'Eléments Etranges & Mignons >> NON
  The Elder Scrolls IV: Oblivion : The Shivering Isles >> https://fr.wikipedia.org/wiki/The_E [...] ring_Isles
  The Elder Scrolls V: Skyrim - Dawnguard >> https://fr.wikipedia.org/wiki/The_E [...] _Dawnguard
  The Elder Scrolls V: Skyrim : Special Edition >> NON
  Race Driver : GRID >> https://fr.wikipedia.org/wiki/Race_Driver:_GRID
  Shift 2 Unleashed >> https://fr.wikipedia.org/wiki/Shift_2:_Unleashed
  Fairy Bloom Freesia >> NON
  The Talos Principle : Road to Gehenna >> NON (DLC)
  Supraland >> NON
  Castlevania Anniversary Collection >> NON
  TURRICAN ANTHOLOGY >> NON
  The Legend of Zelda : The Wind Waker HD >> NON / le remaster HD est dans cette page https://fr.wikipedia.org/wiki/The_L [...] Wind_Waker
  The Legend of Zelda : Twilight Princess HD >> NON / le remaster HD est dans cette page https://fr.wikipedia.org/wiki/The_L [...] t_Princess

 

Certains jeux n'avaient pas la bonne orthographe dans le tableau


Message édité par xenesys le 10-06-2024 à 20:57:27

---------------
Topic MSI X570-X470&Co | RetourXP OC 2700X+DDR4
n°2472132
Marc L
Posté le 14-06-2024 à 12:57:04  profilanswer
 

 
  Ajout dans la liste des plates-formes : Europa-R
 
  Sous Windows 11 parfois le texte renvoyé par une requête est différent de celui sous Windows 8.1,
  des lignes vides ou avec un espace pouvant être insérées de ci, de là …
  Cela m'a donc pris du temps pour vérifier & trouver un compromis;
  espérant que cela fonctionne de même de ton côté sinon tu devras débuguer par toi même, de longues soirées d'hiver en perspective !
 
  La démonstration ci-dessous se base sur les cellules vides de la colonne dénommée 'Y' de la table de la feuille active pour télécharger les données,
  donc bien vérifier les lignes à conserver - jeux sans page Wiki, consoles, … - n'ont pas cette cellule 'Y' vide.
  Les colonnes 'Jeux' & 'Plate-forme' ainsi après la colonne 'Y' les colonnes 'Développeur', 'Éditeur' & 'Genre' sont aussi nécessaires,
  une manque (ou ordre non respecté après 'Y') et la procédure s'arrête, tout comme si la colonne 'Y' n'a pas de cellule vide …
   
  Non référencé dans l'aide VBA : la méthode Evaluate bien utile pour allouer directement une variable Array
                                                 renvoie une erreur si la chaîne est supérieure à 255 caractères.
 
                                                 C'est la raison de la création de la variable G en plusieurs étapes.
 
  Pour un jeu à télécharger la priorité est donnée au lien hypertexte dans la colonne 'Jeux' s'il existe déjà
  - cela permet de modifier le nom du jeu selon ses préférences - ,
  sinon la procédure cherche une page Wiki associée au jeu devant comporter une classe 'infobox_v'.
  Sans cette classe une nouvelle tentative est effectuée en ajoutant à l'URL '_(jeu_vidéo)' s'il ne se termine pas déjà avec une parenthèse.
  Si la classe et 'Premier jeu' existent dans la page - donc page générique d'une saga - alors la procédure ouvre le lien de 'Premier jeu' s'il existe.
  Si au final la page Wiki n'est pas trouvée alors seule la colonne 'Y' est modifiée par un signe moins …
 
  Seules les pages ayant une ou plusieurs classes 'infobox_v3' sont traitées.
  Sans alors seule la colonne 'Y' est modifiée par un point d'exclamation (comme Sherman M4 et son 'infobox_v2').
  Avec et si la colonne 'Jeux' n'a pas de lien hypertexte alors le lien de la page trouvée est ajouté.
 
  Si la colonne 'Plate-forme' n'est pas renseignée alors seule la colonne 'Y' est modifiée par 'P-f?' …
 
  Sans 'Date de sortie' ni 'Premier jeu' dans la page alors la colonne 'Y' est affublée de trois points (The Elder Scrolls VI).
 
  Pour une page générique sans lien dans 'Premier jeu' alors l'année est extraite de 'Premier jeu' entre accolades
  (comme F.E.A.R. par exemple, si libellé FEAR sa page serait trouvée) …
 
  Si pas de date trouvée entre 1900 et 2099 alors la colonne 'Y' sera affectée par un point d'interrogation.
 
  Pour l'extraction de l'année je suis parti des cas les plus courants mais il y a trop de cas particuliers ou parfois une page codée avec les pieds (Fez) …
  Heureusement quand l'extraction ne s'effectue pas sur la bonne date l'année est souvent la bonne, coup de bol !
 
  Après le nettoyage des colonnes :
  - si la colonne 'Développeur' est vide et si 'Développeur' existe dans la page alors seule la première société est ajoutée.
  - Si la colonne 'Éditeur' est vide alors le contenu de 'Développeur' si non vide est copié entre accolades dans 'Éditeur' …
  - Si le texte de ces deux colonnes excède la largeur de la colonne alors le texte est tronqué auquel sont ajoutés trois points.
 
 
         Références utilisées :
 

  • Microsoft HTML Object Library
  • Microsoft VBScript Regular Expressions 5.5
  • Microsoft WinHTTP Services, version 5.1


 
  Attention : une fois la procédure collée dans un module effectuer un Rechercher / Remplacer tout, la recherche sur  
                    un guillemet, un espace et une parenthèse fermante et remplacer par un guillemet et une parenthèse fermante
                    de sorte à supprimer l'espace malencontreux ajouté par ce site dans les chaînes de caractères du code !

Code :
  1. Sub DemoReq1()
  2.  Const I = 4, J = "Premier jeu", O = "https://fr.wikipedia.org", P = "\D?(19\d\d|20\d\d)\D?", Q = ", ", _
  3.        E = "|.+\((Allemagne|AN|États-Unis|US|Australie|Italie|Japon|Russie)\b.*\s*|^(AN|AS|JAP|JPN|Édition)\b.+\s*" & _
  4.            "|.+ au Japon\s*|^(Ainsi que :|Collaborations ?:|Travail additionnel:|Version originale)\s*" & _
  5.            "|^(EUR?|INT) (: )?| \(.*Europe.*\)| dans le reste du monde|en collaboration avec |\[.+\]| ?\(.+\)"
  6.    Dim oReq As New WinHttpRequest, oDoc As New HTMLDocument, oBox As Object, oTR As HTMLTableRow, _
  7.        C, R, X, H%, W%(2 To 3), F, G, Y, Z, D, L&, V$, U$, N&, B%, M, S$(), A$, K(), T
  8.     If ActiveSheet.ListObjects.Count = 0 Then Beep: Exit Sub
  9.   With ActiveSheet.ListObjects(1).Range.Columns
  10.        C = Application.Match([{"Jeux","Plate-forme","Y"}], .Rows(1), 0)
  11.        If Application.Count(C) < UBound(C) Then Beep: Exit Sub
  12.        R = Filter(Evaluate(Replace("TRANSPOSE(IF(#="""",ROW(#)))", "#", .Item(C(3)).Address)), False, False)
  13.        If UBound(R) < 0 Then Beep: Exit Sub
  14.        X = Application.Index(.Rows(1), 1, Evaluate("COLUMN(" & .Item(C(3)).Resize(, I).Address & " )" ))
  15.        If Join(X) = "Y Développeur Éditeur Genre" Then X(1) = "Date de sortie" Else Beep: Exit Sub
  16.        For H = 2 To 3:  W(H) = .Item(C(3) - 1 + H).ColumnWidth + 2.1:  Next
  17.   End With
  18.        F = Split("Jeu( vidéo)? de rôle|JRPG¤RPG§Jeu( vidéo)? d(e |')|\s+.+\(mobile\)| ?\[.*\]|,$|^\r\n| $¤" & _
  19.                  "§Stratégie( en)?( temps réel)?¤STR§plates?-?formes?¤Plates-formes" & _
  20.                  "§tir( en vue)? à la première personne( \(FPS\))?¤FPS" & _
  21.                  "§tir( en vue)?( à la)? (troisièm|3)e personne¤TPS§\r\n| ?/ ?¤, ", "§" )
  22.        ReDim G(UBound(F)):  For H = 0 To UBound(F):  G(H) = Split(F(H), "¤" ):  Next
  23.        F = [{"Flag_of_France.svg","Flag_of_Europe.svg","Icons-flag-eu"}&".png"]
  24.        Y = Evaluate(Replace("{""FRA?#"",""EUR?#"",""PAL#"",""INT#""", "#", "\b.+" & P) & ",""^[^J].*" & P & """}" )
  25.        Z = ["*"&{"PC","Windows","DOS","Win"}&"*"]
  26.   With Application
  27.        D = .Transpose(Feuil3.ListObjects(1).DataBodyRange)
  28.        If UBound(R) Then .Cursor = 2: .ScreenUpdating = False
  29.   With New RegExp
  30.       .Global = True:  .IgnoreCase = True:  .MultiLine = True
  31.        On Error GoTo Fin
  32.    For L = 0 To UBound(R)
  33.        H = Cells(R(L), C(1)).Hyperlinks.Count
  34.        V = Cells(R(L), C(1))
  35.        If H Then U = Cells(R(L), C(1)).Hyperlinks(1).Address Else U = O & "/wiki/" & Replace$(V, " ", "_" )
  36.        If L Then Application.StatusBar = "Sur " & UBound(R) + 1 & " requêtes : #" & L + 1
  37.    Do
  38.        oReq.Open "GET", U, False
  39.        oReq.SetRequestHeader "DNT", "1"
  40.        oReq.Send
  41.        N = InStr(1, oReq.ResponseText, " class=""infobox_v", 1)
  42.        B = H = 0 And oReq.Status = 200 And Not U Like "*)"
  43.        M = N = 0 And B
  44.     If M Then
  45.        U = U & "_(jeu_vidéo)"
  46.     ElseIf N * B Then
  47.         S = Split(oReq.ResponseText, ">" & J & "</th>", , 1)
  48.      If UBound(S) Then
  49.         S = Split(Split(S(1), "</td>", , 1)(0), " href=""", , 1)
  50.         M = UBound(S) > 1:   If M Then U = O & Split(S(2), """" )(0)
  51.      End If
  52.     End If
  53.    Loop While M
  54.    If oReq.Status = 200 And N Then
  55.        oDoc.body.innerHTML = oReq.ResponseText
  56.        Set oBox = oDoc.getElementsByClassName("infobox_v3" )
  57.     If oBox.Length Then
  58.         If H = 0 Then ActiveSheet.Hyperlinks.Add Cells(R(L), C(1)), U, , U
  59.         A = Cells(R(L), C(2))
  60.      If A > "" Then
  61.          ReDim K(1 To I)
  62.          S = Split(V, ": " )
  63.      For N = 0 To oBox.Length - 1
  64.       If N = 0 Or InStr(1, oBox(N).all(0).innerText, S(UBound(S)), 1) Then
  65.          .Pattern = "Flag_of_|Icons-flag-"
  66.       For Each oTR In oBox(N).getElementsByTagName("TR" )
  67.        If oTR.Cells.Length > 1 Then
  68.            H = Application.IfError(Application.Match(oTR.Cells(0).innerText, X, 0), 0)
  69. ' Année drapeau
  70.         If H = 1 And .Test(oTR.innerHTML) Then
  71.              S = Split(oTR.Cells(1).innerText, vbCrLf)
  72.             .Pattern = P
  73.          If .Execute(oTR.Cells(1).innerText).Count >= UBound(S) Then
  74.             .Pattern = P & "<"
  75.          For Each M In F
  76.              B = 2 - (InStr(1, M, "Flag_of_", 1) > 0)
  77.              S = Split(oTR.innerHTML, M, , 1)
  78.              If UBound(S) >= B Then If .Test(S(B)) Then H = 0: K(1) = .Execute(S(B))(0).SubMatches(0): Exit For
  79.          Next
  80.          End If
  81.         End If
  82.            If H Then K(H) = oTR.Cells(1).innerText
  83.        End If
  84.       Next
  85.           If Not IsEmpty(K(1)) Then Exit For
  86.       End If
  87.      Next
  88.           B = A = "PC":  V = "(" & A & IIf(B, "|Windows)", " )" )
  89. ' Année
  90.       If K(1) = "" Then
  91.          .Pattern = J & "\s*" & P
  92.           If .Test(oBox(0).innerText) Then K(1) = "{" & .Execute(oBox(0).innerText)(0).SubMatches(0) & "}" Else K(1) = "…"
  93.       ElseIf InStr(K(1), vbLf) = 0 Then
  94.          .Pattern = P:  If .Test(K(1)) Then K(1) = .Execute(K(1))(0).SubMatches(0) Else K(1) = "?"
  95.       Else
  96.           .Pattern = "^(\r\n)+|\n\r|\s+.+\s+\(Early Access\)|.*" & P & "\(accès anticipé\)|Accès anticipé\s+.+" & P & "\s+"
  97.               K(1) = .Replace(K(1), "" )
  98.           .Pattern = "Europe \(" & V & "\)\s+.+" & P:             H = -(.Test(K(1)))
  99.            If H = 0 Then .Pattern = ".*" & V & "\b.*" & P & "$":  H = -(.Test(K(1))): If H = 0 Then _
  100.                          .Pattern = P & "\s*\(.*" & V & "\b.*\)"
  101.        If .Test(K(1)) Then
  102.            K(1) = .Execute(K(1))(0).SubMatches(H)
  103.        Else
  104.            H = 0:  M = -1
  105.           .Pattern = P
  106.         If InStr(K(1), vbLf) Then
  107.             If B Then T = Z Else T = Array("*" & A & "*" )
  108.             S = Split(K(1), vbCrLf)
  109.         For N = 0 To UBound(S)
  110.          If .Execute(S(N)).Count = 1 Then
  111.              If H = 2 Then S(N) = vbCr
  112.          ElseIf Application.Count(Application.Match(T, Array(S(N)), 0)) And Not IsEmpty(M) Then
  113.              If M < 0 Then M = N - 1
  114.              For H = 0 To M:  S(H) = vbCr:  Next
  115.              H = 1:  M = Empty:  S(N) = vbCr
  116.          Else
  117.              H = 2:  S(N) = vbCr:  If M < 0 Then M = N - 1
  118.          End If
  119.         Next
  120.             T = Join(Filter(S, vbCr, False), vbLf):  If T > "" Then K(1) = T Else H = 0
  121.         End If
  122.             If InStr(K(1), vbLf) Then .Pattern = P & "\(France\)": If Not .Test(K(1)) Then .Pattern = P & "\(Europe\)"
  123.         If .Test(K(1)) Then
  124.             K(1) = .Execute(K(1))(0).SubMatches(0)
  125.         Else
  126.             If H Then U = "" Else U = " \(.*" & V & ".*\)"
  127.         Do
  128.         For Each M In Y
  129.            .Pattern = M & U:  If .Test(K(1)) Then K(1) = .Execute(K(1))(0).SubMatches(0): Exit Do
  130.         Next
  131.             If U = "" Then K(1) = "?" Else U = ""
  132.         Loop Until K(1) = "?"
  133.         End If
  134.        End If
  135.       End If
  136. ' Développeur, Éditeur
  137.          T = D
  138.          M = Application.Match(A, T, 0): If IsNumeric(M) Then T(M) = False
  139.          If B Then T(Application.Match("Windows", T, 0)) = False
  140.          M = K(2)
  141.          T = "(" & Join(Filter(T, False, False), "|" ) & " )"
  142.          T = "\s+\(" & V & "\)|.*[^\(]" & V & "\b[^\)].*\s*|" & _
  143.              ".+\s+\(" & T & ",?.*\)\s*|^" & T & "\r\n.+\s*|.*\(.*" & T & ".*\)\s*" & E
  144.      For H = 2 To 3
  145.         .Pattern = ",? Inc\.|^(\r\n)+":     K(H) = .Replace(K(H), "" )
  146.         .Pattern = " puis " & IIf(InStr(K(H), vbLf), "", "|," )
  147.                                             K(H) = .Replace(K(H), vbLf)
  148.         .Pattern = " \(.*" & V & "\b.*\)":  K(H) = .Replace(K(H), "" )
  149.         .Pattern = T:                       K(H) = .Replace(K(H), "" )
  150.         .Pattern = "\s+$":                  K(H) = .Replace(K(H), "" )
  151.         .Pattern = " - |\n ?":              K(H) = .Replace(K(H), Q)
  152.          If Len(K(H)) > W(H) Then N = InStrRev(K(H), Q, W(H)): If N Then K(H) = Left(K(H), N - 1) & " …"
  153.      Next
  154.          If K(2) = "" And M > "" Then K(2) = Split(Split(M, vbCr)(0), " (" )(0)
  155.          If K(3) = "" And K(2) > "" Then K(3) = "{" & K(2) & "}"
  156. ' Genre
  157.          For Each M In G:  .Pattern = M(0):  K(4) = .Replace(K(4), M(1)):  Next
  158.          S = Split(K(4), ", " )
  159.          For N = 0 To UBound(S):  Mid(S(N), 1, 1) = UCase(Left(S(N), 1)):  Next
  160.          K(4) = Join(S, Q)
  161.          Cells(R(L), C(3)).Resize(, I) = K
  162.      Else
  163.          Cells(R(L), C(3)) = "P-f?"
  164.      End If
  165.     Else
  166.         Cells(R(L), C(3)) = "!"
  167.     End If
  168.    Else
  169.        Cells(R(L), C(3)) = "-"
  170.    End If
  171.        If L Mod 5 = 4 Then DoEvents
  172.    Next
  173.   End With
  174. Fin:
  175.       .Speech.Speak IIf(Err.Number, Err.Description, IIf(UBound(R), "Fini", "" )), True
  176.       .StatusBar = False
  177.       .Cursor = xlDefault
  178.       .ScreenUpdating = True
  179.   End With
  180.        Set oBox = Nothing:  Set oDoc = Nothing:  Set oReq = Nothing
  181. End Sub


Message édité par Marc L le 14-06-2024 à 13:49:56
n°2472331
xenesys
Posté le 15-06-2024 à 14:49:21  profilanswer
 

merci pour ce script qui fonctionne chez moi à merveille dès le 1er test.
j'ai suivi la procédure et rencontré aucun souci en refaisant tout le tableau.
Bravo.

 

peut-on conclure que tout est fini ? ^^''


Message édité par xenesys le 15-06-2024 à 14:49:39

---------------
Topic MSI X570-X470&Co | RetourXP OC 2700X+DDR4
n°2472347
Marc L
Posté le 15-06-2024 à 17:51:54  profilanswer
 

 
  Merci, cela me rassure car vu les soucis rencontrés sur une version récente de Windows …
 
  Cette procédure résulte des tests de 388 pages Wiki de jeux.
  Oui c'est fini si pas d'autre jeu posant problème, un cas spécial non rencontré.  
  Il y aurait bien un truc ou deux à affiner, comme les dates des drapeaux multi-plates-formes,
  la procédure récupérant uniquement les dates des drapeaux sans ou mono-plate-forme
  mais bon avec les coups de bols cela a permis de simplifier le code, en tout cas de l'alléger


Message édité par Marc L le 15-06-2024 à 18:45:00
n°2472378
xenesys
Posté le 16-06-2024 à 12:03:20  profilanswer
 

pour ceux que cela peut intéresser, petit récapitulatif lors de la création de votre fichier de catalogue de jeux;

 

- Créer un fichier excel XLSM
- Pour éviter les problèmes de fonctionnement, renommer l'onglet "Catalogue Games"
- Pour les colonnes du fichier il faut :

Code :
  1. Jeux / Cover / Saga / Statut / Stock / Plate-forme / Y / Développeur / Éditeur / Genre / _Infobox / x


précisions :
>> jeux : il faut que le titre soit conforme à celui du site wikipedia
>> cover = pochette de jeux (soit lien hypertexte vers une image ou insertion dans un commentaire ou autre méthode)
>> Saga = si vous voulez regrouper des jeux pour famille/série/etc
>> Stock = pour savoir si vous l'avez encore ou non.
>> Y = YEAR - c'est pour l'année de sortie du jeu.

 

- suivre la procédure de Marc L du post https://forum.hardware.fr/forum2.ph [...] 0#t2472132
 (Script à copier dans un module)
- pour la colonne "_Infobox", pour rappel, voici le script (A copier dans la feuille du catalogue)

Code :
  1. Sub TestReq_infobox1()
  2.       Const S = "infobox_v", J = "_(jeu_vidéo)", Z = "*" & J
  3.         Dim L%, V, T$(), R&, P&
  4.             L = Len(S) + 1
  5.             V = ListObjects(1).ListColumns(1).DataBodyRange
  6.             ReDim T(1 To UBound(V), 0)
  7.        With CreateObject("WinHttp.WinHttpRequest.5.1" )
  8.             On Error Resume Next
  9.         For R = 1 To UBound(V)
  10.             Application.StatusBar = "Sur " & UBound(V) & " requêtes : #" & R
  11.            .Open "GET", "https://fr.wikipedia.org/wiki/" & V(R, 1), False
  12.            .setRequestHeader "DNT", "1"
  13.             Err.Clear
  14.            .send
  15.          If Err.Number = 0 Then
  16.             If .Status = 200 Then
  17.                    P = InStr(1, .responseText, S, 1)
  18.                 If P Then T(R, 0) = Mid(.responseText, P, L) & T(R, 0) _
  19.                      Else If Not V(R, 1) Like Z Then T(R, 0) = " ¤": V(R, 1) = V(R, 1) & J: R = R - 1
  20.             Else
  21.                 T(R, 0) = "S#" & .Status & T(R, 0)
  22.             End If
  23.          Else
  24.             T(R, 0) = "E#" & Err.Number
  25.             Exit For
  26.          End If
  27.             If R Mod 10 = 0 Then DoEvents
  28.         Next
  29.        End With
  30.             [K2].Resize(UBound(T)) = T 'changer lettre du [*2] pour ajuster la colonne
  31.             Application.StatusBar = False
  32.     End Sub
 

- pour la colonne "x", il s'agit juste de vérifier que des jeux ne soient pas en doublon avec

Code :
  1. =NB.SI(A:A;A:A)
 

- un onglet nommé "DATA" avec un tableau des plateformes

Code :
  1. PLATEFORME
  2. Amiga
  3. Amstrad CPC
  4. Android
  5. Apple II
  6. Arcade
  7. Atari 2600
  8. Atari ST
  9. Commodore 64
  10. Dreamcast
  11. DS
  12. Europa-R
  13. Game Boy
  14. Game Boy Color
  15. Game Gear
  16. Gamecube
  17. GBA
  18. GBC
  19. GX-4000
  20. iOS
  21. Linux
  22. Mac
  23. Master System
  24. Mega Drive
  25. mobile
  26. MSX
  27. N64
  28. NES
  29. N-Gage
  30. Nintendo 3DS
  31. Nintendo 64
  32. Nintendo DS
  33. OS X
  34. PC
  35. PlayStation
  36. PlayStation 2
  37. PlayStation 3
  38. PlayStation 4
  39. PlayStation 5
  40. Pocket PC
  41. PS
  42. Saturn
  43. SNES
  44. Super Nintendo
  45. Switch
  46. Wii
  47. Wii U
  48. Windows
  49. WonderSwan
  50. X360
  51. X68000
  52. XB
  53. Xbox
  54. Xbox One
  55. ZX Spectrum
 

-si vous le voulez, le sciript "wikipedia" permet de faire une recherche de la cellule sélectionnée (A copier dans un module).

Code :
  1. Sub RechercheWikipedia()
  2. ' recherche d'une cellule sur wikipedia
  3.     Dim recherche As String
  4.     Dim url As String
  5.    
  6.     'enregistre la position cellule selectionnée
  7.     Set myActiveCell = ActiveCell
  8.    
  9.     ' Récupérer la valeur de la cellule sélectionnée
  10.     recherche = ActiveCell.Value
  11.    
  12.     ' Remplacer les espaces par des underscore dans la recherche
  13.     recherche = Replace(recherche, " ", "_" )
  14.    
  15.     ' Construire l'URL de recherche sur Wikipedia
  16.     url = "https://fr.wikipedia.org/wiki/" & recherche
  17.    
  18.     ' Ouvrir le navigateur par défaut avec l'URL de recherche
  19.     Shell "explorer.exe """ & url & """"
  20.    
  21.     'tempo pour laisser le temps d'ouvrir la page et revenir sur excel ensuite
  22.     Application.Wait Now + TimeValue("00:00:02" )
  23.    
  24.     ' Revenir à Excel
  25.     AppActivate Workbooks(1).Application.Caption
  26.    
  27.     Range("B1" ).Select
  28.     'retourne à la cellule selectionnée avant script
  29.     myActiveCell.Activate
  30.    
  31. End Sub


Message édité par xenesys le 16-06-2024 à 18:53:08

---------------
Topic MSI X570-X470&Co | RetourXP OC 2700X+DDR4
n°2472512
Marc L
Posté le 17-06-2024 à 16:52:03  profilanswer
 

 

  • Si changement de police et / ou de taille pour les colonnes 'Développeur' et 'Éditeur' alors la troncature risque de moins bien se passer : le facteur de correction de 2.1 de la ligne de code n°16 de ma démonstration devrait être modifié. C'est plus facile à gérer avec une police fixe, non proportionnelle …


  • Je viens d'apprendre par une source Microsoft récente dans une future version de Windows - fenêtre entre deux et cinq ans - la dll du VBScript serait retirée, rendant ainsi caduques mes démonstrations - BD & jeux - car en VBA adieu le moteur RegExp pour les expressions relationnelles bien pratiques pour l'extraction et le nettoyage de textes. Pour l'instant je n'ai pas d'alternative aussi puissante, peut-être injecter un code JScript en VBA et adieu le débogage ! Ou bien trouver une autre dll. Ou encore copier la dll VBScript d'un ancien Windows pour pouvoir la référencer dans un projet VBA mais je n'ai aucune idée si cela suffira …

 

n°2472552
xenesys
Posté le 17-06-2024 à 17:49:02  profilanswer
 

ok... merci pour l'info.
On va croiser les doigts pour en profiter un maximum d'années avant le changement fatidique :(


---------------
Topic MSI X570-X470&Co | RetourXP OC 2700X+DDR4
n°2472556
Marc L
Posté le 17-06-2024 à 18:05:12  profilanswer
 

 
  Oui d'ici là Microsoft évitera cette connerie, sait-on jamais …
 
  Et puis depuis peu dans la versions bêta de la future mouture d'Excel 365 des fonctions de feuille de calculs afférentes à RegExp ont été ajoutées
  donc au pire si VBA pourrait utiliser ces nouvelles fonctions cela devrait limiter la casse. Par contre quid pour les anciennes versions d'Excel …
 

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
[Divers] Importer cellules Excel vers Word/PP ou PDF, possible ?Récupérer les données d'une page web
[PowerShell]Récupérer la disposition clavier active (résolu)Ranger les données de ma db à partir d'un clique
PHP/AJAX JQuery => Comment récupérer les données en PHP ?VBA /Excel emplacements approuvés
pb de guillemets dans une recherche Google dans macro Word VBProbleme copier/coller entre Excel et Word
Plus de sujets relatifs à : Excel macro/vba récupérer données wikipedia


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR