Récupérer les lignes d'un fichier excel et les placer dans un autre

manu

XLDnaute Nouveau
Bonjour, j'ai toujours trouvé une réponse sur ce site donc je me tourne vers vous une fois de plus.

J'aimerais à partir de mon fichier, allé dans un autre afin d'y récupérer des lignes d'un tableau. La difficulté qui se rajoute est que le tableau dans lequel je récupère ces lignes à plusieurs onglet et le choix de l'onglet devra se faire par rapport à son nom. Pour etre plus clair, dans mon fichier, on rentre le nom de l'onglet et en fonction de ce qui est entré, on va dans l'autre document dans l'onglet correspondant pour récupérer les lignes du tableau. Chaque tableau a aussi un nombre de ligne diférent mais commence tous à la ligne 3. Donc je sais pas comment procéder, et comment réaliser un balayage de ce tableau afin de récupérer toutes les lignes.
J'èspère avoir été clair en tout cas j'ai essayé :)
Merci d'avance
 

bond

XLDnaute Occasionnel
Re : Récupérer les lignes d'un fichier excel et les placer dans un autre

J'èspère avoir été clair en tout cas j'ai essayé
A toi de juger, voici le code d'un jeu avec Classeur1(Feuil1) et Classeur2 (Feuil1, Feuil2, Feuil3,...) :
Code:
Option Explicit

Sub Macro()
'''''''''''''''''''''''''''''''''''
' Macro Dans Module1 de Classeur1 '
'''''''''''''''''''''''''''''''''''
Range("A3:" & Selection.End(xlDown).Address).EntireRow.ClearContents 'bond : Vide la zone de réception
Dim NomOnglet As String
    NomOnglet = ThisWorkbook.Sheets("Feuil1").Range("A1") 'dans mon fichier, on rentre le nom de l'onglet
    
    Windows("Classeur2").Activate: Sheets(NomOnglet).Select 'J'aimerais à partir de mon fichier, allé dans un autre
    Range("A3:" & Selection.End(xlDown).Address).EntireRow.Copy 'Chaque tableau a aussi un nombre de ligne diférent mais commence tous à la ligne 3. Donc je sais pas comment procéder, et comment réaliser un balayage de ce tableau
    ThisWorkbook.Activate: Range("A3").Select 'récupérer toutes les lignes. bond : hypothèse pour "récupérer"
    ActiveSheet.Paste
End Sub
 

manu

XLDnaute Nouveau
Re : Récupérer les lignes d'un fichier excel et les placer dans un autre

Quand je dis dans un autre fichier il s'agit d''ouvrir un dossier et d'ouvrir un fichier excel qui s'y trouve.

Moi j'ai fais le code suivant:

Sub importerx91()

Dim Chemin$, Classeur$
Chemin = "I:\DDIV-DIESE\65690\Mulets\Références Cablage\" 'indiquer le chemin
Classeur = Dir(Chemin & "references cablage.xls")

With Workbooks.Open(Chemin & "\" & Classeur)
With .Sheets(1).Range("G3")
.Copy ThisWorkbook.Sheets(1).Range("A30")
End With

.Close False

End With
Classeur = Dir

End Sub

Le problème c'est qu'il reste à tourner en boucle et se bloque.
 

bond

XLDnaute Occasionnel
Re : Récupérer les lignes d'un fichier excel et les placer dans un autre

J'ai du mal à voir la correspondance entre ta demande initiale et ton post #3 :confused:

Le problème c'est qu'il reste à tourner en boucle et se bloque.
Je ne vois pas de boucle dans ton code :confused:
As tu fait un run pas à pas pour déceler où il 'bloque' ?
 

manu

XLDnaute Nouveau
Re : Récupérer les lignes d'un fichier excel et les placer dans un autre

Désolé, j'ai mal présenté le problème :)

Voici le code qui appel cette fonction:

Private Sub Worksheet_Change(ByVal Target As Range)


If Range("I30").Value = "" Then Exit Sub

If Range("I30").Value = "X91" Then
importerx91
End If

End Sub


En faite, la macro reste prise dans le If car la valeur de la cellule reste X91. Je sais pas comment coder pour qu'il le fasse qu'une seule fois, c'est à dire au moment ou la cellule prend la valeur.
 

Pierrot93

XLDnaute Barbatruc
Re : Récupérer les lignes d'un fichier excel et les placer dans un autre

Bonjour,

regarde ceci, si j'ai bien compris :

dans un module standard :
Code:
Option Explicit
Dim b As Boolean

dans le module "thisworkbook" :
Code:
Option Explicit
Private Sub Workbook_Open()
If Sheets("nomfeuille").Range("I30").Value = "X91" Then b = True
End Sub

dans le module de la feuille concernée :
Code:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If b Or Range("I30").Value = "" Then Exit Sub
If Range("I30").Value = "X91" Then
    b = True
    importerx91
End If
End Sub

bonne journée
@+
 

manu

XLDnaute Nouveau
Re : Récupérer les lignes d'un fichier excel et les placer dans un autre

Merci, maintenant il m'indique un problème sur la fonction Insert du code importerX91.

Voici mon code:

Sub importerx91()

Dim Chemin$, Classeur$
Chemin = "I:\DDIV-DIESE\65690\Mulets\Références Cablage\" 'indiquer le chemin
Classeur = Dir(Chemin & "\*.xls")
Do While Classeur <> Empty
With Workbooks.Open(Chemin & "\" & Classeur)

With .Sheets(1).Range("G3")
.Insert ThisWorkbook.Sheets(1).Range("A30")
End With


.Close False

End With
Classeur = Dir
Loop
Feuil1.Select


End Sub
 

Pièces jointes

  • erreur.JPG
    erreur.JPG
    10.9 KB · Affichages: 71
  • erreur.JPG
    erreur.JPG
    10.9 KB · Affichages: 79
  • erreur.JPG
    erreur.JPG
    10.9 KB · Affichages: 81

Pierrot93

XLDnaute Barbatruc
Re : Récupérer les lignes d'un fichier excel et les placer dans un autre

Re,

aucun rapport avec le code que je t'ai donné.... par contre, pour ton info, la méthode "insert" attend un argument "xlshift" et non une valeur de cellule...
Code:
Cette méthode insère une cellule ou une plage de cellules dans la feuille de calcul ou la feuille de macro et déplace les autres cellules pour augmenter l'espace disponible.

expression.Insert(Shift, CopyOrigin)
expression      Obligatoire. Expression qui renvoie un objet Range.

Shift     Argument de type Variant facultatif.  Indique dans quel sens les cellules doivent être déplacées. Il peut s'agir de l'une des constantes XlInsertShiftDirection suivantes : xlShiftToRight ou xlShiftDown. Si vous ne spécifiez pas cet argument, Microsoft Excel agit en fonction de la forme de la plage.

A noter également que le 2ème bloc with n'a pas lieu d'être, on pourrait écrire :
Code:
.Sheets(1).Range("G3").Insert


bon après midi
@+
 

manu

XLDnaute Nouveau
Re : Récupérer les lignes d'un fichier excel et les placer dans un autre

Le code que tu m'a fourni permet d'apler cette fonction sous condition, elle a bien été rajouter à ma macro, la il s'agit pour moi de copier des cellules et de les insérer à un endroit bien précis, et non de les coller.
 

Pierrot93

XLDnaute Barbatruc
Re : Récupérer les lignes d'un fichier excel et les placer dans un autre

Re,

pour copier une cellule et l'insérer ensuite... à adapter à ton projet ....
Code:
Range("A10").Copy
Range("A20").Insert xlShiftDown

il y a sand doute lieu de préciser les objets classeur et feuille si ceux ci ne sont pas actifs...
 

manu

XLDnaute Nouveau
Re : Récupérer les lignes d'un fichier excel et les placer dans un autre

Bonjour à tous de nouveu, merci Pierrot 93 pour ta réponse, j'ai réussi à insérer les colonnes voulu, même si c'est pas aussi propre que je l'espérais étant donné que j'ai des cellules fusionnées. Je pense refaire mon tableau pour y remédier. Je te laisse les deux fichiers sur lesquels je travaille. Le bouton qui pose problème est celui "ajouter câblages".
Encore merci
 

Pièces jointes

  • formalité.xls
    84 KB · Affichages: 53
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 949
Membres
101 852
dernier inscrit
dthi16088