Créer et formater des documents PowerPoint avec le logiciel R


Pourquoi est-il important d’être capable de générer des rapports PowerPoint avec R?

Il y a, au moins, deux raisons à cela, comme décrites dans les chapitres suivants.

Ecrire un document PowerPoint avec le logiciel R et le package ReporteRs

Raison I : Beaucoup de collaborateurs travaillent avec les outils Microsoft Office

Environ 1 milliard de personnes à travers le monde entier utilisent Microsoft Office (soit 1 personne sur 7 sur la planète; source: Microsoft).

De plus, de nombreux collaborateurs travaillent encore avec les logiciels Microsoft Office (Word, PowerPoint, Excel) pour :

  • éditer leurs textes et suivre les modifications
  • copier-coller des textes, images et tables provenant de différentes sources
  • enregistrer et analyser leurs données

Dans ce contexte, un rapport générer en PDF ou en pages HTML est moins utile avec certains collaborateurs.

Raison II : Maintenir les magnifiques graphiques R magnifiques pour publications

Les graphiques générés par le logiciel R peuvent être personnalisés pour être aussi beaux que votre imagination peut les faire. Malheureusement, la préservation de cette beauté n’est pas toujours une tâche facile lorsque vous souhaitez publier ces graphiques ou les montrer dans une présentation professionnelle.

Oui, ce problème peut être résolu en utilisant knitr/rmarkdown/Latex/Beamer/Slidify . Cependant, il serait très difficile de refaire toute la présentation dans un format différent. En outre, de nombreuses revues n’acceptent pas les documents LaTeX.

(source).

Mais ce problème n’a t-il pas été déjà résolu?

La réponse à cette question est oui et non. Il y a eu plusieurs tentatives pour résoudre ce problème, mais beaucoup d’entre elles ne sont pas faciles à utiliser.

L’une des solutions consistait à utiliser le package R2PPT. Malheureusement R2PPT est disponible pour Windows uniquement et il dépend de rcom ou RDCOMClient pour générer des présentations PowerPoint.

Objectif

Le but de cet tutoriel R est de vous montrer comment formater et exporter facilement des résultats du logiciel R (des tableaux de données, des graphiques, des paragraphes de textes et du code R) vers un document PowerPoint (format de fichier .pptx) en utilisant le package ReporteRs.

Ecrire un document PowerPoint avec le logiciel R et le package ReporteRs

ReporteRs est une solution Java-dépendante, donc le package fonctionne sur Windows, Mac et Linux.

Installer et charger le package ReporteRs

Utiliser le code R ci-dessous :

install.packages('ReporteRs') # Installer
library('ReporteRs') # Charger

Notez que ReporteRs dépend de Java (>= 1.6) ; assurez vous que vous avez un JRE

La version de Java installée sur votre ordinateur peut être vérifiée comme suit avec R :

system("java -version")

Créer un PowerPoint simple

Quatre étapes simples sont nécessaires :

  1. Utiliser la fonction pptx() pour créer un objet PowerPoint.
  2. Utiliser la fonction addSlide() pour ajouter une diapositive (slide) dans le document PowerPoint.
  3. Ajouter des contenus dans la diapositive créée en utilisant les fonctions ci-dessous :
    • addTitle: Ajouter un titre
    • addParagraph: Ajouter des paragraphes de textes
    • addFlexTable: Ajouter une table
    • addPlot: Ajouter un graphe généré avec R
    • addImage: Ajouter une image externe
    • addRScript: coloration syntaxique et ajout d’un code R
    • addDate : Ajouter une date
    • addPageNumber : Ajouter un numéro de page
    • AddFooter : Ajouter un pied de page
  4. Enregistrer le document dans un fichier .pptx en utilisant la fonction writeDoc()

Mises en page des diapositives

Avant de vous montrer un exemple pour créer et formater un PowerPoint avec le logiciel R, nous allons d’abord discuter de la mise en page des diapositives (ou disposition des diapos). Ceci est très important pour comprendre les exemples fournis dans ce tutoriel.

Lorsque vous créez une nouvelle diapositive dans PowerPoint, vous devez spécifier la mise en page de la diapositive. Les mises en page disponibles dans le logiciel “MS Office PowerPoint” (modèle par défaut, sur mon ordinateur) sont illustrées dans la figure ci-dessous:

Ecrire un document PowerPoint avec le logiciel R et le package ReporteRs

La fonction addSlide() peut être utilisée pour ajouter une nouvelle diapositive dans un document PowerPoint à partir du logiciel R. Un format simplifié de la fonction est:

doc <- addSlide(doc, slide.layout)

  • doc : un objet pptx où les diapositives doivent être ajoutées
  • slide.layout : la mise en page à utiliser pour la diapositive.


Parmi les valeurs possibles pour l’argument slide.layout, il y a: “Title Slide”, “Title and Content”, “Two Content”, “Section Header”, “Content with Caption”, “Title Only”, “Comparison”.

Cependant, vous devez utiliser seulement les “mises en page de diapositives” disponibles sur votre ordinateur. Ceci peut dépendre de votre langue locale.


Pour afficher les mises en page disponibles sur votre ordinateur, utilisez le code de R ci-dessous:

library(ReporteRs)
doc = pptx()
slide.layouts(doc)
##  [1] "Title Slide"             "Title and Vertical Text" "Title and Content"       "Two Content"            
##  [5] "Section Header"          "Vertical Title and Text" "Content with Caption"    "Title Only"             
##  [9] "Comparison"              "Blank"


Ces mises en page sont illustrées ci-dessous:

doc <- pptx()
layouts <-slide.layouts(doc) # Mises en page disponibles
#  Dessiner chaque style de diapositives
for(i in layouts ){
  par(mar=c(0.5,0.5,2,0.5), cex=0.7)
  slide.layouts(doc, i )
    title(main = paste0("'", i, "'" ))
  if(interactive()) readline(prompt = "Show next slide layout")
}

plot of chunk r-reporters-powerpoint-slide-layout-plot of chunk r-reporters-powerpoint-slide-layout-plot of chunk r-reporters-powerpoint-slide-layout-plot of chunk r-reporters-powerpoint-slide-layout-plot of chunk r-reporters-powerpoint-slide-layout-plot of chunk r-reporters-powerpoint-slide-layout-plot of chunk r-reporters-powerpoint-slide-layout-plot of chunk r-reporters-powerpoint-slide-layout-plot of chunk r-reporters-powerpoint-slide-layout-plot of chunk r-reporters-powerpoint-slide-layout-

Notez que, la mise en page sélectionnée détermine le contenu que vous pouvez ajouter dans la diapositive (Voir la figure ci-dessus).

  1. Exemple 1 - Si vous choisissez ‘Title and Content’ comme mise en page, vous pouvez ajouter uniquement:
    • un titre
    • et un contenu pouvant être du texte, un graphique, une image, un tableau ou du code R
  2. Exemple 2 - Si vous choisissez ‘Two Content’ comme mise en page, vous pouvez ajouter:
    • un titre
    • et deux contenus: Par exemple, vous pouvez ajouter une table dans le panneau de gauche et un paragraphe de textes dans le panneau de droite.
  3. Exemple 3 - Si vous choisissez ‘Comparison’, vous pouvez ajouter un titre et quatre contenus (graphes, tables, paragraphes, images)

Quelle que soit la mise en page de diapositive choisie, vous pouvez utiliser les fonctions addDate(), addFooter() et addPageNumber() pour ajouter une date, un pied de page et un numéro de diapositive respectivement.

Générer un document PowerPoint simple à partir du logiciel R

Le code de R ci-dessous crée un document PowerPoint avec une diapositive de titre, des graphes, des tables et un script R:

library( ReporteRs )
# Créer un document PowerPoint
doc = pptx( )
# Diapo 1 : Diapositive de titre
#+++++++++++++++++++++++
doc <- addSlide(doc, "Title Slide")
doc <- addTitle(doc,"Create a PowerPoint document from R software")
doc <- addSubtitle(doc, "R and ReporteRs package")
doc <- addDate(doc)
doc <- addFooter(doc, "Isaac Newton")
doc <- addPageNumber(doc, "1/4")
# Diapo 2 : Ajouter un graphe
#+++++++++++++++++++++++
doc <- addSlide(doc, "Title and Content")
doc <- addTitle(doc, "Bar plot")
plotFunc<- function(){
  barplot(VADeaths, beside = TRUE,
          col = c("lightblue", "mistyrose", "lightcyan",
                  "lavender", "cornsilk"),
  legend = rownames(VADeaths), ylim = c(0, 100))
  title(main = "Death Rates in Virginia", font.main = 4)
}
doc <- addPlot(doc, plotFunc )
doc <- addPageNumber(doc, "2/4")
# Diapo 3 : Ajouter une table 
#+++++++++++++++++++++++
doc <- addSlide(doc, "Two Content")
doc <- addTitle(doc,"iris data sets")
doc <- addFlexTable(doc, FlexTable(iris[1:10,] ))
doc <- addParagraph(doc, "iris data set gives the measurements in centimeters of the variables sepal length and width and petal length and width, respectively, for 50 flowers from each of 3 species of iris. The species are Iris setosa, versicolor, and virginica.")
doc <- addPageNumber(doc, "3/4")
# Diapo 4 : Add du code R
#+++++++++++++++++++++
doc <- addSlide(doc, "Content with Caption")
doc <- addTitle(doc, "R Script for histogram plot")
doc <- addPlot(doc, function() hist(iris$Sepal.Width, col=4))
r_code ="data(iris)
hist(iris$Sepal.Width, col = 4)"
doc <- addRScript(doc, text=r_code)
# Enregistrer le document 
writeDoc(doc, "r-reporters-powerpoint.pptx" )

Le document PowerPoint créée par le code R ci-dessus est disponible ici: Logiciel R et le package ReporteRs - Example de création de document PowerPoint

Notez que, vous pouvez utiliser la fonction addPageNumber() sans préciser la valeur du numéro de la diapositive, comme suit:

doc <- addPageNumber(doc)

Dans ce cas, le numéro de diapositive est ajoutée en utilisant les paramètres par défaut (par exemple: 1 pour diapo1, 2 pour la diapositive 2).

Si vous souhaitez personnaliser la numérotation, utilisez la fonction comme suit:

doc <- addPageNumber(doc, "1/2") # Exemple 1
doc <- addPageNumber(doc, "I") # Exemple 2


Formater le texte d’un document PowerPoint

Les propriétés de texte: police, la couleur et la taille

Comme illustré sur la figure ci-dessous, les propriétés de texte comprennent:

  • Font : family (e.g : “Arial”), size (e.g : 11), style (e.g : “italic”)
  • Underlined text
  • Color (e.g : “blue”)
  • Vertical align (superscript, subscript)

Je fais exprès de ne pas traduire le texte ci-dessus pour être en adéquation avec les termes utilisés dans le script R

Ecrire un document PowerPoint avec le logiciel R et le package ReporteRs

La taille (font size) et le type de police (font family) du PowerPoint peuvent être modifiés comme suit:

options( "ReporteRs-fontsize" = 18, 
         "ReporteRs-default-font" = "Arial")

Changer l’apparence d’un “bout de texte”

Write a PowerPoint document using R software and ReporteRs package, format the text


La fonction pot() [Pieces Of Text] est utilisée pour modifier l’apparence d’un texte. Elle peut également être utilisée pour créer un lien hypertexte. Le format est:

pot(value="", format = textProperties())

  • value : le texte à formater
  • format : les propriétés à utiliser pour formater le texte


Les valeurs autorisées pour l’argument format sont les fonctions suivantes:

  • textProperties() : les propriétés de formatage de textes
  • textBold(), textItalic(), textBoldItalic() et textNormal() qui sont des raccourcis pour le texte en gras (bold), italique (italic), gras-italique (bold-italic) et normal, respectivement.

Ces fonctions peuvent prendre les arguments ci-dessous:


  • color : couleur de la police; ex : color=“#000000” ou color = “black”.
  • font.size : un entier indiquant la taille de la police.
  • font.weight : le font weight. Valeurs possibles: “normal” ou “bold”.
  • font.style : le style de la police. Valeurs possibles: “normal” ou “italic”.
  • underlined : une valeur logique précisant si le texte doit être souligné.
  • font.family : le type de police; ex : “Arial”.
  • vertical.align : l’alignement vertical des caractères. Valeurs possibles: “baseline”" ou “subscript” ou “superscript”.
  • shading.color : couleur de fond du texte (ex “#000000” ou “black”)


Le code R ci-dessous crée un document PowerPoint contenant un texte formaté et un lien hypertexte:

library( ReporteRs )
# Changer le type et la taille de police par défaut
options('ReporteRs-fontsize'= 18, 'ReporteRs-default-font'='Arial')
doc = pptx( )
doc <- addSlide(doc, "Two Content")
doc <- addTitle(doc,"Document with formatted texts")
doc <- addFlexTable(doc, FlexTable(iris[1:10,] ))
my_text <- pot("iris data set", textBold(color = "blue"))+
          " contains the measurements of " + 
          pot("sepal length", textBold(color="red"))+ 
        " and width and petal length and width"
  
my_link <- pot('Click here to visit STHDA web site!', 
    hyperlink = 'http://www.sthda.com/english',
    format=textBoldItalic(color = 'blue', underline = TRUE ))
doc <- addParagraph(doc, 
      value = set_of_paragraphs(my_text, " ",  my_link),
     par.properties=parProperties(text.align="justify")
    )
writeDoc(doc, "r-reporters-powerpoint-formatted.pptx" )

Ecrire un document PowerPoint avec le logiciel R et le package ReporteRs, formater le texte

Ajouter des graphiques et des images

Les fonctions addPlot() et addImage() peuvent être utilisées pour ajouter un graphe ou une image externe au document. addPlot() fonctionnent avec tous les graphiques R (graphiques de base, lattice, ggplot2 et grid).

Ces deux fonctions peuvent être utilisées comme suit :

# Ajouter des graphes
# fun : fonction R pour générer un graphe
# ... : d'autres arguments à passer à la fonction graphique
addPlot(doc, fun, ...)
# Ajouter des images
# filename : chemin de l'image
addImage(doc, filename)

Le code de R ci-dessous crée un document PowerPoint contenant un histogramme et une image (téléchargeable sur le site de R):

library( ReporteRs )
doc = pptx()
# Diapo 1 : Diapositive de titre
doc <- addSlide(doc, "Title Slide")
doc <- addTitle(doc,"Document containing plots and images")
doc <- addSubtitle(doc, "R and ReporteRs package")
# Diapo 2 : Ajouter un graphe
doc <- addSlide(doc, "Two Content")
doc <- addTitle(doc,"Histogram plot")
doc <- addPlot(doc, function() hist(iris$Sepal.Width, col="lightblue"))
doc <- addParagraph(doc, "This histogram is generated using iris data sets")
# Diapo 3 : Ajouter une image
# Télécharger une image à partir du site R
download.file(url="http://www.r-project.org/hpgraphic.png",
              destfile="r-home-image.png", quiet=TRUE)
doc <- addSlide(doc, "Two Content")
doc <- addTitle(doc,"Image from R website")
doc <- addImage(doc, "r-home-image.png")
doc <- addParagraph(doc, "This image has been downloaded from R website")
 
writeDoc(doc, "r-reporters-powerpoint-plot-image.pptx")

Le document PowerPoint créée par le code de R ci-dessus est disponible ici: Logiciel R et le package ReporteRs - Document PowerPoint contenant des graphes et des images

  1. Notez que, addPlot() peut prendre d’autres arguments tels que pointsize pour modifier la taille des textes sur le graphe (la valeur par défaut est 12; en pixels)

  2. Pour la fonction addImage(), les formats de fichiers acceptés sont les images PNG, WMF, JPEG et GIF.


Ajouter une table

La fonction addFlexTable() est utilisée pour formater et ajouter une table dans le PowerPoint.

Elle peut être utilisée comme suit :

  • ÉTAPE 1: Créer une table en utilisant FlexTable() ou la fonction vanilla.table(). Ces deux fonctions génèrent une table «flexible» qui peut être facilement formatée avant d’être ajoutée dans la diapositive.
  • ÉTAPE 2: Ajoutez la table créée dans le document en utilisant la fonction addFlexTable() comme suit:
# doc : objet pptx
# flextable : FlexTable object
# Exemple 1
doc <- addFlexTable(doc, flextable = FlexTable(data))
# Exemple 2 
doc <- addFlexTable(doc, flextable = vanilla.table(data))

La fonction setZebraStyle() peut être utilisée pour colorer différemment les lignes paires et impaires; par exemple, les lignes impaires en gris et les lignes paires en blanc.

L’exemple ci-dessous crée un document PowerPoint avec 3 diapositives contenant un tableau simple (diapo 1), une “vanilla table” (diapo 2) et une table en style zèbre (diapo 3):

doc = pptx()
data<-iris[1:5, ]
# Diapo 1 : Table simple
doc <- addSlide(doc, "Title and Content")
doc <- addTitle(doc,"Simple table")
doc <- addFlexTable(doc, FlexTable(data))
# Diapo 2 : vanilla table
doc <- addSlide(doc, "Title and Content")
doc <- addTitle(doc,"Vanilla table")
doc <- addFlexTable(doc, vanilla.table(data))
# Diapo 3 : table en style zèbre
doc <- addSlide(doc, "Title and Content")
doc <- addTitle(doc,"Zebra striped table")
MyFTable <- vanilla.table(data)
MyFTable <- setZebraStyle(MyFTable, odd = '#eeeeee', even = 'white')
doc <- addFlexTable( doc, MyFTable)
writeDoc(doc, "r-reporters-powerpoint-add-table.pptx")

Le document PowerPoint créée par le code de R ci-dessus est disponible ici : Logiciel R et le package ReporteRs - Document PowerPoint contenant des tables

Ajouter des listes ordonnées et non ordonnées

Les listes peuvent être ajoutées en utilisant la fonction addParagraph() comme suit:

doc  <- addParagraph(doc, 
  value = c('Item 1', "Item 2", "Item 3")
  par.properties = parProperties(list.style = 'ordered', level = 1 )

  • value : un ensemble d’éléments à ajouter comme une liste
  • par.properties : fonction contenant les propriétés de formatage du paragraphe. Elle prend comme arguments list.style et level :
    • list.style : les valeurs possibles sont ‘unordered’ et ‘ordered’
    • level : une valeur numérique indiquant le niveau de l’élément à ajouter dans la liste


L’exemple ci-dessous génère un document PowerPoint d’une diapositive contenant une listes ordonnées et non ordonnées:

doc <- pptx()
doc <- addSlide(doc, "Two Content")
doc <- addTitle(doc, "Ordered and unordored lists")
# 1. Liste ordonnée
doc <- addParagraph(doc, value= c("Item 1", "Item 2", "Item 3"),
          par.properties =  parProperties(list.style = 'ordered'))
# 2. Liste non-ordonnée
doc <- addParagraph(doc, value= c("Item 1", "Item 2", "Item 3"),
          par.properties =  parProperties(list.style = 'unordered'))
writeDoc(doc, file = "r-reporters-powerpoint-lists.pptx")

Logiciel R et le package ReporteRs, ajouter des listes dans un document Powerpoint

Créez un document PowerPoint à partir d’un fichier modèle

Cette approche est utile dans de nombreuses situations:

  • Si vous travaillez dans une entreprise et vous souhaitez générer un document PowerPoint basé sur un modèle avec des polices spécifiques, des couleurs, des logos, etc.
  • Si vous souhaitez modifier et insérer de nouveaux contenus dans un document PowerPoint existant.
  • Si vous souhaitez utiliser des styles de texte et des mises en page de diapositives à partir d’un fichier modèle (template).

Notez que, si vous utilisez un fichier modèle pour créer un document PowerPoint, les mises en page sont celles disponibles dans le fichier modèle.

Un fichier modèle peut être spécifié à la fonction pptx() comme suit:

# Créer un document PowerPoint
doc <- pptx(template="path/to/your/powerpoint/template/file.pptx")
# ...............
# Ajouter du contenu
# ...............
# Enregistrer le fichier
writeDoc(doc, file = "output-file.pptx")

Dans la section suivante Nous allons:

  • télécharger un fichier modèle de PowerPoint sur le site STHDA
  • vérifiez les mises en page de diapositives disponibles dans le fichier modèle
  • Créez un document PowerPoint basé sur le modèle

Télécharger un fichier modèle

# Télécharger un fichier modèle à partir du site STHDA
download.file(url="http://www.sthda.com/sthda/RDoc/example-files/r-reporters-powerpoint-template.pptx",
    destfile="r-reporters-powerpoint-template.pptx", quiet=TRUE)

Mises en page de diapositives disponibles dans le fichier modèle

Vous pouvez utiliser une des mises en page ci-dessous lors de l’ajout d’une nouvelle diapositive dans le PowerPoint:

doc <- pptx(template="r-reporters-powerpoint-template.pptx")
layouts <-slide.layouts(doc) # Mises en page disponibles
# Dessiner les mises en page
for(i in layouts ){
  par(mar=c(0.5,0.5,2,0.5), cex=0.7)
  slide.layouts(doc, i )
  title(main = paste0("'", i, "'" ))
  if(interactive()) readline(prompt = "Show next slide layout")
}

plot of chunk r-reporters-powerPoint-template-layoutplot of chunk r-reporters-powerPoint-template-layoutplot of chunk r-reporters-powerPoint-template-layoutplot of chunk r-reporters-powerPoint-template-layoutplot of chunk r-reporters-powerPoint-template-layoutplot of chunk r-reporters-powerPoint-template-layoutplot of chunk r-reporters-powerPoint-template-layoutplot of chunk r-reporters-powerPoint-template-layoutplot of chunk r-reporters-powerPoint-template-layoutplot of chunk r-reporters-powerPoint-template-layoutplot of chunk r-reporters-powerPoint-template-layoutplot of chunk r-reporters-powerPoint-template-layoutplot of chunk r-reporters-powerPoint-template-layoutplot of chunk r-reporters-powerPoint-template-layoutplot of chunk r-reporters-powerPoint-template-layoutplot of chunk r-reporters-powerPoint-template-layout

Créez un document PowerPoint à partir du fichier modèle

Notez que, le fichier modèle contient déjà une diapositive vide qui peut être enlevée manuellement.

library( ReporteRs )
# Télécharger un fichier modèle à partir du site STHDA
download.file(url="http://www.sthda.com/sthda/RDoc/example-files/r-reporters-powerpoint-template.pptx",
    destfile="r-reporters-powerpoint-template.pptx", quiet=TRUE)
options('ReporteRs-fontsize'= 18, 'ReporteRs-default-font'='Arial')
doc <- pptx(template="r-reporters-powerpoint-template.pptx" )
# Diapo 1 : Diapositive de titre
#+++++++++++++++++++++++
doc <- addSlide(doc, "Title Slide")
doc <- addTitle(doc,"Create a PowerPoint from template using R software")
doc <- addSubtitle(doc, "R and ReporteRs package")
doc <- addDate(doc)
doc <- addFooter(doc, "Isaac Newton")
doc <- addPageNumber(doc, "1/4")
# Diapo 2 : Ajouter un graphe
#+++++++++++++++++++++++
doc <- addSlide(doc, "Title and Content")
doc <- addTitle(doc, "Bar plot")
plotFunc<- function(){
  barplot(VADeaths, beside = TRUE,
          col = c("lightblue", "mistyrose", "lightcyan",
                  "lavender", "cornsilk"),
  legend = rownames(VADeaths), ylim = c(0, 100))
  title(main = "Death Rates in Virginia", font.main = 4)
}
doc <- addPlot(doc, plotFunc )
doc <- addPageNumber(doc, "2/4")
# Diapo 3 : Ajouter une table 
#+++++++++++++++++++++++
doc <- addSlide(doc, "Two Content")
doc <- addTitle(doc,"iris data sets")
doc <- addFlexTable(doc, FlexTable(iris[1:4,] ))
doc <- addParagraph(doc, "iris data set gives the measurements in centimeters of the variables sepal length and width and petal length and width, respectively, for 50 flowers from each of 3 species of iris. The species are Iris setosa, versicolor, and virginica.")
doc <- addPageNumber(doc, "3/4")
# Diapo 4 : Ajouter du code R
#+++++++++++++++++++++
doc <- addSlide(doc, "Content with Caption")
doc <- addTitle(doc, "R Script for histogram plot")
doc <- addPlot(doc, function() hist(iris$Sepal.Width, col=4))
r_code ="data(iris)
hist(iris$Sepal.Width, col = 4)"
doc <- addRScript(doc, text=r_code)
# Enregistrer le document 
writeDoc(doc, "r-reporters-powerpoint-from-template.pptx" )

Le document PowerPoint créée par le code de R ci-dessus est disponible ici : Logiciel R et le package ReporteRs - Document PowerPoint à partir d’un modèle

Infos

Cette analyse a été réalisée en utilisant R (ver. 3.1.0).

Vous pouvez lire d’avantage et télécharger le code source de ReporteRs à ce lien:

GitHub (David Gohel): ReporteRs


Enjoyed this article? I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Twitter, Facebook or Linked In.

Show me some love with the like buttons below... Thank you and please don't forget to share and comment below!!
Avez vous aimé cet article? Je vous serais très reconnaissant si vous aidiez à sa diffusion en l'envoyant par courriel à un ami ou en le partageant sur Twitter, Facebook ou Linked In.

Montrez-moi un peu d'amour avec les like ci-dessous ... Merci et n'oubliez pas, s'il vous plaît, de partager et de commenter ci-dessous!





Cette page a été vue 12850 fois