Aide:Transformer un tableau Excel en tableau WikiGenWeb : Différence entre versions

De WikiGenWeb
Aller à : navigation, rechercher
(Eviter une intrusion dans le disque C:\)
m (Création d'une macro)
Ligne 32 : Ligne 32 :
  
 
<pre>
 
<pre>
 +
Private Const LeFichier As String = "c:\excel-to-mediawiki.txt"
 
Sub xls_to_wgw()
 
Sub xls_to_wgw()
 +
   
 +
    On Error Resume Next
 +
    titre = "Excel to WikiGenWeb"
 +
   
 +
    ncols = Application.InputBox("Nombre de colonnes à partir de A ?", titre)
 +
    nrows = Application.InputBox("Nombre de lignes à partir de 1 ?", titre)
 +
   
 +
    Range("A1:" & Chr(ncols + 64) & "1").Select
 +
    For Each cell In Selection
 +
        If cell.Value = "" Then
 +
            If MsgBox("Au moins 1 colonne de la ligne 1 n'est pas renseignée." & vbCrLf & "Continuer ?", vbYesNo, titre) = vbNo Then
 +
                Exit Sub
 +
            End If
 +
        End If
 +
    Next cell
 +
   
 +
    Range("A1:A" & nrows).Select
 +
    For Each cell In Selection
 +
        If cell.Value = "" Then
 +
            If MsgBox("Au moins 1 ligne de la colonne A n'est pas renseignée." & vbCrLf & "Continuer ?", vbYesNo, titre) = vbNo Then
 +
                Exit Sub
 +
            End If
 +
        End If
 +
    Next cell
 
        
 
        
  On Error Resume Next 
+
    nom = ActiveSheet.Name
  titre = "Excel to WikiGenWeb" 
+
    Sheets("xls_to_wgw").Select
     
+
    ActiveWindow.SelectedSheets.Delete
  ncols = Application.InputBox("Nombre de colonnes à partir de A ?", titre) 
+
    Sheets(nom).Select
  nrows = Application.InputBox("Nombre de lignes à partir de 1 ?", titre) 
+
    ActiveSheet.Copy After:=ActiveSheet
     
+
    ActiveSheet.Name = "xls_to_wgw"
  Range("A1:" & Chr(ncols + 64) & "1").Select 
+
    Sheets("xls_to_wgw").Select
  For Each cell In Selection 
+
    Cells.Select
  If cell.Value = "" Then     
+
    Application.CutCopyMode = False
  If MsgBox("Au moins 1 colonne de la ligne 1 n'est pas renseignée." & vbCrLf & "Continuer ?", vbYesNo, titre) = vbNo Then         
+
    Selection.ClearContents
  Exit Sub             
+
    Sheets(nom).Select
  End If         
+
    Range("A1:" & Chr(ncols + 64) & nrows).Select
  End If     
+
    Selection.Copy
  Next cell 
+
    Sheets("xls_to_wgw").Select
     
+
    Range("A1").Select
  Range("A1:A" & nrows).Select 
+
    ActiveSheet.Paste
  For Each cell In Selection 
+
    Columns("A:A").Select
  If cell.Value = "" Then     
+
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
  If MsgBox("Au moins 1 ligne de la colonne A n'est pas renseignée." & vbCrLf & "Continuer ?", vbYesNo, titre) = vbNo Then         
+
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
  Exit Sub             
+
    Rows("1:1").Select
  End If         
+
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
  End If     
+
       
  Next cell 
+
    Range("B2").Select
     
+
    Columns("B:B").ColumnWidth = 120
  nom = ActiveSheet.Name  
+
    Range("B2").Select
  Sheets("xls_to_wgw").Select  
+
   
  ActiveWindow.SelectedSheets.Delete  
+
    For rwIndex = 2 To nrows + 1
  Sheets(nom).Select  
+
        texte = "<!-- (L " & rwIndex - 1 & ") -->|-"
  ActiveSheet.Copy After:=ActiveSheet  
+
        For colIndex = 3 To ncols + 2
  ActiveSheet.Name = "xls_to_wgw"  
+
            texte = texte & "|" & Cells(rwIndex, colIndex) & "|"
  Sheets("xls_to_wgw").Select  
+
        Next colIndex
  Cells.Select  
+
        texte = Left(texte, Len(texte) - 1)
  Application.CutCopyMode = False  
+
        Cells(rwIndex, 2) = texte
  Selection.ClearContents  
+
    Next rwIndex
  Sheets(nom).Select  
+
   
  Range("A1:" & Chr(ncols + 64) & nrows).Select  
+
    Set fs = CreateObject("Scripting.FileSystemObject")
  Selection.Copy  
+
    Set a = fs.CreateTextFile(LeFichier, True)
  Sheets("xls_to_wgw").Select  
+
    a.WriteLine ("{| class=wikitable")
  Range("A1").Select  
+
    Range("B2:B" & nrows + 1).Select
  ActiveSheet.Paste  
+
    For Each cell In Selection
  Columns("A:A").Select  
+
        texte = Replace(cell.Value, "|-", "|-" & vbCrLf)
  Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove  
+
        a.WriteLine (texte)
  Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove  
+
    Next cell
  Rows("1:1").Select  
+
    a.WriteLine ("|}")
  Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove  
+
    a.Close
       
+
    Range("B2").Select
  Range("B2").Select  
+
    Range(ActiveCell.Offset(0, 0), ActiveCell.Offset(nrows - 1, 0)).Select
  Columns("B:B").ColumnWidth = 120  
+
    MsgBox "La feuille Excel " & Sheets(nom).Name & " a été transformée en fichier WikiGenWeb sour le nom " & LeFichier & " que vous devez copier dans votre article." & vbCrLf _
  Range("B2").Select  
+
    & ncols & " colonnes." & vbCrLf & nrows & " lignes."
     
+
   
  For rwIndex = 2 To nrows + 1  
 
  texte = "<!-- (L " & rwIndex - 1 & ") -->|-"      
 
  For colIndex = 3 To ncols + 2      
 
  texte = texte & "|" & Cells(rwIndex, colIndex) & "|"          
 
  Next colIndex      
 
  texte = Left(texte, Len(texte) - 1)      
 
  Cells(rwIndex, 2) = texte      
 
  Next rwIndex  
 
     
 
  Set fs = CreateObject("Scripting.FileSystemObject")  
 
  Set a = fs.CreateTextFile("c:\excel-to-mediawiki.txt", True)  
 
  a.WriteLine ("{| class=wikitable")  
 
  Range("B2:B" & nrows + 1).Select  
 
  For Each cell In Selection  
 
  texte = Replace(cell.Value, "|-", "|-" & vbCrLf)      
 
  a.WriteLine (texte)      
 
  Next cell  
 
  a.WriteLine ("|}")  
 
  a.Close  
 
  Range("B2").Select  
 
  Range(ActiveCell.Offset(0, 0), ActiveCell.Offset(nrows - 1, 0)).Select  
 
  MsgBox "La feuille Excel " & Sheets(nom).Name & " a été transformée en fichier WikiGenWeb sour le nom c:\excel-to-mediawiki.txt que vous devez copier dans votre article." & vbCrLf _  
 
  & ncols & " colonnes." & vbCrLf & nrows & " lignes."  
 
     
 
 
End Sub
 
End Sub
</pre>
 
 
 
 
 
'''Ne pas fermer la page des macros et cocher une référence supplémentaire obligatoire.'''
 
*Cliquer sur menu : outils et ensuite sur références
 
*Cocher la case Microsoft Scripting Runtime dans la liste affichée
 
*Cliquer sur OK
 
*Enregistrer
 
*Fermer la page des macros
 
  
 
===Lancer la transformation===
 
===Lancer la transformation===

Version du 25 février 2011 à 11:23

Objectif

Cet article doit vous permettre de transformer une feuille Excel en un tableau WikiGenWeb, c'est à dire transformer du code application VBA en code wiki.

Nous avons choisi un exemple simple pour bien comprendre le déroulement de la procédure. Pour votre cas pratique vous devrez ajouter les sélections supplémentaires de cellules que vous devez transformer, notamment les liens.

Les clauses de style que ce soit pour la couleur, la police, la mise en page etc.... seront ignorés.

Source et cible

Votre feuille Excel est celle indiquée ci-dessous et vous devez retrouver le même tableau dans votre article WikiGenWeb, sauf la couleur.

Nom Sx Date Age Date de N Père Mère Conjoint
8 CAYRÉ Jean Louis M 25/05/1837 61 ans 1776
12 DELFOS Justine F 27/04/1895 81 ans 1814 DELFOS Vidal DELFOS Jeanne PAGES Casimir
6 DUMAS Marie Jeanne F 26/07/1801 19 mois 1799 DUMAS Claude MARTIN Delphine
5 TALON Barthélémy M 26/06/1763 80 ans 1683

Travaux à exécuter sur Excel

Création du fichier

  • Ouvrir votre fichier Excel ou placer une copie de votre feuille à partir de la cellule A1

Création d'une macro

  • Passer en création de macro pour venir sur la page de saisie du code VBA
  • Copier la macro ci-dessous sur la page affichée
Private Const LeFichier As String = "c:\excel-to-mediawiki.txt"
Sub xls_to_wgw()
     
    On Error Resume Next
    titre = "Excel to WikiGenWeb"
     
    ncols = Application.InputBox("Nombre de colonnes à partir de A ?", titre)
    nrows = Application.InputBox("Nombre de lignes à partir de 1 ?", titre)
     
    Range("A1:" & Chr(ncols + 64) & "1").Select
    For Each cell In Selection
        If cell.Value = "" Then
            If MsgBox("Au moins 1 colonne de la ligne 1 n'est pas renseignée." & vbCrLf & "Continuer ?", vbYesNo, titre) = vbNo Then
                Exit Sub
            End If
        End If
    Next cell
     
    Range("A1:A" & nrows).Select
    For Each cell In Selection
        If cell.Value = "" Then
            If MsgBox("Au moins 1 ligne de la colonne A n'est pas renseignée." & vbCrLf & "Continuer ?", vbYesNo, titre) = vbNo Then
                Exit Sub
            End If
        End If
    Next cell
      
    nom = ActiveSheet.Name
    Sheets("xls_to_wgw").Select
    ActiveWindow.SelectedSheets.Delete
    Sheets(nom).Select
    ActiveSheet.Copy After:=ActiveSheet
    ActiveSheet.Name = "xls_to_wgw"
    Sheets("xls_to_wgw").Select
    Cells.Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Sheets(nom).Select
    Range("A1:" & Chr(ncols + 64) & nrows).Select
    Selection.Copy
    Sheets("xls_to_wgw").Select
    Range("A1").Select
    ActiveSheet.Paste
    Columns("A:A").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Rows("1:1").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        
    Range("B2").Select
    Columns("B:B").ColumnWidth = 120
    Range("B2").Select
     
    For rwIndex = 2 To nrows + 1
        texte = "<!-- (L " & rwIndex - 1 & ") -->|-"
        For colIndex = 3 To ncols + 2
            texte = texte & "|" & Cells(rwIndex, colIndex) & "|"
        Next colIndex
        texte = Left(texte, Len(texte) - 1)
        Cells(rwIndex, 2) = texte
    Next rwIndex
     
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set a = fs.CreateTextFile(LeFichier, True)
    a.WriteLine ("{| class=wikitable")
    Range("B2:B" & nrows + 1).Select
    For Each cell In Selection
        texte = Replace(cell.Value, "|-", "|-" & vbCrLf)
        a.WriteLine (texte)
    Next cell
    a.WriteLine ("|}")
    a.Close
    Range("B2").Select
    Range(ActiveCell.Offset(0, 0), ActiveCell.Offset(nrows - 1, 0)).Select
    MsgBox "La feuille Excel " & Sheets(nom).Name & " a été transformée en fichier WikiGenWeb sour le nom " & LeFichier & " que vous devez copier dans votre article." & vbCrLf _
    & ncols & " colonnes." & vbCrLf & nrows & " lignes."
     
End Sub

===Lancer la transformation===
* '''Se placer sur la feuille à transformer.'''
* '''Exécuter la macro xls_to_wgw.'''
* '''Suivre les instructions et répondre aux questions.'''
* '''Une nouvelle feuille nommée « xls_to_wgw » affiche le résultat pour information
* '''Un fichier nommé « excel-to-mediawiki.txt » est créé à la racine du disque dur « c: ». Il sera utilisé pour créer votre tableau

* '''Ouvrir le fichier ci-dessus avec un éditeur type bloc-notes, notepad++ etc…<br />(dans l'explorateur, faire un double-click sur le nom pour l'ouvrir avec l'éditeur par défaut).
* '''Dans l'éditeur :'''
**'''Sélectionner tout'''
**'''Copier dans le presse-papier'''

==Création du tableau sous WikiGenWeb==
* '''Placez-vous à l'endroit où le tableau doit apparaître, faîtes un coller.'''
* '''Vous devez obtenir ce texte :'''
<pre>
{| class=wikitable
<!-- (L 1) -->|-
|N°||Nom||Sx||Date||Age||Date de N||Père||Mère||Conjoint
<!-- (L 2) -->|-
|8||CAYRÉ Jean Louis||M||25/05/1837||61 ans||1776||||||
<!-- (L 3) -->|-
|12||DELFOS Justine||F||27/04/1895||81 ans||1814||DELFOS Vidal||DELFOS Jeanne||PAGES Casimir
<!-- (L 4) -->|-
|6||DUMAS Marie Jeanne||F||26/07/1801||19 mois||1799||DUMAS Claude||MARTIN Delphine||
<!-- (L 5) -->|-
|5||TALON Barthélémy||M||26/06/1763||80 ans||1683||||||
|}


  • Votre tableau est terminé : Cliquer sur Prévisualiser
  • Vous devez obtenir ce tableau :
Nom Sx Date Age Date de N Père Mère Conjoint
8 CAYRÉ Jean Louis M 25/05/1837 61 ans 1776
12 DELFOS Justine F 27/04/1895 81 ans 1814 DELFOS Vidal DELFOS Jeanne PAGES Casimir
6 DUMAS Marie Jeanne F 26/07/1801 19 mois 1799 DUMAS Claude MARTIN Delphine
5 TALON Barthélémy M 26/06/1763 80 ans 1683


  • Cliquer sur Publier

Mise en forme

Votre tableau étant maintenant réalisé, rendez-vous dans le Manuel de l'éditeur pour mettre en valeur votre réalisation par des enrichissements de caractères.

Eviter une intrusion dans le disque C:\

NB
si vous voulez éviter une intrusion dans le disque C:\, remplacez c par d dans les 2 ocurences du dernier paragraphe de la macro.

Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("c:\excel-to-mediawiki.txt", True)
...
MsgBox "La feuille Excel " & Sheets(nom).Name & " a été transformée en fichier WikiGenWeb sour le nom c:\excel-to-mediawiki.txt que vous devez copier dans votre article." & vbCrLf _
& ncols & " colonnes." & vbCrLf & nrows & " lignes."
End Sub

Rédiger
d:\excel-to-mediawiki.txt