Ajout données autres feuilles à la suite de la précédente

FMAILYS - 23 nov. 2012 à 23:14
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 26 nov. 2012 à 09:57
Bonsoir

J'ai fait ce code suivant pour rapatrier les données d'une feuille dans la feuille d'un classeur
Si je veux en rapatrier d'autres, je souhaite qu'elles se mettent à la suite

Sub Regroupement() 
 'J'écris mes en-têtes de colonnes 
 Range("a1") = "Matricule" 
 Range("B1") = "Nom" 
 Range("C1") = "Prénom" 
 Range("D1") = "Section AT" 
 Range("E1") = "Code Risque AT" 
 Range("F1") = "Code Risque Bureau" 
 Range("G1") = "Taux AT" 
 Range("H1") = "Brut SS" 
 Range("I1") = "Plaf SS" 
 Range("J1") = "csg/crds sur revenus d'activité" 
 Range("K1") = "CSG/CRDS sur revenus de remplacement" 
 Range("L1") = "Base Brute Fiscal" 
 Range("M1") = "Net Imposable" 
 Range("N1") = "Avantages Nat" 
 Range("O1") = "Frais Prof" 
 Range("P1") = "Epargne Salariale" 
 Range("Q1") = "Nombre Actions" 
 Range("R1") = "Valeur Unitaire" 
 Range("S1") = "Date attribution" 
 Range("T1") = "Date d'acquisition définitive" 
 Range("U1") = "Temps Travail Payé" 
 Range("V1") = "Code Indemnité fin contrat" 
 Range("W1") = "Montant Indemnité versée" 
 Range("X1") = "Code Statut Catégoriel Conventionnel" 
 Range("Y1") = "Code Statut Catégoriel AGIRC ARRCO" 
 Range("Z1") = "Code convention Collective" 
 Range("AA1") = "Classement Conventionnel" 
 Range("AB1") = "Brut Congés Payés" 
 Range("AC1") = "Sommes Isolées" 
 Range("AD1") = "Prévoyance TA" 
 Range("AE1") = "Prévoyance TB" 
 Range("AF1") = "Prévoyance TC" 
 Range("AG1") = "Prévoyance TD" 

 'J'ouvre le classeur URSAFF 1.xls 
 Workbooks.Open "F:\PROJET DADS-U\URSAFF 1.XLS" 
 'Je copie les données de la feuille Export 0 
 Workbooks("URSAFF 1.xls").Sheets("Export 0").Range("C2:K41").Copy 
 Workbooks("Regroupement.xlsm").Activate 
 Workbooks("Regroupement.xlsm").Sheets("Fichier de contrôle").Range("A2").Select 
 Workbooks("Regroupement.xlsm").Sheets("Fichier de contrôle").Paste 
 'Fermeture de URSAFF 1.xls 
 Workbooks("URSAFF 1.xls").Close 

End Sub


Merci de votre aide

Cdt

99 réponses

Utilisateur anonyme
23 nov. 2012 à 23:42
Bonjour.

Enfin à la bonne place.

Pris dans l'aide de VBA:

--------------------------------------
Worksheets, membres de l'objet
Collection de tous les objets Worksheet dans le classeur actif ou spécifié. Chaque objet Worksheet représente un classeur.

Méthodes

Add
Crée une nouvelle feuille de calcul, un nouveau graphique ou une nouvelle feuille macro. La nouvelle feuille de calcul devient la feuille active.

Propriétés

Count
Renvoie une valeur de type Long qui représente le nombre d'objets dans la collection.

Item
Renvoie un seul objet d'une collection.


---------------------------------------------

------------------------------------------------------
Référence du développeur Excel
Worksheets.Add, méthode

Cette méthode crée une nouvelle feuille de calcul, un nouveau graphique ou une nouvelle feuille macro. La nouvelle feuille de calcul devient la feuille active.

Syntaxe

expression.Add(Before, After, Count, Type)

expression Variable qui représente un objet Worksheets.

Paramètres

Before

Facultatif
Variante Objet qui spécifie la feuille avant laquelle la nouvelle feuille est ajoutée.


After

Facultatif
Variante Objet qui spécifie la feuille après laquelle la nouvelle feuille est ajoutée.

Count

Facultatif
Variante Nombre de feuilles à ajouter (une par défaut).

Type

Facultatif
Variante Spécifie le type de feuille. Il peut s'agir de l'une des constantes XlSheetType suivantes : xlWorksheet, xlChart, xlExcel4MacroSheet ou xlExcel4IntlMacroSheet. Si vous insérez une feuille créée d'après un modèle existant, spécifiez le chemin de ce dernier. La valeur par défaut est xlWorksheet.

Valeur renvoyée
Valeur Object qui représente la nouvelle feuille de calcul, le nouveau graphique ou la nouvelle feuille macro.

Remarques

Si les arguments Avant et Après sont omis tous les deux, la nouvelle feuille est insérée avant la feuille active.

---------------------------------------------------------------

---------------------------------------------------------

Référence du développeur Excel
Worksheets.Item, propriété
Cette propriété renvoie un seul objet d'une collection.

Syntaxe
expression.Item(Index)

expression Variable qui représente un objet Worksheets.

Paramètres

Index
Obligatoire Variante Nom ou numéro d'index de l'objet.

Remarques

Pour plus d'informations sur le renvoi d'un seul membre d'une collection, voir la rubrique Renvoi d'un objet à partir d'une collection.


Exemple

Item constitue le membre par défaut (propriété par défaut : propriété que vous pouvez définir pour un contrôle de telle sorte que chaque fois qu'un nouveau contrôle de ce type est créé, cette propriété aura la même valeur.) d'une collection. Par exemple, les deux lignes deux ci-dessous sont équivalentes.

Visual Basic pour Applications
ActiveWorkbook.Worksheets.Item(1)
ActiveWorkbook.Worksheets(1)
0
Bonsoir et merci
A force de prendre des commentaires désobligeants mais réalistes je m'y mets

Je ne comprends pas. Pouvez-vous m'aider ?

En fait, comme vous pouvez le constatez ma macro renvoie les données de la feuille export 0 du fichier URSAFF 1 dans le fichier Regroupement. Je souhaite mettre les données de la feuille 2 à la suite des données qui ont été renvoyées dans le fichier Regroupement

Avez vous une idée

Cdt
0
Utilisateur anonyme
23 nov. 2012 à 23:53
Pas testé

dim marois as integer
marois = workbooks("PQ").count
workbooks("PQ").worksheets.add(after:=workbooks("PQ").worksheets(marois))
0
Merci beaucoup

J'essaye

Cdt
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Je ne vois pas à quoi correspond MAROIS.
Si c le nom de la feuille, je dois le mettre entre guillemets n'est ce pas ?
Worbooks=nom de mon fichier OK

où dois je placer ceci dans mon code

Merci

Cdt
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 nov. 2012 à 00:09
Bonjour,
- Peux-tu nous préciser quel est le classeur actif au tout début de ta procédure ?
Est-ce bien celui sur lequel tu vas ajouter des données provenant d'autres classeurs (est-ce donc "Regroupement.xlsm")?
- on voit le premier ajout, je pense. Où doivent exactement se faire les suivants ? sur les lignes suivantes (donc ici à partir de la ligne 42) ou sur les colonnes suivantes (donc ici à partir de la colonne L) ?
Je verrai ta réponse demain matin et te montrerai alors, en parfaite connaissance de cause, comment utiliser une procédure paramétrée et ainsi tout simplifier


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 nov. 2012 à 00:14
Après avoir lu cmarcotte (que je salue) , je me dis qu'il s'agit peut-être encore d'autre chose que ce que j'avais cru comprendre.
Lève cette ambiguïté (donne un descriptif/exemple succinct au besoin)


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Bonsoir

Tu vois que j'essaie. Merci de m'avoir boosté.
Le classeur actif au début de ma procédure est bien regroupement.xlsm
Concernant les ajouts, c plus compliqué que ça
Sur le fichier Regroupement, j'ai inséré des colonnes
Ces colonnes se trouvent dans différentes feuilles de trois classeurs.
les suivants doivent donc apparaitre sur les lignes suivantes ici ligne 42

Cdt
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 nov. 2012 à 00:20
C'est donc ce que j'avais un peu deviné ?
des données de feuilles d'autres classeurs à coller, les unes à la suite des autres (en lignes vers le bas) sur une unique feuille du classeur regroupement ?


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Utilisateur anonyme
24 nov. 2012 à 00:22
Bonjour,

Je souhaite mettre les données de la feuille 2 à la suite des données qui ont été renvoyées dans le fichier Regroupement


Ah bon,

J'ai répondu comme si

Si je veux en rapatrier d'autres, je souhaite qu'elles se mettent à la suite


Voulait dire sur une nouvelle feuille.

Ceci dit, si la dernière cellule occupée de la colonne a est a12, on peut sélectionner a13 avec cela, et cela vient de l'enregistreur de macros:

Sub Macro2()
'
' Macro2 Macro
'

'
    Range("A1").Select
    Selection.End(xlDown).Select
    Range("A13").Select
End Sub
0
En fait, je veux récupérer sur un seul fichier "Regroupement.xlsm" les données correspondant aux colonnes qui se trouvent dans plusieurs feuilles et plusieurs fichiers différents

Merci

Cdt
0
Merci cmarcotte

Il faut que les données viennent à la ligne suivante sur la même feuille mais la dernière ligne occupée peut varier.
Cdt
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 nov. 2012 à 00:27
Je t'écrirai ce code demain matin.
Une question : pourquoi as-tu 33 colonnes titrées sur la feuille de regroupement et n'y importes-tu (ton exemple de code) que les données de 9 colonnes ?


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Oui c cela sauf que si les données à reprendre peuvent varier en fonction des noms des colonnes
En effet, par exemple si un montant se trouve dans une colonne nommée base brute fiscale sur le fichier URSAFF 1 je dois le retrouver dans la même colonne et pour le salarié concerné

Suis je clair

Cdt
0
Merci beaucoup

Pour pouvoir apprendre, pourras tu m'indiquer ce que veulent dire les expressions

Cdt
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 nov. 2012 à 01:02
si un montant se trouve dans une colonne nommée base brute fiscale sur le fichier URSAFF 1 je dois le retrouver dans la même colonne et pour le salarié concerné

Une nouvelle ambiguïté .
Quels titres possèdent les feuilles dont tu veux importer des données ? ===>>
- tous les titres de la feuille de regroupement, dans le même ordre et exactement la même orthographe ?
ou
- certains titres seulement, mais dans le même ordre et la même orthographe en en colonnes contigües (sans discontinuité) ?
ou
- autres et quoi avec précision.

Je me demande d'ailleurs s'il ne serait pas plus astucieux d'importer carrément le tout (titres et données en colonnes) de chaque feuille en colonnes juxtaposées. Cette solution serait la meilleure si, au final, la feuille récapitulative devait être composée de l'ensemble des autres feuilles.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 nov. 2012 à 08:30
Bon.
Je n'ai pas encore ta réponse à ma dernière question, mais in va commencer à travailler de telle manière (progressive) qu'il te sera plus facile de comprendre la suite.
Reprenons le code de ton premier message.
Je vais également tenir compte (ton autre discussion) de ce que tu veux le déclencher à l'ouverture

Ouvre ton projet et supprime le code déjà écrit et efface toute la feuille de calcul "Fichier de contrôle"
Dans le module ThisWorkBook, écris ce code (tout)
Private f As Worksheet
Private Sub Workbook_Open()
  regroupement
End Sub

Private Sub regroupement()
  Dim nom_classeur As String, nom_feuille As String, adresse_plage As String, colonne_destination As String
  Set f = ThisWorkbook.Worksheets("Fichier de contrôle")
  If f.Range("A1").Value = "" Then
    f.Range("A1:AG1").Value = Array("Matricule", "Nom", "Prénom", "Section AT", "Code Risque AT", "Code Risque Bureau", "Taux AT", _
    "Brut SS", "Plaf SS", "csg/crds sur revenus d'activité", "CSG/CRDS sur revenus de remplacement", _
    "Base Brute Fiscal", "Net Imposable", "Avantages Nat", "Frais Prof", "Epargne Salariale", "Nombre Actions", _
    "Valeur Unitaire", "Date attribution", "Date d'acquisition définitive", "Temps Travail Payé", _
    "Code Indemnité fin contrat", "Montant Indemnité versée", "Code Statut Catégoriel Conventionnel", _
    "Code Statut Catégoriel AGIRC ARRCO", "Code convention Collective", "Classement Conventionnel", _
    "Brut Congés Payés", "Sommes Isolées", "Prévoyance TA", "Prévoyance TB", "Prévoyance TC", "Prévoyance TD")
  End If
  
  'on traite les données à importer d'une feuille d'un classeur. Je reprends ici celles de ton code
  nom_classeur = "D:\ANDRECOURBE\le dernier.xlsm"
  nom_feuille = "Export 0"
  adresse_plage = "C2:K41"
  colonne_destination = "A"
  
  copions_a_la_suite nom_classeur, nom_feuille, adresse_plage, colonne_destination
  
  
End Sub
Private Sub copions_a_la_suite(cl0 As String, f0 As String, p0 As String, col0)
  Dim classeur As Workbook
  Set classeur = Workbooks.Open(cl0)
  derlig = f.Range("A" & Rows.Count).End(xlUp).Row + 1
  classeur.Sheets(f0).Range(p0).Copy destination:=f.Range(col0 & derlig)
  classeur.Close
End Sub


Sauvegarde et ferme ton classeur
Rouvre-le, maintenant === >> regarde : tu as le même résultat qu'avec ton code précédent.

Tu devines déjà la suite, lorsque tu m'auras apporté les dernières précisions demandées (utilisation d'une seule procédure paramétrée. Toujours la même pour tout ce que tu veux importer (la procédure copions_a_la_suite) que l'on appelle chaque fois avec les paramètres des nouvelles données à ajouter.
A plus.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 nov. 2012 à 08:48
Bien sur : mets là ton chemin de fichier à toi ("F:\PROJET DADS-U\URSAFF 1.XLS")
nom_classeur = "D:\ANDRECOURBE\le dernier.xlsm"


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Bonjour et merci
ca fonctionne

Plus etre plus précis, dans chaque classeur que je vais importer dans regroupement, il y a déjà des titres de colonnes qui correspondent exactement à ceux que je crée dans ce code. Sauf qu'au lieu d'avoir les informations relatives à chaque personne sur plusieurs feuilles de plusieurs classeurs, je veux rapatrier tout dans une seule d'un seul classeur, dans un premier temps
Le données des colonnes 1 à 3 sont toutes les mêmes sur toutes les feuilles de tous les classeurs à importer.
Seules les données suivantes ne sont pas identiques.
Dans un premier temps, je veux réussir à savoir comment faire pour ça.

Puis je t'envoyer un fichier exemple et comment dois je faire ?

Merci pour ton aide

Cdt
0
J'ai une idée. Si sur une première feuille de mon fichier. Je note les éléments du répertoire, du classeur et de la feuille à importer car je travaille sur trois site et les serveurs et répertoire sont différents, est ce que je peux reprendre dans mon code les données sur cette feuille pour appliquer la macro

Cdt
0
Rejoignez-nous