XL 2013 importation données d'un fichier fermé

michel-nac

XLDnaute Nouveau
Bonjour à tous,

je chercher à faire l'importation des données de Feuil1 du classeur Balance vers la feuille RECAP de la feuille Plan à partir de la ligne 2, tout en respectant la trame de la feuille RECAP c'est à dire les bordures du tableau

Merci d'avance
 

Fichiers joints

job75

XLDnaute Barbatruc
Bonjour michel-nac, bienvenue sur XLD,

Téléchargez les fichiers joints en les laissant dans le même répertoire.

Le fichier Plan.xlsx récupère les valeurs du fichier Balance.xlsx grâce à des formules de liaison.

Les valeurs zéro ne sont pas affichées.

Les bordures du tableau sont appliquées par 5 MFC séparées.

A+
 

Fichiers joints

michel-nac

XLDnaute Nouveau
Bonsoir Job75,
je vous remercie tout d'abord pour la célérité de votre réponse si limpide.
ce ne serait pas possible de faire tout cela avec un code en le liant à un bouton sans passer par les formules ?

Merci d'avance
 

job75

XLDnaute Barbatruc
Re,
ce ne serait pas possible de faire tout cela avec un code en le liant à un bouton sans passer par les formules ?
Bien sûr que c'est possible, mais si l'on veut ne pas ouvrir le fichier il faut utiliser en VBA les formules de liaison.

Donc le VBA est inutile.

A+
 

michel-nac

XLDnaute Nouveau
Re-Bonsoir Job75,
oui je préfère utiliser le VBA et je n'ai pas de préfère au fait quant à l'ouverture du fichier.

Merci
 

job75

XLDnaute Barbatruc
Re,
oui je préfère utiliser le VBA et je n'ai pas de préfère au fait quant à l'ouverture du fichier.
La macro du bouton :
Code:
Sub Importer()
Dim F As Worksheet
Set F = ThisWorkbook.Sheets("RECAP")
Application.ScreenUpdating = False
F.Rows("2:" & F.Rows.Count).Delete 'RAZ
On Error Resume Next
With Workbooks.Open(ThisWorkbook.Path & "\Balance.xlsx").Sheets(1) 'adaptable
    With .[A1].CurrentRegion
        F.[A1].Resize(.Rows.Count, .Columns.Count) = .Value 'copie les valeurs
    End With
    .Parent.Close False
End With
'---bordures---
With F.[A1].CurrentRegion
    .Borders.Weight = xlThin
    .Offset(1).Resize(.Rows.Count - 1).Borders(xlInsideHorizontal).Weight = xlHairline
End With
End Sub
Fichiers joints à télécharger dans le même répertoire (le bureau).

A+
 

Fichiers joints

michel-nac

XLDnaute Nouveau
Bonjour Job75,

je m'excuse de vous déranger une autre fois au sujet de ma problématique.
est ce qu'il y'a possibilité d'ajuster le code pour qu'il n'importe que les données dont le code de la colonne B du classeur Balance commence avec la lettre D.
autrement dit il ne faut pas importer les lignes dont le code de la colonne B commence avec une autre lettre.
(parce qu'il se peut que la colonne B contienne d'autres codes alors que ce qui m’intéresse sont juste ceux qui commencent avec D)

Merci d'avance
 

job75

XLDnaute Barbatruc
Bonjour michel-nac, le forum,

La meilleure solution (la plus rapide) est d'utiliser un tableau VBA pour filtrer :
Code:
Option Compare Text 'facultatif, la casse est ignorée

Sub Importer()
Dim F As Worksheet, tablo, ncol, i&, n&, j%
Set F = ThisWorkbook.Sheets("RECAP")
Application.ScreenUpdating = False
F.Rows("2:" & F.Rows.Count).Delete 'RAZ
On Error Resume Next
With Workbooks.Open(ThisWorkbook.Path & "\Balance.xlsx").Sheets(1) 'adaptable
    tablo = .[A1].CurrentRegion 'matrice, plus rapide
    ncol = UBound(tablo, 2)
    n = 1
    For i = 2 To UBound(tablo)
        If tablo(i, 2) Like "D*" Then
            n = n + 1
            For j = 1 To ncol
                tablo(n, j) = tablo(i, j)
            Next
        End If
    Next
    .Parent.Close False
End With
'---restitution---
F.[A1].Resize(n, ncol) = tablo
'---bordures---
With F.[A1].CurrentRegion
    .Borders.Weight = xlThin
    .Offset(1).Resize(.Rows.Count - 1).Borders(xlInsideHorizontal).Weight = xlHairline
End With
End Sub
Fichier (2), j'ai mis des "X" en colonne B du fichier Balance.xlsx.

A+
 

Fichiers joints

michel-nac

XLDnaute Nouveau
Bonsoir Job75,

je ne sais pas si je peux me permettre de solliciter votre aide pour une modification dans le code en rajoutant une condition dans le code ?
ne pas importer aussi les données dont la valeur de la colonne E égale à ZERO

Merci d'avance
 

job75

XLDnaute Barbatruc
Bonjour michel-nac,

Avec ce code les lignes avec valeur zéro, vide ou texte en colonne E ne sont pas copiées :
Code:
        If tablo(i, 2) Like "D*" And Val(Replace(tablo(i, 5), ",", ".")) <> 0 Then
Fichier (3).

A+
 

Fichiers joints

Discussions similaires


Haut Bas