IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre averti
    Homme Profil pro
    Epitech
    Inscrit en
    Mai 2019
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Epitech

    Informations forums :
    Inscription : Mai 2019
    Messages : 33
    Par défaut Comment mettre regrouper plusieurs fichiers excel sur un unique fichier et faire des liens entre les onglets ?
    Bonjour,

    J'ai un fichier excel que nous allons nommé "Base" qui contient des données qui sont dans l'ordre alphabétique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    df <- data.frame("Base" = c("A", "B"))
    f1 <- data.frame("A" = "1", "B" = "2", "C" = "3")
    f2 <- data.frame("A" = "9", "B" = "8", "C" = "7")
    Voici ce que je fait et j'aimerais savoir comment je pouvais l'optimiser pour ne pas traiter chaque fichier un par un mais tous en même temps.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    library(readxl)
    library(tibble)
    library(xlsx)
     
    base <- read_excel("./Classeur2.xlsx", sheet = 1)
    f1 <- read_excel("./Classeur_A.xlsx", sheet = 1)
    f2 <- read_excel("./Classeur_B.xlsx", sheet = 1)
     
    f1 <- add_column(f1, RETOUR = NA, .before = "A")
    f2 <- add_column(f2, RETOUR = NA, .before = "A")
    write.xlsx2(as.data.frame(f1), "./Classeur2.xlsx", row.names = FALSE, append = TRUE, sheetName = "A")
    write.xlsx2(as.data.frame(f2), "./Classeur2.xlsx", row.names = FALSE, append = TRUE, sheetName = "B")
    sheetname <- "Feuil1"
    file <- "./Classeur2.xlsx"
    wb <- loadWorkbook(file)
    sheets <- getSheets(wb)
    sheet <- sheets[[sheetname]]
    rows <- getRows(sheet, rowIndex = 2:(nrow(base) + 1))
    cells <- getCells(rows, colIndex = 1:ncol(base))
    print(cells)
    addHyperlink(cells[[1]], "A!A1", linkType="DOCUMENT")
    addHyperlink(cells[[2]], "B!A1", linkType="DOCUMENT")
    saveWorkbook(wb, file)
     
    sheetname <- "A"
    file <- "./Classeur2.xlsx"
    wb <- loadWorkbook(file)
    sheets <- getSheets(wb)
    sheet <- sheets[[sheetname]]
    rows <- getRows(sheet, rowIndex = 1:(nrow(f1) + 1))
    cells <- getCells(rows, colIndex = 1:ncol(f1))
    addHyperlink(cells[[1]], "Feuil1!A1", linkType="DOCUMENT")
    saveWorkbook(wb, file)
     
    sheetname <- "B"
    file <- "./Classeur2.xlsx"
    wb <- loadWorkbook(file)
    sheets <- getSheets(wb)
    sheet <- sheets[[sheetname]]
    rows <- getRows(sheet, rowIndex = 1:(nrow(f2) + 1))
    cells <- getCells(rows, colIndex = 1:ncol(f2))
    addHyperlink(cells[[1]], "Feuil1!A1", linkType="DOCUMENT")
    saveWorkbook(wb, file)
    Cordialement,

    Arkning

  2. #2
    Membre Expert
    Inscrit en
    Novembre 2009
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 707
    Par défaut Comment regrouper plusieurs fichiers excel en un seul fichier et faire des liens entre les onglets ?
    Bonjour,

    Votre programme fonctionne très bien. Vous pouvez l'automatiser en définissant une ou plusieurs fonctions.

    Voici un exemple pour l'ajout des fichiers.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    library(readxl)
    library(tibble)
    library(xlsx)
    En me calquant sur votre programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ajout <- function(fic){
      assign(paste0("f_",fic), read_excel(paste0("./Classeur_",fic,".xlsx"), sheet = 1))
      assign(paste0("f_",fic), add_column(get(paste0("f_",fic)), RETOUR = NA, .before = "A"))
      write.xlsx2(as.data.frame(get(paste0("f_",fic))), "./Classeur2.xlsx", row.names = FALSE, append = TRUE, sheetName = fic)
      }
     
    ajout("A")
    ajout("B")
    Ou plus simplement si vous ne souhaitez pas conserver les objets f_A, f_B :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ajout <- function(fic){
      f <- read_excel(paste0("./Classeur_",fic,".xlsx"), sheet = 1)
      f <- add_column(f, RETOUR = NA, .before = "A")
      write.xlsx2(as.data.frame(f), "./Classeur2.xlsx", row.names = FALSE, append = TRUE, sheetName = fic)
      }
     
    ajout("A")
    ajout("B")
    Je vous laisse faire de même pour la suite de votre programme.

    Vous pourrez ensuite appliquer ces fonctions à tous les fichiers d'un répertoire (voir cette discussion).

    Cordialement,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/12/2018, 12h03
  2. Réponses: 1
    Dernier message: 26/08/2010, 13h17
  3. regrouper plusieurs fichiers Excel en un seul
    Par jnmab dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/11/2007, 17h40
  4. Réponses: 3
    Dernier message: 05/05/2007, 13h02
  5. Faire des liens entre plusieurs table
    Par gibea00 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 16/01/2007, 18h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo