1. Ce site utilise des "témoins de connexion" (cookies) conformes aux textes de l'Union Européenne. Continuer à naviguer sur nos pages vaut acceptation de notre règlement en la matière. En savoir plus.

XL 2013 Recopie automatique de lignes entre 2 classeurs

Discussion dans 'Forum Excel' démarrée par LE GUERROUE, 3 Décembre 2018.

Tags:
  1. LE GUERROUE

    LE GUERROUE XLDnaute Nouveau

    Inscrit depuis le :
    26 Janvier 2017
    Messages :
    9
    "J'aime" reçus :
    0
    Bonjour à tous,

    J'ai besoin de votre aide.

    Je dispose d'une base de données exportée depuis un logiciel au format .csv et se présentant sous forme de plusieurs colonnes (CSV).
    Je souhaiterais que cette extraction (régulièrement exportée et écrasée) permette d'alimenter un tableau de bord (TDB) mis en page de façon automatique.
    Pour cela je pensais utiliser la fonction RECHERCHE d'Excel.
    Les colonnes de mon tableau sont identiques et la première colonne N°réf est déroulée dans mon TDB.
    L'idée étant donc de dire à mon TDB de copier la ligne du CSV correspondant à un N° sur la ligne correspondante dans le TDB.
    Mais voilà je galère sur la formule à adopter...

    Je pensais à :
    =RECHERCHE($A2;'CSV'!$A:$A;'CSV'!$B:$B) mais cela ne correspond pas à la recopie d'une ligne complète mais seulement d'une case. ce qui m'oblige a déroulée la formule dans chaque case de mon TDB.

    N'est-il pas possible de faire une recopie d'une ligne entière ?

    Autre problème si le numéro de réf n'est pas retrouver dans le .CSV il me rempli la case avec le numéro le plus proche...

    Je ne sais pas si ma demande est très claire.
    J'espère un petit peu...

    En vous remerciant par avance,

    Audrey
     
    Dernière édition: 3 Décembre 2018
  2. Chargement...

    Discussions similaires - Recopie automatique lignes Forum Date
    Recopie automatique de lignes sur une autre feuille Forum Excel 12 Décembre 2011
    recopier automatiquement des lignes dans une autre feuille Forum Excel 22 Mars 2010
    recopier des lignes automatiquement Forum Excel 22 Octobre 2007
    MACRO QUI CHANGE AUTOMATIQUEMENT LES VALEURS D'UNE CELLULE ET RECOPIE LES RESULTATS AFFICHEES Forum Excel 26 Juillet 2018
    XL 2013 RESOLU>>Recopie données automatique Forum Excel 10 Mai 2017

  3. vmax01

    vmax01 XLDnaute Occasionnel

    Inscrit depuis le :
    17 Février 2008
    Messages :
    176
    "J'aime" reçus :
    6
    bonjour passe par une formule matricielle je pense, Appuye sur Ctrl+Maj+Entrée.
    mais un fichier explicatif serait mieux.
     
  4. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    25763
    "J'aime" reçus :
    2191
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Bonsoir LE GERROUE, vmax01,

    Zipper le fichier CSV pour pouvoir le déposer sur le fil.

    A+
     
  5. LE GUERROUE

    LE GUERROUE XLDnaute Nouveau

    Inscrit depuis le :
    26 Janvier 2017
    Messages :
    9
    "J'aime" reçus :
    0
    Bonjour,

    Voici les fichiers que j'ai du revoir car confidentiel +++. Ils ont anonymisés et beaucoup plus petit qu'en réalité.
    FICHIER CSV régulièrement exporté et sauvegardé (écrasement) et donc changeant.
    Le "vrai" possède énormément de colonnes (45 colonnes) et de lignes (environ 2000 lignes en fin d'année), d'où l'interêt d'une recopie de la ligne entière.
    En vous remerciant par avance,

    Audrey
     

    Pièces jointes:

  6. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    25763
    "J'aime" reçus :
    2191
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Bonjour LE GERROUE, vmax01, le forum,

    Téléchargez et placez les fichiers joints dans le même répertoire (le bureau).

    1) A l'ouverture (ou activation) du fichier essai(1).xlsm un Dictionary est créé par cette macro dans ThisWorkbook :
    Code (Text):
    Private Sub Workbook_Activate()
    Dim fichier$, texte$, ref$
    fichier = Me.Path & "\toto.csv" 'à adapter éventuellement
    Set dico = CreateObject("Scripting.Dictionary")
    Open fichier For Input As #1 'accès au fichier csv
    Do While Not EOF(1) 'EndOfFile: fin du fichier
        Line Input #1, texte 'récupère la ligne
        ref = UCase(Split(texte, ";")(0)) 'référence en 1ère colonne, majuscules
        dico(ref) = Mid(texte, Len(ref) + 2) 'mémorisation des autres colonnes
    Loop
    Close #1 'fermeture du fichier csv
    Calculate 'recalcul des formules volatiles
    End Sub
    La lecture séquentielle du fichier CSV est très rapide.

    2) Le Dictionary est utilisé par cette fonction VBA matricielle :
    Code (Text):
    Public dico As Object 'mémorise la variable

    Function CSV(ref$)
    Application.Volatile
    ref = UCase(ref) 'majuscules
    CSV = ""
    If Not dico.exists(ref) Then Exit Function
    Dim s, a(), i%
    s = Split(dico(ref), ";")
    ReDim a(UBound(s)) 'base 0
    For i = 0 To UBound(s)
        a(i) = s(i)
        If IsDate(a(i)) Then a(i) = CDate(a(i)) 'conversion
        If IsNumeric(a(i)) Then a(i) = CDbl(a(i)) 'conversion
    Next
    CSV = a 'vecteur ligne
    End Function
    Le code doit impérativement être placé dans un module standard (Module1).

    3) La fonction est utilisée dans la feuille de calcul en B2:E2 :
    Code (Text):
    =CSV(A2)
    La formule est entrée en bloc dans la plage et validée matriciellement par les touches Ctrl+Maj+Entrée puis tirée vers le bas.

    Avec cette méthode le recalcul du tableau est très rapide même s'il y a beaucoup de lignes.

    Bonne journée.
     

    Pièces jointes:

  7. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    25763
    "J'aime" reçus :
    2191
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Re,

    J'ai testé avec un tableau de 45 colonnes et 2000 lignes : chaque fichier "pèse" environ 650 Ko.

    Durées d'exécution chez moi sur Win 10 - Excel 2013 pour l'ouverture du fichier .xlsm :

    - lecture séquentielle du fichier CSV et création du Dictionary => 0,14 seconde

    - recalcul des formules matricielles => 0,53 seconde.

    A+
     
  8. LE GUERROUE

    LE GUERROUE XLDnaute Nouveau

    Inscrit depuis le :
    26 Janvier 2017
    Messages :
    9
    "J'aime" reçus :
    0
    C'est parfait !!
    Merci beaucoup!
    J'espère réussir à l'appliquer sur le vrai fichier!
     

Partager cette page