Tableau avec taille dynamique suivant import CSV

Bonjour,

J'ai un fichier composé de deux feuilles. La première est générée depuis un import CSV qui contient une en-tête, un certain nombre de ligne qui composonse les données que je vais analyser et une dernière ligne composant des totaux.

Ma second feuille réutilise mes données de ma première feuille avec de nouvelles formules et colonnes.

Mon problèmes est que la première feuille est basée sur un import CSV qui a un nombre de lignes variable et je voudrais que ma seconde feuille s'adapte aux nombres de lignes variables de l'import CSV et de sa structure: une ligne d'en-tête, les lignes de données variables et la dernière ligne qui est commune à tous les imports CSV.

Donc je cherche le bonne solution: fonction(décaler?, VBA ou autre) pour que ça fonctionne correctement.

Un ficher d'exemple est fourni.

Merci

Bonjour Philoub02 et

Certains te dirons de le faire avec Power Query, mais par formule avec DECALER() c'est le plus simple

Il suffit que tu regardes comment on utilise la fonction

Bonjour,

Une proposition VBA à tester.

Cdlt.

Public Sub CalculationsFromCSV()
Dim wsImport As Worksheet, wsCalcul As Worksheet
Dim rng As Range
Dim tbl As Variant, arr() As Variant
Dim I As Long
Const N = 1024 ^ 3

    Set wsImport = Worksheets("INPUT CSV")
    Set wsCalcul = Worksheets("Calculs")

    wsCalcul.Cells(1).CurrentRegion.Offset(1).ClearContents
    Set rng = wsImport.Cells(1).CurrentRegion
    tbl = rng.Offset(1).Resize(rng.Rows.Count - 1, 10).Value
    ReDim arr(1 To UBound(tbl), 1 To 13)

    For I = 1 To UBound(tbl)
        arr(I, 1) = tbl(I, 1)
        arr(I, 2) = tbl(I, 2) / N
        arr(I, 3) = tbl(I, 3)
        arr(I, 4) = tbl(I, 4)
        arr(I, 5) = tbl(I, 5) / tbl(I, 4)
        arr(I, 6) = tbl(I, 5)
        arr(I, 7) = tbl(I, 2) / N * (1 - arr(I, 3))
        If tbl(I, 3) = 1 Then arr(I, 8) = 0 Else arr(I, 8) = arr(I, 2) / tbl(I, 5)
        arr(I, 9) = tbl(I, 6) / N
        arr(I, 10) = tbl(I, 7) / N
        arr(I, 11) = arr(I, 8) - arr(I, 9) - arr(I, 10) - tbl(I, 9) / N
        arr(I, 12) = tbl(I, 9) / N
        arr(I, 13) = tbl(I, 10) / N
    Next I

    wsCalcul.Cells(2, 1).Resize(UBound(arr), 13).Value = arr

End Sub

Bonjour,

Merci à tous les deux pour votre retour rapide.

J'ai essayé les 2 solutions mais j'ai un problème avec le VBA. Lorsque j'essaye d'exécuter, j'ai une erreur 13.

Je me suis donc rabattu sur la fonction, et à mon grand étonnement je suis presque parvenu au résultat final attendu.

Il me reste plus qu'un seul point:

- Je souhaiterais que la dernière rangée de la colonne partage de la feuille Calculs récupère la dernière valeur de la rangée de la colonne partage de la feuille INPUT CSV, et que ça n'utilise pas la formule utilisée par les autres rangées. Mon problème est que si j'utilise la fonction décaler la rangée n'est pas dynamique, si le nombre de ligne varie dans INPUT.CSV.

Merci

Bonjour,

Quelle erreur 13 et où ?

Voir fichier.

ALT F8, exécuter la procédure CalculationsFromCSV

En fin de procédure, on affiche la valeur de la dernière ligne de la colonne Passage.

Que fait-on avec ? Ta demande est confuse...

Cdlt.

Bonsoir Jean-Eric,

Merci pour ton fichier avec la Macro qui fonctionne parfaitement.

Ma demande était d'arriver à faire la même chose avec la formule Offset.

Mais je vais utiliser la version avec ta macro, ce sera très bien.

Merci encore.

bonne soirée.

Rechercher des sujets similaires à "tableau taille dynamique suivant import csv"