Importer des données de feuilles (mais pas tout)

Carnage029

XLDnaute Occasionnel
Bonjour à tous,

Je viens de m'inscrire sur le site, et j'avoue avoir déjà trouvé quelques réponses à des problèmes précédents... (pas bien de pas s'inscrire :D mais voilà le mal réparé).

Vu que j'ai un faible niveau en VBA (pour ne pas dire inexistant) je me permet de vous donner un lien vers mon fichier...

Pour facilite la lecture, il y'a deux feuilles qui normalement ne doivent pas être dans ce classeur, c'est celles à importer.

En fait je souhaiterai donc qu'en allant chercher les deux fichiers (avec une fenêtre de navigation de mes documents), la macro (car je pense qu'il faut faire une macro) prenne les lignes de factures, les ajoutes au document "Balance" et remplisse la colonne J (et la case C13 et C14) avec la date qui convient (en prenant toujours la date t plus récente que datet1)

Le must serait que le nom de l'entreprise, la devise se mette automatiquement a jour avec l'importation des deux fichiers, et que si le nom diffère ou la devise (ou les deux) entre les deux fichiers importés, il y'ai un message d'erreur...


Voilà, j'ai cherché quelques temps une solution à mon problème, et après avori lu les règles du forum, je me suis permis de poster ici, sans mettre urgent ou autre ;) :p de toute façon tout le monde ici est bénévole :)


Un immense merci d'avance

PS : je viens de m'apercevoir que le fichier était un peu gros, je l'ai uplodé sur cijoint


http://cjoint.com/?BEkkGlYgP3m
 
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Importer des données de feuilles (mais pas tout)

Bonsoir,

Suite à notre échange par MP, j'ai jeté un oeil au fichier ... Je pense que pour les besoins ici, tu aurais pu supprimer les feuilles "impression ...". De même, en ne conservant les formules dans la feuille "Balance", que sur une centaine de lignes, on allège considérablement le fichier (ce qui t'aurait sans doute permis de le déposer ici)
Une feuille masquée et dont le contenu est protégé par mot de passe nous empêche de gérer les messages d'erreurs qui apparaissent quand on supprime certaines lignes ... Pas bien non plus, ça :rolleyes:

Bref, avec ce que j'ai cru comprendre, une proposition dans ton fichier "allégé" pour tester la proposition, j'ai sorti les feuilles "AAA ...." et ai enregistré chacune d'elle dans des fichiers séparés ... que je n'ai pas remis ici.
La macro affiche donc la boîte de dialogue d'ouverture de fichier. Tu ouvres d'abord celui du 4/5/12. La boîte de dialogue se réaffiche ensuite et tu sélectionnes ton second fichier. Le nom d'entreprise et la devise pour les 2 fichiers sont comparés et en cas de non-concordance la macro s'arrête (les 2 fichiers sont fermés au passage). Dans le cas contraire, les infos des colonnes A à I sont ensuite copiées les unes sous les autres dans ta feuille "Balance" (j'ai laissé une copie de ta feuille "Balance" de départ voir "balance orig")

Je propose que tu voies déjà jusque là si c'est OK, on verra ensuite ce qui manquerait! Le code est dans un module nommé "Importation".
 

Pièces jointes

  • fichier-frottement.xlsm
    182.4 KB · Affichages: 52

Carnage029

XLDnaute Occasionnel
Re : Importer des données de feuilles (mais pas tout)

Je te remercie énormément, je suis pas au travail là, mais je vais essayer de me débrouiller pour récupérer les fichiers qui vont bien,

Je te remercie grandement,

Je test et je me retourne vers toi

Petite question HS : ou as tu appris a programmer en VBA, je sais coder en C, C++, C# et java, mais j'ai ÉNORMÉMENT de mal à apprendre le VBA...
 

Carnage029

XLDnaute Occasionnel
Re : Importer des données de feuilles (mais pas tout)

Bon, je viens de tester, l'importation est très bien c'est ce que je souhaitais à deux détails près, la date en colonne J ne se remplit pas en fonction du ficher duquel la ligne provient (information en B7 du fichier importé), et aussi le nom de l'entreprise ne s'importe pas tout comme la devise (informations présentes en B6 et B9)

Je ne sais pas si je me fais comprendre, mais quoiqu'il arrive, je te remercie encore :)
 

Modeste

XLDnaute Barbatruc
Re : Importer des données de feuilles (mais pas tout)

Bonjour,

Ci-dessous, le code modifié (il remplace donc la version précédente). Cette version-ci me semble tenir compte des ajouts demandés. Lors de la copie des données des 2 autres fichiers, j'ai conservé le même ordre que dans ta feuille "Balance" (originale), à savoir les données de date t-1, puis les données de date t (s'il y a une modif à faire à ce niveau, tu devrais pouvoir la faire ... et en cas de question, tu nous diras :))
VB:
Sub import()
Application.ScreenUpdating = False
nomf = Application.Dialogs(xlDialogOpen).Show 'sélection fichier Date t
If nomf = True Then
    Set fichDateT = ActiveWorkbook
Else
    MsgBox "Pas de fichier sélectionné." & vbCr & "Fin de programme!"
    Exit Sub
End If

nomf2 = Application.Dialogs(xlDialogOpen).Show 'sélection fichier Date t-1
If nomf2 = True Then
    Set fichDateAnt = ActiveWorkbook
Else
    MsgBox "Pas de fichier sélectionné." & vbCr & "Fin de programme!"
    fichDateT.Close
    Exit Sub
End If

If fichDateT.Sheets(1).[B6] <> fichDateAnt.Sheets(1).[B6] Or _
    fichDateT.Sheets(1).[B9] <> fichDateAnt.Sheets(1).[B9] Then
        MsgBox "Entreprise et/ou devise différentes"
    fichDateT.Close
    fichDateAnt.Close
    Exit Sub
Else
    ThisWorkbook.Sheets("Balance").Range("D2") = fichDateT.Sheets(1).[B6] 'recopier nom client
    ThisWorkbook.Sheets("Balance").Range("D6") = fichDateT.Sheets(1).[B9] 'recopier devise
    ThisWorkbook.Sheets("Balance").Range("C13") = fichDateT.Sheets(1).[B7] 'recopier date t
    ThisWorkbook.Sheets("Balance").Range("C14") = fichDateAnt.Sheets(1).[B7] 'recopier date t-1
    With fichDateAnt.Sheets(1)
        .Range("A16:I" & .Range("A" & Rows.Count).End(xlUp).Row).Copy ThisWorkbook.Sheets("Balance").Range("A50000").End(xlUp).Offset(1, 0)
        derligne = ThisWorkbook.Sheets("Balance").Range("A50000").End(xlUp).Row 'repérer dernière ligne
        ThisWorkbook.Sheets("Balance").Range("J25:J" & derligne).Value = .[B7] 'copier date t-1 en colonne J
    End With
    With fichDateT.Sheets(1)
        .Range("A16:I" & .Range("A" & Rows.Count).End(xlUp).Row).Copy ThisWorkbook.Sheets("Balance").Range("A50000").End(xlUp).Offset(1, 0)
        derligne2 = ThisWorkbook.Sheets("Balance").Range("A50000").End(xlUp).Row 'repérer nouvelle dernière ligne
        ThisWorkbook.Sheets("Balance").Range("J" & derligne + 1 & ":J" & derligne2).Value = .[B7] 'copier date t en colonne J
    End With

End If

fichDateT.Close
fichDateAnt.Close
Application.ScreenUpdating = True
End Sub

Pour les différences entre C, C++ et VBA, il suffit de remplacer "scanf" par "inputbox" et "printf" par "Msgbox" ... le reste c'est pareil ... ou presque ;);). Sérieusement, je ne peux pas dire que c'est surtout ici que j'ai appris (ce serait faire injure aux vrais connaisseurs dont je me suis -souvent mal- inspiré)

Bon travail (... et tu n'oublies pas de nous dire ce que tout ça donne!?)
 

Carnage029

XLDnaute Occasionnel
Re : Importer des données de feuilles (mais pas tout)

Parfait, tout marche niquel, j'aurais juste une petite demande mais si tu n'as pas le temps je comprendrais tout à fait :)

J'ai vu que l'ordre dans lequel on importe le fichier datet ou datet1 est important, hors on sait que la datet est toujours supérieur à la datet1, serait t'il possible que l'ordre d'importation entre les deux fichiers soit sans importance ? (en gros qu'il sache que datet est toujours supérieur à datet1) ?

Encore merci :)
 

Modeste

XLDnaute Barbatruc
Re : Importer des données de feuilles (mais pas tout)

Bonjour Carnage029,


Je n'ai pas les fichiers sous la main (et pas d'accès à cjoint.com, ici) ... il me semble que ce qui suit devrait fonctionner
VB:
Sub import()
Application.ScreenUpdating = False
nomf = Application.Dialogs(xlDialogOpen).Show 'sélection fichier Date t
If nomf = True Then
    fichierA = ActiveWorkbook.Name
    'Set fichDateT = ActiveWorkbook
Else
    MsgBox "Pas de fichier sélectionné." & vbCr & "Fin de programme!"
    Exit Sub
End If

nomf2 = Application.Dialogs(xlDialogOpen).Show 'sélection fichier Date t-1
If nomf2 = True Then
    fichierB = ActiveWorkbook.Name
    'Set fichDateAnt = ActiveWorkbook
Else
    MsgBox "Pas de fichier sélectionné." & vbCr & "Fin de programme!"
    Workbooks(fichierA).Close
    Exit Sub
End If

If Workbooks(fichierA).Sheets(1).[B6] <> Workbooks(fichierB).Sheets(1).[B6] Or _
    Workbooks(fichierA).Sheets(1).[B9] <> Workbooks(fichierB).Sheets(1).[B9] Then
        MsgBox "Entreprise et/ou devise différentes"
    Workbooks(fichierA).Close
    Workbooks(fichierB).Close
    Exit Sub
Else
    '  **** code ajouté
    If Workbooks(fichierA).Sheets(1).[B7] > Workbooks(fichierB).Sheets(1).[B7] Then
        Set fichDateT = Workbooks(fichierA)
        Set fichDateAnt = Workbooks(fichierB)
    Else
        Set fichDateT = Workbooks(fichierB)
        Set fichDateAnt = Workbooks(fichierA)
    End If
    '  **** fin ajout 
    ThisWorkbook.Sheets("Balance").Range("D2") = fichDateT.Sheets(1).[B6] 'recopier nom client
    ThisWorkbook.Sheets("Balance").Range("D6") = fichDateT.Sheets(1).[B9] 'recopier devise
    ThisWorkbook.Sheets("Balance").Range("C13") = fichDateT.Sheets(1).[B7] 'recopier date t
    ThisWorkbook.Sheets("Balance").Range("C14") = fichDateAnt.Sheets(1).[B7] 'recopier date t-1
    With fichDateAnt.Sheets(1)
        .Range("A16:I" & .Range("A" & Rows.Count).End(xlUp).Row).Copy ThisWorkbook.Sheets("Balance").Range("A50000").End(xlUp).Offset(1, 0)
        derligne = ThisWorkbook.Sheets("Balance").Range("A50000").End(xlUp).Row 'repérer dernière ligne
       ThisWorkbook.Sheets("Balance").Range("J25:J" & derligne).Value = .[B7] 'copier date t-1 en colonne J
   End With
    With fichDateT.Sheets(1)
        .Range("A16:I" & .Range("A" & Rows.Count).End(xlUp).Row).Copy ThisWorkbook.Sheets("Balance").Range("A50000").End(xlUp).Offset(1, 0)
        derligne2 = ThisWorkbook.Sheets("Balance").Range("A50000").End(xlUp).Row 'repérer nouvelle dernière ligne
       ThisWorkbook.Sheets("Balance").Range("J" & derligne + 1 & ":J" & derligne2).Value = .[B7] 'copier date t en colonne J
   End With

End If

fichDateT.Close
fichDateAnt.Close
Application.ScreenUpdating = True
End Sub
 

Discussions similaires

Réponses
2
Affichages
610

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 699
Messages
2 091 109
Membres
104 764
dernier inscrit
lelefoot