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 !
Je souhaite aller récupérer des données depuis un fichier source dans un autre fichier à choisir à partir d'un chemin.
En l'occurrence toutes les cellules de le colonne A du fichier 2.
Ma problématique est de spécifier le nom de la feuille du fichier numéro 2 où aller chercher ces éléments.
puis de coller ces valeurs dans mon fichier d'origine.
Ma macro bloque sur la ligne Sheets("Suivi priorités").Activate (en vert dans le code).
Comment puis je forcer l'ouverture du fichier 2 sur cette feuille spécifique ?
J'ai aussi essayé le code suivant (ne fonctionne pas non plus):
Workbooks.Open Filename:=CheminFichier
ActiveWorkbook.Sheets("Suivi priorités").[A].EntireRow.Copy ThisWorkbook.Sheets("Priorités semaine écoulée").[A1]
Merci d'avance pour vos conseils
cORDIALEMENT
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
'propose chemin d'accès a
CheminSrc = "C:\Mon chemin"
ChDrive "C"
ChDir CheminSrc
'Ouverture d'une boite de dialogue
CheminFichier = Application.GetOpenFilename
'S'il y a eu selection de fichier
If CheminFichier <> False Then
'J'ouvre le fichier
Workbooks.Open Filename:=CheminFichier Sheets("Suivi priorités").Activate
'je demande à coller les valeurs de la colonne A de fichier 2 dans A1 du fichier d'originr
ActiveWorkbook.Sheets(1).[A].EntireRow.Copy ThisWorkbook.Sheets("Priorités semaine écoulée").[A1]
End If
Application.ScreenUpdating = True
End Sub
en faite les deux classeur excel sont ouvert, donc il faut travailler en objet.
j'ai récupérer le nom du classeur (ou les informations sont stocké et la feuille)
une fois mise en mémoire je fais la suite du code
****************************************************************
ActiveWorkbook.Sheets(1).[A].EntireRow.Copy ThisWorkbook.Sheets("Priorités semaine écoulée").[A1]
Ou ici
le programme ne c'est pas reconnaitre la source car pas de chemin / ActiveWorkbook.Sheets(1) ou ActiveSheet.Columns(1)
C'est a dire qu'elle classeur activé de qu'elle feuille ?
d'où
x = Split(CheminFichier, "\")
y = UBound(x)
msgbox x(y) ' ici pour vous le nom du classeur que vous avez selectionner
puis mise en mémoire du classeur et de la feuille avec c'est instruction
Dim wskChoisie As Workbook ' definir une variable de type de class classeur
Dim wsksSuivi As Worksheet ' definir une variable de type de class feuille
puis initialisation des variable pour mise en mémoire
Set wskChoisie = Workbooks(x(y)) ' si écrit en dur on remplace x(y) par le nom de votre classeur
' Set wskChoisie = Workbooks("TEST MACRO SUIVI PRIORITE fichier 2")
si dessous le nom de la feuille écrit en dur ("Suivi priorités") qui peux etre aussi remplacer par une variable
Set wsksSuivi = wskChoisie.Worksheets("Suivi priorités")
soit maintenant ceci "wskChoisie" contient l'adresse de votre classeur et de votre feuille
donc si vous choisissais la cellule de C3 de cette feuille du classeur vous lui indiquer l'adresse
wsksSuivi.[c3] = "toto" ici vous écrivait toto dans la cellule c3 du classeur TEST MACRO SUIVI PRIORITE fichier 2 de
la feuille Suivi priorités
code ci dessous :
VB:
Private Sub CommandButton1_Click()
'extractions mensuelles
Application.ScreenUpdating = False
'propose chemin d'accès au répertoire stats brutes galaxie
CheminSrc = "G:\SUIVI DES STOCK\Fichiers\Stats de Flux par circuit\2013\Semaine"
ChDrive "G"
ChDir CheminSrc
'Ouverture d'une boite de dialogue
CheminFichier = Application.GetOpenFilename
'S'il y a eu selection de fichier
If CheminFichier <> False Then
'J'ouvre le fichier
Workbooks.Open Filename:=CheminFichier
Dim wskChoisie As Workbook
Dim wsksSuivi As Worksheet
x = Split(CheminFichier, "\")
y = UBound(x)
Set wskChoisie = Workbooks(x(y))
Set wsksSuivi = wskChoisie.Worksheets("Suivi priorités")
'plus besoin Sheets("Suivi priorités").Activate
'ActiveWorkbook.Sheets(1) = remplacer par wsksSuivi
' Remplacer [A] cela par ceci :
' Set A = Range(Cells(1, 1), Cells(Cells(65536, 1).End(xlUp).Row, 1))
' soit:
' a la place de [A]
' ci dessous ceci
' wsksSuivi.Range(A.Address)
' qui est equivalent a la colonne A1 a A65536 (c'est la partie Objet)
' Equivalent a [A1:A65536]
Set A = Range(Cells(1, 1), Cells(Cells(65536, 1).End(xlUp).Row, 1))
wsksSuivi.Range(A.Address).EntireRow.Copy ThisWorkbook.Sheets("Priorités semaine écoulée").[A1]
Je viens de tester. Cela fonctionne nickel.
Le problème c'est qu'il y a ds filtres sur mon fichier 2. Le copier coller ne tient pas compte des lignes masquées et cela ne correspond plus au moment du "coller".
Est-il possible de retirer le filtre sur le fichier 2 avant de sélectionner la colonne ou de préciser dans le code de coller toutes les données y compris celles qui sont masquées?
en faite les deux classeur excel sont ouvert, donc il faut travailler en objet.
j'ai récupérer le nom du classeur (ou les informations sont stocké et la feuille)
une fois mise en mémoire je fais la suite du code
code ci dessous :
VB:
Private Sub CommandButton1_Click()
'extractions mensuelles
Application.ScreenUpdating = False
'propose chemin d'accès au répertoire stats brutes galaxie
CheminSrc = "G:\SUIVI DES STOCK\Fichiers\Stats de Flux par circuit\2013\Semaine"
ChDrive "G"
ChDir CheminSrc
'Ouverture d'une boite de dialogue
CheminFichier = Application.GetOpenFilename
'S'il y a eu selection de fichier
If CheminFichier <> False Then
'J'ouvre le fichier
Workbooks.Open Filename:=CheminFichier
Dim wskChoisie As Workbook
Dim wsksSuivi As Worksheet
x = Split(CheminFichier, "\")
y = UBound(x)
Set wskChoisie = Workbooks(x(y))
Set wsksSuivi = wskChoisie.Worksheets("Suivi priorités")
'plus besoin Sheets("Suivi priorités").Activate
'ActiveWorkbook.Sheets(1) = remplacer par wsksSuivi
' Remplacer [A] cela par ceci :
' Set A = Range(Cells(1 ,1), Cells(Cells(65536, 1).End(xlUp).Row, Cells(1, 256).End(xlToLeft).Column))
' soit:
' a la place de [A]
' ci dessous ceci
' wsksSuivi.Range(A.Address)
' qui est equivalent a la colonne A1 a A65536 (c'est la partie Objet)
' Equivalent a [A1:A65536]
Set A = Range(Cells(3, 1), Cells(Cells(65536, 1).End(xlUp).Row, Cells(3, 256).End(xlToLeft).Column))
wsksSuivi.Range(A.Address).EntireRow.Copy ThisWorkbook.Sheets("Priorités semaine écoulée").[A1]
End If
J'ai l'impression que cela insère la copie de la feuille complète. Je souhaite uniquement coller les valeurs de la colonne A sans tenir compte des lignes masquées.
Merci quand même pour ce bout de code qui reste fort intéressant
Cordialement
en faite les deux classeur excel sont ouvert, donc il faut travailler en objet.
j'ai récupérer le nom du classeur (ou les informations sont stocké et la feuille)
Private Sub CommandButton1_Click()
'extractions mensuelles
Application.ScreenUpdating = False
'propose chemin d'accès au répertoire stats brutes galaxie
CheminSrc = "G:\SUIVI DES STOCK\Fichiers\Stats de Flux par circuit\2013\Semaine"
ChDrive "G"
ChDir CheminSrc
'Ouverture d'une boite de dialogue
CheminFichier = Application.GetOpenFilename
'S'il y a eu selection de fichier
If CheminFichier <> False Then
'J'ouvre le fichier
Workbooks.Open Filename:=CheminFichier
Dim wskChoisie As Workbook
Dim wsksSuivi As Worksheet
x = Split(CheminFichier, "\")
y = UBound(x)
Set wskChoisie = Workbooks(x(y))
Set wsksSuivi = wskChoisie.Worksheets("Suivi priorités")
Set A = Range(Cells(1, 1), Cells(Cells(65536, 1).End(xlUp).Row, 1))
wsksSuivi.Range(A.Address).EntireRow.Copy ThisWorkbook.Sheets("Priorités semaine écoulée").[A1]
End If
End Sub
- 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