Projet:Communes de France/VBA/Suppression de texte
La présente page s'inscrit dans le cadre d'un corpus d'applications visant à acquérir des notions de VBA pour faciliter l'amélioration des articles relevant des projet Communes de France ou Intercommunalités de France.
Objectif
modifierL'objectif est ici de supprimer un texte quel qu'il soit, ou qu'il soit au sein de l'article … sans désorganiser l'article!
Assez simple au premier abord, mais hautement dangereux si on n'a pas fait une bonne analyse des divers articles au préalable.
Principe de traitement
modifierPour rappel, on récupère dans un premier temps le texte de l'article dans une variable dénommée TexteWP, sous la forme d'une chaîne continue de caractères.
Le principe de traitement va consister à tester la présence éventuelle du texte cherché dans la chaîne de caractères puis de le supprimer. Bien entendu si le texte à éliminer est fixe d'un article à l'autre, cela peut être élémentaire, comme cela peut aussi être problématique si seulement certains de ces textes doivent être éliminés et pas d'autres.
Si le texte est variable d'un article à l'autre cela peut se compliquer.
Cas envisageables
modifier1. Le texte à effacer est fixe d'un article à un autre
modifier1.1 Supprimer en masse dans l'article ne pose aucun problème
C'est le cas le plus simple et c'est le principe de fonctionnement de certaines applis comme AWB.
En VBA, la commande pour supprimer un espace avant une référence par exemple sera :
TexteWP = Replace(TexteWP, " <ref", "<ref")
1.2 Ne supprimer que certaines occurrences du texte et pas d'autres
Il faut alors localiser les différentes occurrences du texte dans la chaîne et choisir celles que l'on supprime (dans le script)
2. Le texte à effacer est variable d'un article à un autre
modifierLe principe consiste à localiser le début et la fin de la chaîne pour récupérer le texte en question puis le supprimer
2.1 le texte présente toujours le même début
2.2 le texte présente un début lui-même variable
Exemple : l'âge du maire
modifierNous sommes dans le cas 2.2.
Sub SupprAgeMaire() ' Dim i As Long Dim IE As New InternetExplorer Dim IEDoc As HTMLDocument Dim InputWPZoneTexte As HTMLInputElement Dim InputWPBouton As HTMLInputElement Dim InputWPSave As Object iDebut = Sheets("Code").Cells(30, 2) iFin = Sheets("Code").Cells(31, 2) For i = iDebut To iFin Sheets("Code").Cells(2, 3) = i Sheets("Code").Cells(6, 2) = Sheets("COM2020").Cells(i, 1) NomCodeCommune = Sheets("COM2020").Cells(i, 5) ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ' XXXXXXXXXXXXXXXXXXX RECUPERATION TEXTEWP de l'article de la commune XXXXXXXXXXXXXXXXXXX ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX IE.Navigate "https://fr.wikipedia.org/w/index.php?title=" & NomCodeCommune & "&action=edit" IE.Visible = False WaitIE IE Wait2 (2) Set IEDoc = IE.Document Set InputWPZoneTexte = IEDoc.all("wpTextbox1") Set InputWPResume = IEDoc.all("wpSummary") TexteWP = InputWPZoneTexte.Value TexteWP = Replace(TexteWP, "<small> ({{âge", "<small>({{âge") ' car il y a quelque fois un espace avant la parenthèse jfin = Len(TexteWP) ' XXXXXXXXXXXXXXXXX ' Recherche de la présence d'un premier texte à effacer ' XXXXXXXXXXXXXXXXX DebTxt1 = 0 For j = 1 To jfin If Mid(TexteWP, j, 13) = "<small>({{âge" Then DebTxt1 = j j = jfin End If Next j If DebTxt1 <> 0 Then For j = DebTxt1 + 10 To jfin If Mid(TexteWP, j, 8) = "</small>" Then FinTxt1 = j + 8 j = jfin End If Next j Txt1 = Mid(TexteWP, DebTxt1, FinTxt1 - DebTxt1) ' Assemblage du texte TexteWP = Replace(TexteWP, Txt1, "") ' effacement de Txt1 dans TexteWP jfin = Len(TexteWP) ' XXXXXXXXXXXXXXXXX ' Recherche de la présence d'un deuxième texte à effacer ' XXXXXXXXXXXXXXXXX DebTxt2 = 0 For j = FinTxt1 To jfin If Mid(TexteWP, j, 13) = "<small>({{âge" Then DebTxt2 = j j = jfin End If Next j If DebTxt2 <> 0 Then For j = DebTxt2 + 10 To jfin If Mid(TexteWP, j, 8) = "</small>" Then FinTxt2 = j + 8 j = jfin End If Next j Txt2 = Mid(TexteWP, DebTxt2, FinTxt2 - DebTxt2) ' Assemblage du texte TexteWP = Replace(TexteWP, Txt2, "") ' effacement de Txt2 dans TexteWP End If ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ' XXXXXXXXXXXXXXXXXXXXXXXXXXXX CHARGEMENT CODE SUR ARTICLE XXXXXXXXXXXXXXXXXXXXXXXXXXXX ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx InputWPZoneTexte.Value = TexteWP TxtResume = "Suppression info sur âge du maire" InputWPResume.Value = TxtResume Set InputWPSave = IE.Document.getElementsByTagName("input") Set WpSave = InputWPSave.Item("wpSave") WpSave.Value = "Publier les modifications" Dim Connect As Object Set InputWp = IEDoc.all("wpSave") InputWp.Click WaitIE IE Wait2 (1) End If Next i FinCode: End Sub