Importations de données

T

Tommy

Guest
Salut a tous.

Voici ce que j'essais de faire. Je veux importer des données d'un autre fichier excel en se basant sur le numéro de la semaine.

Ex. Si, dans le fichier nommé ventes37.xls, en A1 : 36 donc excel ira chercher dans le fichier ventes36.xls la donnée de la case B8 et l'importera dans ventes37.xls dans la case c4... ainsi de suite (A1 : 03, donc, aller chercher dans ventes03.xls).

Mais je veux aussi que si il n'y a pas de données a importer car la cellule est vide ou le fichier n'existe pas, que l'utilisateur puisse entrer manuellement une donnée.

A date, je n'arrive a faire qu'une partie de ce que je veux avec INDIRECT.

Une idée ??
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour

voila un code de feuille qui fait cela, dans l'adresse le nom Feuil1 est à adapter en fonction de celui utilisé dans les classeurs

A+
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Chemin As String, Nom_Fichier As String, Ref_Classeur As Variant
On Error GoTo Fin
If Target.Address = Range('A1').Address Then
    Chemin = ActiveWorkbook.Path & '\\'
    Nom_Fichier = Left(ActiveWorkbook.Name, InStrRev(ActiveWorkbook.Name, '.') - 3)
    Ref_Classeur = Right('0' & Target.Value, 2)
    If Not (Dir(Chemin & Nom_Fichier & Ref_Classeur & '.xls') = '') Then
        Range('C4').Formula = '='' & Chemin & '[' & Nom_Fichier & Ref_Classeur & '.xls]Feuil1'!B8'
    Else
        Range('C4').Value = Application.InputBox(prompt:='Le classeur ' & Nom_Fichier & _
        Right('0' & Ref_Classeur, 2) & '.xls n'existe pas' & Chr(10) & 'Entrez une valeur !', _
        Default:=Range('C4').Value)
    End If
End If
Exit Sub
Fin:
End Sub

Message édité par: yeahou, à: 18/01/2006 23:47
 
T

Tommy

Guest
Parfait !!! Merci !

Et si je veux refaire ca avec d'autre case, dois-je répéter le code, ou bien je peux modifier directement le code pour le faire.

Car dans mon fichier j'entre les semaines dans les cellules de A1 a A5

Donc A1 va chercher dans B8 et retourne dans C4
A2 va chercher dans B8 et retourne dans C5
A3, dans B8, retoune dans C6... ainsi de suite

Merci encore
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour

on modifie un peu le code, mais tu aurais du le dire tout de suite.

A+

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Chemin As String, Nom_Fichier As String, Ref_Classeur As Variant
On Error GoTo Fin
Select Case Target.Address
Case Is = Range('A1').Address, Range('A2').Address, Range('A3').Address, Range('A4').Address, Range('A5').Address
    Chemin = ActiveWorkbook.Path & '\\'
    Nom_Fichier = Left(ActiveWorkbook.Name, InStrRev(ActiveWorkbook.Name, '.') - 3)
    Ref_Classeur = Right('0' & Target.Value, 2)
    If Not (Dir(Chemin & Nom_Fichier & Ref_Classeur & '.xls') = '') Then
        Range('C' & (3 + Target.Row)).Formula = '='' & Chemin & '[' & Nom_Fichier & Ref_Classeur & '.xls]Feuil1'!B8'
    Else
        Range('C' & (3 + Target.Row)).Value = Application.InputBox(prompt:='Le classeur ' & Nom_Fichier & _
        Right('0' & Ref_Classeur, 2) & '.xls n'existe pas' & Chr(10) & 'Entrez une valeur !', _
        Default:=Range('C' & (3 + Target.Row)).Value)
    End If
Case Else
End Select
Exit Sub
Fin:
End Sub
 
T

Tommy

Guest
Fantastique !

Derniere chose (et oui... encore !!!), je veux aussi utiliser ca dans un autre feuille, sauf que la c'est le contraire, au lieu de a1-a2-a3 qui va dans c4-c5-c6 ca part de d5-e5-f5 qui va dans d9-e9-f9.

J'ai essayé de modifier, mais je ne crois pas comprendre a 100% le code. Car quand j'entre une donnée dans d5, elle se copie dans d9-e9-f9... meme chose pour E5, elle se retourne tout dans d9-e9-f9

Merci encore pour l'aide, c'est tres sympa.

Désolé de pas avoir mentionner ca avant. Je croyais pouvoir trouvé par moi-meme. Mais, les joies d'etre un p'tit nouveau. Des fois j'y arrive, mais il y a des fois comme... la !
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour

j'ai modifié le code, tu peux maintenant définir facilement la cellule de destination relative à target.

A+
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Chemin As String, Nom_Fichier As String, Ref_Classeur As Variant, Cel_Dest As Range
On Error GoTo Fin
Select Case Target.Address
Case Is = Range('D5').Address, Range('E5').Address, Range('F5').Address
    
    'définition de la cellule cible par rapport à Target
    Set Cel_Dest = Cells(Target.Row + 4, Target.Column)
    
    Chemin = ActiveWorkbook.Path & '\\'
    Nom_Fichier = Left(ActiveWorkbook.Name, InStrRev(ActiveWorkbook.Name, '.') - 3)
    Ref_Classeur = Right('0' & Target.Value, 2)
    If Not (Dir(Chemin & Nom_Fichier & Ref_Classeur & '.xls') = '') Then
        Cel_Dest.Formula = '='' & Chemin & '[' & Nom_Fichier & Ref_Classeur & '.xls]Feuil1'!B8'
    Else
        Cel_Dest.Value = Application.InputBox(prompt:='Le classeur ' & Nom_Fichier & _
        Right('0' & Ref_Classeur, 2) & '.xls n'existe pas' & Chr(10) & 'Entrez une valeur !', _
        Default:=Cel_Dest)
    End If
Case Else
End Select
Exit Sub
Fin:
End Sub
 
T

Tommy

Guest
Salut encore Yeahou.

J'éprouve un p'tit probleme avec mon code... y'a un calcul circulaire qui se fait. J'y ai trouvé une solution.. mais j'ai pas l'idée de comment on fait. J'explique mon probleme ici.

Lien supprimé

Merci encore

Tommy
 

Discussions similaires

Réponses
3
Affichages
164

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 461
dernier inscrit
dams94