Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Importations de données

  • Initiateur de la discussion Initiateur de la discussion Tommy
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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 ??
 
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
 
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
 
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
 
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 !
 
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
7
Affichages
689
Réponses
15
Affichages
843
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…