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

modifier

L'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

modifier

Pour 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

modifier

1. Le texte à effacer est fixe d'un article à un autre

modifier

1.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

modifier

Le 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

modifier

Nous 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