XL 2016 Importation de données sous conditions entre deux classeurs

gameslover

XLDnaute Nouveau
Bonjour,

Je recherche une solution à mon problème sans grand succès pour le moment malheureusement.

Je dois en effet importer de manière automatique une partie des données situées dans le classeur "rapport.xlsx", feuilles "titre" et "bilan" pour les faire apparaître dans le classeur "cat.xlsm" sous la feuille "X". Les données devraient automatiquement être importées sous les années 2018 et 2019 du classeur cat.xlsm au bon endroit selon les rubriques indiquées au moyen des chiffres "2.xx" pour la feuille bilan et les cellules en rouge pour la feuille titre.

Mes contraintes principales sont les suivantes :
  • J'ai une vingtaine de fichiers rapports différents qui devraient chacun être importés dans une feuille individuelle du classeur cat
  • L'emplacement des lignes et des cellules dans les fichiers rapport pourraient varier car les personnes les introduisant ont liberté d'ajouter des éléments au besoin il n'est donc pas question de pouvoir faire des références aux cellules précises
  • Les éléments dans le classeur cat eux en revanche seront toujours fixes
  • La solution doit être flexible et permettre d'ajouter d'autres feuilles au classeur rapport dont certaines données devront aussi être importées dans le classeur cat sous la même feuille X individuelle par rapport dont j'ajouterais des rubriques au besoin, dans l'idéal je devrais pouvoir simplement adapter la solution aux autres feuilles futures.
  • Certaines données du classeur rapport doivent être additionnées avant l'importation dans le classeur cat (lignes 12 et 15 par exemple)
  • Je n'ai que des connaissances très basiques en VBA, il me faudrait donc un code simple à comprendre et à adapter selon mes besoins futurs ou si possible une solution qui n'utiliserait pas VBA
Merci d'avance pour votre aide très précieuse :)

Cordialement.
 

Pièces jointes

  • rapport.xlsx
    19.9 KB · Affichages: 12
  • cat.xlsm
    56.7 KB · Affichages: 7

job75

XLDnaute Barbatruc
Bonsoir gameslover,

Téléchargez les fichiers joints dans le même dossier (le bureau).

La macro du bouton "Importer" :
VB:
Private Sub CommandButton1_Click()
Dim chemin$, fichier$, feuille$, col%, r As Range, wb As Workbook, i&, s, j%, x$, c As Range
chemin = ThisWorkbook.Path & "\" 'à adapter
fichier = "rapport.xlsx" 'à adapter
feuille = "Bilan"
col = 4 'colonne D de cette feuille
Set r = [D11:E19,D24:E36] 'plages à adapter
Application.ScreenUpdating = False
r.ClearContents 'RAZ
Set wb = Workbooks.Open(chemin & fichier)
If Application.CountA(wb.Sheets(feuille).Columns(col)) Then
    For Each r In r.Areas
        For i = 1 To r.Rows.Count
            If Trim(r(i, 3)) <> "" Then
                s = Split(r(i, 3).Text, "+")
                For j = 0 To UBound(s)
                    x = Replace(Trim(s(j)), ",", ".")
                    For Each c In wb.Sheets(feuille).Columns(col).SpecialCells(xlCellTypeConstants)
                        If Replace(Trim(c.Text), ",", ".") = x Then
                            r(i, 1) = r(i, 1) + Val(Replace(c(1, 2), ",", "."))
                            r(i, 2) = r(i, 2) + Val(Replace(c(1, 3), ",", "."))
                            Exit For
                        End If
                Next c, j
            End If
    Next i, r
End If
wb.Close False
End Sub
A+
 

Pièces jointes

  • cat(1).xlsm
    88.5 KB · Affichages: 9
  • rapport.xlsx
    20.6 KB · Affichages: 4
Dernière édition:

job75

XLDnaute Barbatruc
On peut se servir de la formule de liaison en B2 pour trouver le fichier source :
VB:
If InStr([B2].Formula, "]") Then fichier = Left([B2].Formula, InStr([B2].Formula, "]") - 1)
fichier = Mid(Replace(fichier, "[", ""), 3)
If fichier = "" Or Dir(fichier) = "" Then MsgBox "La formule en B2 ne permet pas de trouver le fichier source...": Exit Sub
Fichier (2).
 

Pièces jointes

  • cat(2).xlsm
    89.3 KB · Affichages: 6

gameslover

XLDnaute Nouveau
Bonjour,

Un énorme merci pour ce code et les fichiers associés, le tout fonctionne parfaitement et correspond exactement à ce dont j'ai besoin.

J'ai cependant essayé d'utiliser le code du bouton dans un autre rapport et là plus rien ne fonctionne malheureusement, j'ai pourtant adapté les plages comme indiqué dans le code, refait la liaison avec le nouveau rapport mais il n'importe rien du tout… faut-il adapter encore quelque chose d'autre qui n'est pas indiqué ?

Je me rends compte que je n'ai pas précisé que la colonne A, masquée par défaut, contient un nom qui pourrait servir à simplifier éventuellement le code pour le rendre plus facilement exploitable sur d'autres feuilles. Je remets le fichier joint rapport.xlsx avec la colonne A.

Merci encore pour votre aide :)
 

Pièces jointes

  • rapport.xlsx
    19.5 KB · Affichages: 8
Dernière édition:

job75

XLDnaute Barbatruc
Allons gameslover vous devriez vous rendre compte que cette colonne A ne sert à rien puisque ses valeurs ne sont pas utilisées dans le fichier .xlsm.

Et puisque les valeurs à rechercher se trouvent en colonne E il faut remplacer col = 4 par col = 5.
 

gameslover

XLDnaute Nouveau
Bonjour,

Je suis navré mais même en remplaçant col = 4 par col = 5 ça ne fonctionne pas correctement car il n'importe pas toutes les données… comment est-ce qu'il recherche les valeurs ?

N'étant pas du tout à l'aise avec le code VBA je ne comprends pas comment il détermine quelles valeurs du fichier .xlsx doivent aller dans les bonnes cellules du fichier .xlsm ?

Le soucis vient aussi du fait que le fichier .xlsx source peut avoir des cellules remplies supplémentaires ou en moins que le fichier de base que j'ai transmis initialement ce qui pourrait expliquer le problème non ?

Merci d'avance pour votre aide :)
 

gameslover

XLDnaute Nouveau
Bonjour,

Je les ai joints dans mes précédents messages mais le problème c'est que le code fourni ne correspond pas aux contraintes que j'avais énoncées dans mon premier message à savoir :
  • L'emplacement des lignes et des cellules dans les fichiers rapport pourraient varier car les personnes les introduisant ont liberté d'ajouter des éléments au besoin il n'est donc pas question de pouvoir faire des références aux cellules précises
  • La solution doit être flexible et permettre d'ajouter d'autres feuilles au classeur rapport dont certaines données devront aussi être importées dans le classeur cat sous la même feuille X individuelle sur laquelle j'ajouterais des rubriques au besoin, dans l'idéal je devrais pouvoir simplement adapter la solution aux autres feuilles futures.
  • Je n'ai que des connaissances très basiques en VBA, il me faudrait donc un code simple à comprendre et à adapter selon mes besoins futurs ou si possible une solution qui n'utiliserait pas VBA
Il me faudrait une solution technique simple et adaptable car les rapports auront bien d'autres feuilles que les deux actuelles "titre" et "bilan" et j'aimerais pouvoir adapter la solution tout seul selon les besoins qui me seront transmis ultérieurement. Si en VBA ce n'est pas possible d'avoir une solution de ce style peut-être qu'il existe autre chose, même payant je suis ouvert tant que ce soit simple à utiliser et intuitif.

Merci quand même de votre aide et désolé du dérangement, les fichiers finaux contenant des données strictement confidentielles je ne peux pas les joindre sur Internet malheureusement, j'avais donc juste besoin d'une base de travail compréhensible que je puisse modifier tout seul dans mes fichiers pour permettre cette importation de manière confortable.

Meilleures salutations.
 

gameslover

XLDnaute Nouveau
Encore une fois c'est ce que j'ai fait, le second fichier rapport.xlsx est la version que j'utilise, le fichier cat lui reste identique, le problème vient du fichier source qui change, j'ai mis justement une nouvelle version dans mon message de 10h03...
 

job75

XLDnaute Barbatruc
Maintenant si vous ne voulez pas définir la colonne de recherche par col = 4 ou col = 5 vous pouvez rechercher dans la feuille "Bilan" le nombre "2.1" :
VB:
Set c = wb.Sheets(feuille).Cells.Find("2.1", , xlValues, xlWhole) 'recherche "2.1"
If Not c Is Nothing Then
    col = c.Column
Fichiers (1 bis) et (2 bis).
 

Pièces jointes

  • cat(1 bis).xlsm
    87.3 KB · Affichages: 4
  • cat(2 bis).xlsm
    89.6 KB · Affichages: 4
  • rapport.xlsx
    20.2 KB · Affichages: 5

gameslover

XLDnaute Nouveau
Merci beaucoup pour les nouveaux fichiers mais j'ai en fait toujours le même problème que ce soit avec la version 1bis ou 2bis à savoir qu'il ne prend pas toutes les données de la feuille bilan du fichier rapport.xslx. Voici le résultat chez moi :
Capture.PNG

Comme on peut le voir il manque plusieurs chiffres du passif, l'actif lui est complet par contre. Ca me faisaient exactement la même chose hier c'est pour cette raison que je pensais, à tort visiblement, que la colonne A pouvait servir de référence pour les recherches des chiffres de la colonne E.
 

job75

XLDnaute Barbatruc
Les résultats chez moi sont les mêmes que chez vous et sont corrects.

En effet en colonne F les valeurs 2,41-2,17-2,18-2,20-2,21 n'existent pas dans la feuille "rapport" et donnent donc des cellules vides en colonne D.
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof