Récup de valeur dans un .CSV

GENTILE

XLDnaute Nouveau
Bonjour,

Je voudrais récupérer des valeurs dans un fichier CSV via des boutons avec une macro. Mais le fichiers CSV peux varier d'un échantillon à un autre.

Cette macro devra identifier le numéro d'échantillon depuis le fichier de base dans le CSV et copier la valeur du/des composés présents dans le SCV dans les cases correspondantes dans le fichier de base.

J'espère m'être bien exprimé car se n'est pas forcement évident.

Je joint deux fichiers l'un de base et l'autre dans lequel il faut aller chercher les valeurs à copier dans les cases correspondantes.

Merci par avance pour votre aide.
 

Pièces jointes

  • Fichier Base.xlsx
    11.3 KB · Affichages: 14
  • Export1.zip
    276 bytes · Affichages: 12
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Bonjour,

Je voudrais récupérer des valeur dans un fichier excel via des boutons avec macro.

Le premier bouton récupérerait les valeurs correspondant à l'échantillon 1, le bouton 2 à l'échantillon 2, ... et le tout en utilisant les cases des chemins et nom du fichier.

Je joint deux fichiers l'un de base et l'autre dans lequel il faut aller chercher les valeurs à copier dans les cases correspondantes.

Merci par avance pour votre aide.
:eek: il n'y a pas de C16 dans Export1.xls !!!

établir une liaison avec le fichier export, les 2 fichiers étant ouvert dans Excel
en C13 :
=Export1.xls!$C1
en F13 :
=Export1.xls!$C17
en I13 :
=Export1.xls!$C33
étendre vers le bas jusque la ligne 28
upload_2018-10-24_15-38-37.png
 

GENTILE

XLDnaute Nouveau
Normal, j'ai glissé une ligne de trop désolé, il n'y en a effectivement que 15 composés

Les liaisons j'y avait pensé, mais comme les fichiers n'auront pas le même racine, je dois inclure un chemin d'accé qui lui aussi diffère d'un dossier à un autre, mais aussi pour ne pas modifier involontairement ce fichier d'export. c'est pour sa qu'une macro m'est utile.

J'ai d'ailleur modifié les fichiers à la demande de job75

Merci GEEDEE
 

MJ13

XLDnaute Barbatruc
Bonjour à tous

On peut aussi utiliser une RechercheV dans ton cas que je trouve très pratique et permet souvent d'éviter une macro. Pour la compréhension je te laisse chercher pourquoi il y a 2 #N/A.
 

Pièces jointes

  • Fichier Base RechercheV.xlsx
    16.5 KB · Affichages: 19

GENTILE

XLDnaute Nouveau
Oui je m'étais mis aussi dans le cas le plus simple posible, tout les composés présent, mais parfois 1 échantillon comportera 12 composés, des fois 5 composés, ... cet à la base j'ai un CSV et non un XLS et se CSV je dois impérativement ne jamais y toucher, le modifier ... donc ils seront enrigistrés à un endroit précis d'ou l'idée du chemin d'accé.
 

job75

XLDnaute Barbatruc
Re, salut Modeste geedee et MJ13,

Voyez le fichier joint et cette macro :
Code:
Sub Récupération()
Dim numech As Range, dest As Range, fichier$, d1 As Object, d2 As Object, t, i&, cles, n, a(), num
Set numech = [B3:D3] 'liste à adapter
Set dest = [B8] 'à adapter
fichier = ThisWorkbook.Path & "\" & [B6] 'à adapter éventuellement
Application.ScreenUpdating = False
Set d1 = CreateObject("Scripting.Dictionary")
Set d2 = CreateObject("Scripting.Dictionary")
Workbooks.OpenText fichier, Local:=True
t = ActiveWorkbook.Sheets(1).UsedRange.Resize(, 3)
ActiveWorkbook.Close
'---clés et items---
For i = 1 To UBound(t)
    If t(i, 2) <> "" Then
        d1(UCase(t(i, 2))) = ""
        d2(t(i, 1) & UCase(t(i, 2))) = t(i, 3) 'mémorise la valeur en 3ème colonne
    End If
Next
If d1.Count = 0 Then Exit Sub 'sécurité
cles = d1.keys
'---tableaux des résultats---
Rows(dest.Row & ":" & Rows.Count).Clear
For n = 1 To numech.Count
    '---titre---
    If n > 1 Then Set dest = dest(1, 4)
    dest.Resize(, 2).Merge
    dest = "Echantillon " & n
    With dest.MergeArea
        .Interior.ColorIndex = 16
        .Font.Size = 16
        .Font.ColorIndex = 2 'police blanche
        .Font.Bold = True 'gras
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .Borders.Weight = xlThin
    End With
    '---1ère colonne (clés)---
    With dest(2).Resize(d1.Count)
        .Value = Application.Transpose(cles) 'Transpose est limitée à 65536 lignes
        .Interior.ColorIndex = 16
        .Font.Size = 16
        .Font.ColorIndex = 2 'police blanche
        .Font.Bold = True 'gras
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .Borders.Weight = xlThin
    End With
    '---2ème colonne(items)---
    With dest(2, 2).Resize(d1.Count)
        ReDim a(1 To d1.Count, 1 To 1)
        num = numech(n)
        For i = 1 To UBound(a)
            a(i, 1) = d2(num & cles(i - 1))
        Next
        .Value = a
        .Interior.ColorIndex = 19
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .Borders.Weight = xlThin
    End With
Next
End Sub
Les 2 fichiers doivent être placés dans le même répertoire (le bureau).

A+
 

Pièces jointes

  • Fichier Base(1).xlsm
    26.9 KB · Affichages: 19
  • Export1.zip
    276 bytes · Affichages: 14

GENTILE

XLDnaute Nouveau
Merci Job75, super boulot je vois que tu touches bien.

Par contre je souhaitais simplement copier les valeurs dans les cases des composés, je pense que la macro sera beaucoup moins compliquée, les colonnes étant déjà existantes. C'est une simple recopie de valeur pure et dure.

Encore merci pour ton aide en attendant de te relire.

Gulliver
 

GENTILE

XLDnaute Nouveau
Bonjour Job merci pour ta réponse elle est géniale mais étant nul pour ainsi dire en codage de macro.

Mais je dois avouer qu'elle est beaucoup trop complexe, à la base je souhaitais une simple recopie de valeurs dans des cases dédiées, avec des colonnes pré-remplie il m'anquait que la façon d'amener la dite valeur en fonction de l'échantillon et du composé.

Je vois que tu maîtrises à perfection cette outils du VB, mais ne serait-il pas plus simple de "simplement" copier la valeur dans les cases appropriées?

J'aimerais comprendre, en plus je suis de nature curieuse. En plus du dis que la taille du CSV peu changer, certe mais en quoi cela joue sur le codage?

J'espère ne pas t'avoir froissé ou vexé comme MJ13 le dit si bien.

Cordialement.
 

GENTILE

XLDnaute Nouveau
J'ai oublié aussi de préciser que le fichier de base que j'ai fourni est "fictif car pas du tout ressemblant au fichier initiale, car je ne peux pas le diffuser pour des raisons de qualité, ... donc les numéros d'échantillon ne sont plus à leur place respective, ... c'est pour sa que je m'attendais à une solution plus simple avec des positions des cellules de recopie, ... que j'aurais adapté à mon document, et mon fichier d'export son format n'est pas encore réellement définie, forme, extension, ...
 

Discussions similaires