cs_orangeroad
Messages postés12Date d'inscriptionjeudi 21 décembre 2006StatutMembreDernière intervention26 janvier 2007
-
4 janv. 2007 à 06:23
cs_orangeroad
Messages postés12Date d'inscriptionjeudi 21 décembre 2006StatutMembreDernière intervention26 janvier 2007
-
5 janv. 2007 à 06:38
Bonjour à tous,
<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
Je débute avec l’utilisation de VB sous Excel et j’ai besoin de votre aide.
Je dois créer un fichier Excel qui doit remonter à l’aide d’une macro toutes les lignes de la première feuille de n autres fichiers Excel.
Pour expliquer la situation, des personnes renseignent en fin de journée leur propre fichier et le chef d’équipe doit en lançant la macro de son fichier récupérer toutes les entrées des fichiers des agents.
Bien sûr toutes les feuilles des fichiers ont une mise en forme identique.
J’ai trouvé ce script qui fonctionne très bien pour copier toutes les lignes d’une feuille à un autre feuille d’un même classeur :
For Lig_S = F_S.Range("A65536").End(xlUp).Row To 1 Step -1
'Pour Ligne source = dernière non vide en A jusqu'à la ligne 1
'en passant à la ligne précédente par décrémentation (-1)
'Quand la valeur est inférieure à 1, on passe à laligne suivant Next Lig_S
F_S.Rows(Lig_S).Copy Destination:=F_D.Rows(Lig_D)
'on copie la ligne source sur la ligne destination
Lig_D = Lig_D + 1
'on passe à la ligne destination suivante
Next Lig_S
'Retour à l'instruction For Lig_S....
MsgBox ("Fin de transfert")
End Sub
J’aimerai savoir s’il est possible de le modifier pour qu’il copie toutes les lignes d’une feuille d’un autre fichier vers la feuille du fichier principal.
Qu'il fasse la même chose, mais qu'il aille récupérer les lignes sources dans un autre fichier.
Imaginons qu’il y ait 4 fichiers d’agent, peut-on faire 4 boucles à la suite pour aller chercher les lignes dans chaque fichier ?
Le but de cette organisation est que chaque agent ne puisse accéder et modifier que son fichier, ce qui est facile à mettre en place.
Et que le chef d'équipe en ouvrant son fichier puisse voir toutes les lignes saisies.
Merci d'avance de l'aide que vous pourrez m'apporter.
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 4 janv. 2007 à 09:20
SAlut,
N'importe quelle feuille peu etre atteinte avec une syntaxe du style.
Dim ClasseurPrincipal As Workbook
Dim NomClasseur As Workbook
'Memorise le classeur du chef d'équipe
Set ClasseurPrincipal = ActiveWorkbook
'OUvre le classeur d'un aute
Set NomClasseur = Application.Workbooks.Open("C:\B.Xls")
'Devrait Copier tout les cellule de la feuille 1
NomClasseur.Worksheets(1).Cells.Copy
cs_orangeroad
Messages postés12Date d'inscriptionjeudi 21 décembre 2006StatutMembreDernière intervention26 janvier 2007 5 janv. 2007 à 03:56
Merci pour ta réponse. ;-)
Mais je ne vois pas très bien où insérer dans mon code.
La méthode pour coller les lignes est différente et si j'ouvre le classeur "source" pour y copier des lignes, il faudra que je réouvre ensuite le classeur d'origine pour les copier, non ?
Car sur ce code F_S et F_D sont dans le même classeur, ce qui ne sera pas le cas dans ce que je veux faire.
cs_orangeroad
Messages postés12Date d'inscriptionjeudi 21 décembre 2006StatutMembreDernière intervention26 janvier 2007 5 janv. 2007 à 05:25
Jrivet,
En fait ton code utilisé seul permet effectivement de copier toutes les cellules d'un autre classeur.
Mais il ne fait tout copier en bloc, ce qui marche quand il s'agit de faire une copie d'un fichier à un autre, mais pas quand il s'agit de copier plusieurs classeurs.
Le code que j'ai posté vérifie s'il y a des lignes présentes et commence à le première ligne vide.
Comme il y a plusieurs copies à faire, je veux que les lignes copiées se rajoutent à la suite de cellles déjà présentes, ce que fait mon code.
Par contre je ne sais pas comment le modifier pour qu'il aille copier les lignes dans un fichier différent et revenir ensuite au principal.
Je débute en VB alors ce n'est pas facile de tout comprendre.
cs_orangeroad
Messages postés12Date d'inscriptionjeudi 21 décembre 2006StatutMembreDernière intervention26 janvier 2007 5 janv. 2007 à 06:38
Jrivet,
Merci beaucoup de ton aide j'ai réussi à utiliser ton code !
C'était plus simple que je ne le pensais finalement.
Sub test()
Dim F_S As Worksheet 'Feuille source
Dim F_D As Worksheet 'Feuille Destination
Dim Lig_S As Long 'Ligne source
Dim Lig_D As Long 'Ligne destination
Dim ClasseurPrincipal As Workbook
Dim NomClasseur As Workbook
'Memorise le classeur du chef d'équipe
Set ClasseurPrincipal = ActiveWorkbook
'Ouvre le premier classeur source
Set NomClasseur = Application.Workbooks.Open("C:\source1.xls")
'MEI **********************************************
'Définition des feuilles
Set F_D = ClasseurPrincipal.Sheets("Feuil1") 'feuille destination, c'est à dire la Feuil1 du classeur ouvert
Set F_S = NomClasseur.Sheets("Feuil1") 'feuille source, c'est à dire la Feuil1 du classeur "source1.xls"
'définition des lignes
Lig_D = F_D.Range("A65536").End(xlUp).Row + 1
'Ligne destination est la première de G vide
For Lig_S = F_S.Range("A65536").End(xlUp).Row To 4 Step -1
'Pour Ligne source = dernière non vide en A jusqu'à la ligne 4
'en passant à la ligne précédente par décrémentation (-1)
'Quand la valeur est inférieure à 1, on passe à laligne suivant Next Lig_S
F_S.Rows(Lig_S).Copy Destination:=F_D.Rows(Lig_D)
'on copie la ligne source sur la ligne destination
Lig_D = Lig_D + 1
'on passe à la ligne destination suivante
Next Lig_S
'Retour à l'instruction For Lig_S...
NomClasseur.Close
'On ferme le classeur "source1.xls" sinon il reste ouvert
'On répète l'opération pour le deuxième classseur source.
Set NomClasseur = Application.Workbooks.Open("C:\source2.xls")
'Définition des feuilles
Set F_D = ClasseurPrincipal.Sheets("Feuil1") 'feuille destination
Set F_S = NomClasseur.Sheets("Feuil1") 'feuille source
'définition des lignes
Lig_D = F_D.Range("A65536").End(xlUp).Row + 1
'Ligne destination est la première de G vide
For Lig_S = F_S.Range("A65536").End(xlUp).Row To 4 Step -1
'Pour Ligne source = dernière non vide en A jusqu'à la ligne 4
'en passant à la ligne précédente par décrémentation (-1)
'Quand la valeur est inférieure à 1, on passe à laligne suivantNext Lig_S
F_S.Rows(Lig_S).Copy Destination:=F_D.Rows(Lig_D)
'on copie la ligne source sur la ligne destination
Lig_D = Lig_D + 1
'on passe à la ligne destination suivante
Next Lig_S
'Retour à l'instruction For Lig_S....
NomClasseur.Close
'On ferme le classeur "source1.xls" sinon il reste ouvert
MsgBox ("Fin de transfert")
'on avertit que c'est fini
End Sub
Voilà , on peut rajouter autant de boucle qu'il y a de classeurs source.
Et le classeur principal contient toute les lignes des classeurs source comme je voulais.