Importer certains données d'une feuille à une autre

anasimo

XLDnaute Occasionnel
Bonjour

(voir les images)
Capture1.JPG


-----------------

Capture2.JPG



je veux transférer uniquement les données des colonnes en fleches vers les colonnes dédiées de la feuille Crédit en reprenant uniquement ceux en bleu cad type 05 et de l'utilisateur 2566.

et si le lendemain je remplace les données sur la feuille BD…il doit importer le nouveaux données en les mettant après ceux déjà existant…cad il continue la suite de ce tableau



Si déja testé le filtre avancé...mais il efface les anciens données importés et les remplace par les nouveaux...et moi je veux garder aussi les anciens
 

Pièces jointes

  • import données.xlsx
    14.3 KB · Affichages: 12

job75

XLDnaute Barbatruc
Bonsoir anasimo,

Pas vraiment clair en ce qui concerne les lignes à copier.

Sur votre fichier feuille "BD" on copie bien sûr les lignes 2-7-8-12 qui ont 2 cellules colorées en bleu.

Mais faut-il aussi copier les lignes 3-4-10-11 qui n'ont qu'une cellule colorée en bleu ?

A+
 

anasimo

XLDnaute Occasionnel
Bonsoir anasimo,

Pas vraiment clair en ce qui concerne les lignes à copier.

Sur votre fichier feuille "BD" on copie bien sûr les lignes 2-7-8-12 qui ont 2 cellules colorées en bleu.

Mais faut-il aussi copier les lignes 3-4-10-11 qui n'ont qu'une cellule colorée en bleu ?

A+
Merci pour ta réponse....je vais expliquer plus.

sur la BD je veux faire des filtres sur TER05 de la colonne A et 2566 sur la colonne J ....le résultat sera exporté (mais pas toutes les colonnes mais juste ceux mentionnées sur la feuille crédit. ...voir image

Capture3.JPG


........


pour avoir
Capture4.JPG




aussi si le lendemain il y a une nouvelle BD quand j'exporte ils doivent s'ajouter à la ligne suivante et ainsi de suite
 
Dernière édition:

job75

XLDnaute Barbatruc
Ma question est pourtant claire mais vous n'y répondez pas vraiment.

En supposant qu'on importe uniquement les lignes où les 2 critères sont vérifiés voyez cette macro dans le fichier joint :
VB:
Sub Importer()
Dim crit1$, col1%, crit2$, col2%, a, ub%, tablo, resu(), i&, n&, j%, v As Variant
crit1 = "TER05": col1 = 1 'à adapter
crit2 = "2566": col2 = 10 'à adapter
a = Array(2, 3, 5, 6, 10, 12, 14) 'numéros des colonnes à copier
ub = UBound(a)
tablo = Sheets("BD").[A1].CurrentRegion.Resize(, 14)
ReDim resu(UBound(tablo), ub) 'base 0
For i = 2 To UBound(tablo)
    If UCase(tablo(i, col1)) = crit1 And CStr(tablo(i, col2)) = crit2 Then '2 critères vérifiés
        For j = 0 To ub
            v = tablo(i, a(j))
            If IsNumeric(v) Then resu(n, j) = CDbl(v) Else resu(n, j) = v
        Next j
        n = n + 1
    End If
Next i
If n = 0 Then Exit Sub
'---restitution---
With Sheets("Crédit")
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    .Cells(.Rows.Count, 4).End(xlUp)(2).Resize(n, ub + 1) = resu
End With
End Sub
A+
 

Pièces jointes

  • import données(1).xlsm
    24.3 KB · Affichages: 19

anasimo

XLDnaute Occasionnel
La macro est très rapide car elle utilise des tableaux VBA.

Pour tester j'ai recopié le tableau de la feuille "BD" sur 104 000 lignes.

Chez moi sur Win 10 - Excel 2019 j'obtiens le résultat en 0,47 seconde.
Merci infiniment job...ça marche c'est exactement ce que je veux
Juste pour perfectionner le fichier au lieu d’incrémenter les critères de filtre dans la macro je veux qu'il vient les chercher dans une feuille nommée "Utilisateurs" (car on est amené à chaque fois de changer les numéro des utilisateurs)
voir image

Capture5.JPG


NB: dans la feuille BD j'ai modifié le nom de la colonne J par "utilisateur" au lieu de données 10

Merci de votre aide
 

job75

XLDnaute Barbatruc
Bonjour anasimo, le forum,

Et que voulez-vous que je fasse avec les numéros d'utilisateurs ?

En attendant voyez ce fichier (1 bis) qui utilise le filtre avancé puisque vous en parliez :
VB:
Sub Importer()
Dim ad1$, ad2$, a, ncol%, dest As Range, i%
Application.ScreenUpdating = False
ThisWorkbook.Names.Add "Crit1", "TER05": ThisWorkbook.Names.Add "Crit2", "=""2566""" 'noms définis à adapter
ad1 = "A2": ad2 = "J2" 'à adapter
a = Array(2, 3, 5, 6, 10, 12, 14) 'numéros des colonnes à copier
With Sheets("Crédit")
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    Set dest = .Cells(.Rows.Count, 4).End(xlUp)(2)
End With
With Sheets("BD").[A1].CurrentRegion
    ncol = .Columns.Count
    .Cells(2, ncol + 2) = "=AND(Crit1=" & ad1 & ",Crit2=" & """""&" & ad2 & ")" 'zone de critères
    .AdvancedFilter xlFilterInPlace, .Cells(1, ncol + 2).Resize(2)
    For i = 0 To UBound(a)
        .Columns(a(i)).Copy dest.Offset(, i)
    Next
    dest.Resize(, UBound(a) + 1).Delete xlUp 'supprime les titres
    If .Parent.FilterMode Then .Parent.ShowAllData 'RAZ
    .Cells(2, ncol + 2) = ""
End With
End Sub
Les formats sont copiés, du coup les nombres sous forme de textes ne sont pas convertis.

Et avec un tableau de 104 000 lignes la macro s'exécute en 7,2 secondes...

Bon dimanche.
 

Pièces jointes

  • import données(1 bis).xlsm
    25.2 KB · Affichages: 6

anasimo

XLDnaute Occasionnel
merci...oui il est bien fait...il marche aussi....mais juste une chose je veux qu'une fois les données importées le fichier source doit s'effacer...car à chaque fois je clique sur le bouton il les importe (risque de doublons)
 

anasimo

XLDnaute Occasionnel
pour les numéros des utilisateurs (il s'agit en fait de la matricule de la personne qui a saisi les données dans le système )...à tout moment ils sont amenés à être modifiés ou changés ou ajouter d'autres utilisateurs (cette fois c'était 2566...mais la prochaine il se peut que je le change par 5412 ou garder les deux...et ainsi de suite) cad je dois renseigner dans la colonne B de la feuille "utilisateurs" les numéros que des utilisateurs que je veux )
 

job75

XLDnaute Barbatruc
Voyez ce fichier (2) :
VB:
Sub Importer()
Dim crit1$, crit2$, col1%, col2%, a, ub%, tablo, resu(), i&, n&, j%, v As Variant
With Sheets("Utilisateurs").[A1].CurrentRegion
    crit1 = CStr(.Cells(.Rows.Count, 1))
    crit2 = CStr(.Cells(.Rows.Count, 2))
End With
col1 = 1: col2 = 10 'à adapter
a = Array(2, 3, 5, 6, 10, 12, 14) 'numéros des colonnes à copier
ub = UBound(a)
tablo = Sheets("BD").[A1].CurrentRegion.Resize(, 14)
ReDim resu(UBound(tablo), ub) 'base 0
For i = 2 To UBound(tablo)
    If UCase(tablo(i, col1)) = crit1 And CStr(tablo(i, col2)) = crit2 Then '2 critères vérifiés
        For j = 0 To ub
            v = tablo(i, a(j))
            If IsNumeric(v) Then resu(n, j) = CDbl(v) Else resu(n, j) = v
        Next j
        n = n + 1
    End If
Next i
'---restitution---
With Sheets("Crédit")
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    If n Then .Cells(.Rows.Count, 4).End(xlUp)(2).Resize(n, ub + 1) = resu
End With
'---RAZ---
With Sheets("BD")
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    .[A1].CurrentRegion.Offset(1).Delete xlUp
End With
End Sub
 

Pièces jointes

  • import données(2).xlsm
    23.5 KB · Affichages: 9

anasimo

XLDnaute Occasionnel
Voyez ce fichier (2) :
VB:
Sub Importer()
Dim crit1$, crit2$, col1%, col2%, a, ub%, tablo, resu(), i&, n&, j%, v As Variant
With Sheets("Utilisateurs").[A1].CurrentRegion
    crit1 = CStr(.Cells(.Rows.Count, 1))
    crit2 = CStr(.Cells(.Rows.Count, 2))
End With
col1 = 1: col2 = 10 'à adapter
a = Array(2, 3, 5, 6, 10, 12, 14) 'numéros des colonnes à copier
ub = UBound(a)
tablo = Sheets("BD").[A1].CurrentRegion.Resize(, 14)
ReDim resu(UBound(tablo), ub) 'base 0
For i = 2 To UBound(tablo)
    If UCase(tablo(i, col1)) = crit1 And CStr(tablo(i, col2)) = crit2 Then '2 critères vérifiés
        For j = 0 To ub
            v = tablo(i, a(j))
            If IsNumeric(v) Then resu(n, j) = CDbl(v) Else resu(n, j) = v
        Next j
        n = n + 1
    End If
Next i
'---restitution---
With Sheets("Crédit")
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    If n Then .Cells(.Rows.Count, 4).End(xlUp)(2).Resize(n, ub + 1) = resu
End With
'---RAZ---
With Sheets("BD")
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    .[A1].CurrentRegion.Offset(1).Delete xlUp
End With
End Sub
Parfait ...il répond à 97% de mes attentes ...manque juste pour la ligne de critère ...vous avez utiliser La dernière ligne pour les critères...alors qu'il faut utiliser toute la plage de A1:B4 de la feuille utilisateurs (il se peut qu'il y aura plusieurs utilisateurs à insérer)....et merci beaucoup
 

anasimo

XLDnaute Occasionnel
mon tableau source est alimenté quotidiennement (c'est un fichier édité sous format excel d'un autre SI) il comprend plus de 2000 lignes) donc du tableau source, je dois importer les lignes qui contiennent en même temps le type TER05 et les utilisateurs renseignés dans la colonne utilisateurs (il se peut que le lendemain je modifie les numéros utilisateurs et mettre d'autres..et il doit importé le type TER05 avec les nouveaux numéros que j'ai renseigné...)
Capture11.JPG


pour notre exemple il va importer tous les TER05 et les utilisateurs 5412; 1236 et 2566............si le lendemain je met dans la colonne B de nouveaux numéro par exemple (1005, 2631,...) il doit les chercher
 

Discussions similaires

Statistiques des forums

Discussions
311 724
Messages
2 081 936
Membres
101 844
dernier inscrit
pktla