importer certaines lignes d'un tableau vers un autre

anasimo

XLDnaute Occasionnel
Bonjour

Dans le cadre du suivi, j'édite quotidiennement de notre SI un reporting sous format excel, je copie son contenu GLOBAL et je le colle dans la feuille "BD_CF" de mon classeur (exactement comme le montre le fichier joint).
dans la colonne A y figurent toutes les entités (mais certaines ne me concernent pas)
Mon souhait:
Dans cette BD_CF, je veux sélectionner que les entités qui me concerne (sont listées dans la feuille "utilisateurs" de la cellule B5:Bn) et puis copier le tableau filitré dans la feuille "CF" à partir de la colonne D.
le jour+1 ça sera la même chose ...copier sur la ligne suivante.
 

Pièces jointes

  • import tabl.xlsx
    15.4 KB · Affichages: 6

job75

XLDnaute Barbatruc
Bonjour anasimo,

Voyez le fichier joint et cette macro :
VB:
Sub Import()
If MsgBox("Etes-vous sûr qu'il s'agit d'un nouveau tableau ?", 4, "Import") = 7 Then Exit Sub
Dim tablo, d As Object, i&, ncol%, n&, j%
tablo = Sheets("Utilisateurs").[B4].CurrentRegion.Resize(, 2) 'matrice, plus rapide, au moins 2 éléments, à adapter
Set d = CreateObject("Scripting.Dictionary")
For i = 2 To UBound(tablo)
    d(CStr(tablo(i, 1))) = ""
Next i
With Sheets("BD_CF").[A1].CurrentRegion.Offset(2) 'à adapter
    ncol = .Columns.Count
    If ncol = 1 Then ncol = 2 'au moins 2 éléments
    tablo = .Resize(, ncol) 'matrice, plus rapide
End With
'---filtrage---
For i = 1 To UBound(tablo)
    If d.exists(CStr(tablo(i, 1))) Then
        n = n + 1
        For j = 1 To ncol
            tablo(n, j) = tablo(i, j)
        Next j
    End If
Next i
'---restitution---
With Sheets("CF")
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    If n Then .Cells(.Rows.Count, 4).End(xlUp)(2).Resize(n, ncol) = tablo
End With
End Sub
A+
 

Pièces jointes

  • import tabl(1).xlsm
    25.3 KB · Affichages: 6

anasimo

XLDnaute Occasionnel
Merci beaucoup job....comme toujours ..travail clean.
Je crois qu'il faut faire comme vous l'avez fait pour l'ancien fichier d'effacer la base une fois importée...pour éviter la double importation.

NB: la colonne B de la feuille utilisateur peut parfois contenir une centaine d'entités....est ce que la macro prévoit ça? merci
 

anasimo

XLDnaute Occasionnel
Re- Job

Quand j'ai rempli la colonne A dans la feuille "utilisateur" la macro ne marche plus.....si vous pouvez corriger pour que la macro tient compte que la colonne A peut recevoir des données même si la macro n'utilisera pas ses données

NB: les données de la colonne A me serviront pour certaines analyse c/d'autres feuilles

Merci d'avance
 

Pièces jointes

  • import tableau.xlsm
    29.4 KB · Affichages: 5

job75

XLDnaute Barbatruc
Bonjour anasimo,

Avec 2 colonnes dans la feuille "Utilisateurs" modifiez le début de la macro comme ceci :
VB:
With Sheets("Utilisateurs")
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    tablo = .Range("A1", .Range("B" & .Rows.Count).End(xlUp)) 'matrice, plus rapide, à adapter
End With
Set d = CreateObject("Scripting.Dictionary")
For i = 5 To UBound(tablo)
    If tablo(i, 2) <> "" Then d(CStr(tablo(i, 2))) = ""
Next i
A+
 

Discussions similaires

Statistiques des forums

Discussions
311 730
Messages
2 081 981
Membres
101 855
dernier inscrit
alexis345