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:

MJ13

XLDnaute Barbatruc
Re

Merci Gentile pour ces précisions, mais je parlais aussi du fichier que j'ai mis dans cette discussion en #7 que tu n'as pas dû voir, vu l'absence de commentaires, et qui propose une méthode sans macros que je trouve assez simple à mettre en oeuvre. :)
 

job75

XLDnaute Barbatruc
Bonjour le fil, le forum,

@ MJ13 : ta solution suppose que la 1ère colonne des 3 tableaux est immuable, ce n'est peut-être pas forcément le cas.

@ GENTILE : pourquoi paniquer ? J'ai indiqué au début de la macro les 3 choses à adapter éventuellement, c'est enfantin.

A+
 

job75

XLDnaute Barbatruc
Re,

Cela dit GENTILE on peut simplifier la macro en évitant les mises en forme.

Il suffit de créer 3 tableaux Excel et d'utiliser cette nouvelle macro :
Code:
Sub Récupération()
Dim numech As Range, fichier$, d1 As Object, d2 As Object, t, i&, cles, n, a(), num
Set numech = [B3:D3] 'liste à 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 i
If d1.Count = 0 Then Exit Sub 'sécurité
cles = d1.keys
'---tableaux des résultats (tableaux Excel)---
For n = 1 To 3
    With ActiveSheet.ListObjects(n).DataBodyRange
        .Delete xlUp 'RAZ
        .Columns(1).Resize(d1.Count) = Application.Transpose(cles) 'Transpose est limitée à 65536 lignes
        With .Columns(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)) 'items
            Next i
            .Value = a
        End With
    End With
Next n
End Sub
Dans un tableau Excel les formats se recopient sur tout le tableau.

Fichier (2).

A+
 

Pièces jointes

  • Fichier Base(2).xlsm
    28.4 KB · Affichages: 10
  • Export1.zip
    276 bytes · Affichages: 10

MJ13

XLDnaute Barbatruc
Re

@job: Je suis d'accord que les macros, en général, c'est plus rapide.

Mais comme ici, on avait une maquette de résultats avec derrière un fichier .Csv, je trouvais dans un premier temps cela plus simple .

Avec RechercheV, tu peux facilement adapter au contexte des données à rechercher. D'ailleurs, maintenant quand je gère des BDD, j'utilise dans 80% des cas, RechercheV pour extraire des données. Bien sûr il faut nommer ta Base de données avec les données à chercher "_BD" par exemple pour qu'Excel arrive à s'y retrouver facilement et que ce que tu cherches soit en première colonne avant les données à trouver.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 326
Messages
2 087 313
Membres
103 513
dernier inscrit
adel.01.01.80.19