Copie de données

Résolu/Fermé
Fleur 99 Messages postés 2 Date d'inscription samedi 14 septembre 2013 Statut Membre Dernière intervention 17 septembre 2013 - 14 sept. 2013 à 00:56
f894009 Messages postés 17217 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 27 décembre 2024 - 11 nov. 2013 à 08:42
Bonsoir,
Débutante en VBA je n'arrive pas à trouver une solution a mon problème de copie de données sous excel 2007.
Je dois récupérer des données excel de la feuille "donnees" et en copier certaines dans la feuille "resultat".
Une des données (Mag1, Mag2...)(Colonne W, X...) est en-tête de colonnes et les autres en lignes.
La donnée présente dans l'en-tête doit être mise en ligne, dupliquée pour chaque ligne copiée.

Les données des colonnes (sauf en-tête colonne) Mag 1, Mag 2.. doivent être dans la même colonne Mag
Les mentions d'en-tête : Mag1, Mag 2 dans la colonne « A » face aux lignes copiées
Cette action est à faire pour 70 colonnes

Au final on a plus de lignes que dans la feuille "donnees".

Mes problèmes:
1. dupliquer la donnée Mag 1, Mag 2... dans la colonne « A » car le nombre de lignes est variable
2. de traiter les 70 colonnes car la colonne de référence dans la feuille "donnees" change (+ une colonne) y compris pour le filtre.

'Recupération des données Mag de la feuille "donnees", copie de certaines données dans feuille "resultat"


'Effacer le contenu de la feuille "resultat"
ActiveSheet.Select
Sheets("resultat").Visible = True
Sheets("resultat").Select
Range("B65536").End(xlUp).Select
ActiveCell.Offset(1, 0).Select
i = ActiveCell.Row
Range("A2:P" & i).Select
Selection.ClearContents

'Enlever les filtres
Sheets("donnees").Select
Dim Pop As CommandBarPopup
Set Pop = CommandBars("data").Controls("&Filtrer")
If Pop.Controls("&Afficher tout").Enabled = True Then
ActiveSheet.ShowAllData
End If

'Recuperation des données Mag1
'Récupération du premier nom de Mag
Sheets("donnees").Select
Range("W1").Select
Selection.Copy
Sheets("resultat").Select
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
nom = ActiveCell.Value
m = ActiveCell.Row

'Filtre sur premier nom de Mag pour enlever les lignes vides
Sheets("donnees").Select
Range("W1").Select
ActiveSheet.Range("$A$1:$P$10000").AutoFilter Field:=23, Criteria1:="<>"

'Récupération des données filtrées et copie dans la feuille "resultat"
Range("A65536").End(xlUp).Select
n = ActiveCell.Row
Range("A2:A" & n).Copy Worksheets("resultat").Range("B2")
Range("C2:D" & n).Copy Worksheets("resultat").Range("C2")
Range("F2:L" & n).Copy Worksheets("resultat").Range("E2")
Range("N2:O" & n).Copy Worksheets("resultat").Range("L2")
Range("T2:T" & n).Copy Worksheets("resultat").Range("N2")
Range("W2:W" & n).Copy Worksheets("resultat").Range("O2")


'Ajouter le nom dans la colonne A sur les lignes copiées
Sheets("resultat").Select
Dim Cell As Range
'rechercher dernière ligne renseignée dans colonne B et ajouter nom dans la colonne "A"
Range("B65536").End(xlUp).Select
ActiveCell.Offset(0, -1).Select
ActiveCell.Value = nom
n = ActiveCell.Row
For Each Cell In Range("A" & n - 1)
If Cell.Value = "" Then
ActiveCell.Value = nom
End If
Next Cell

'Recuperation des données Mag 2
'Traitement du deuxième Mag. Rechercher dernière ligne vide
Sheets("donnees").Select
Rows("1:1").Select
ActiveSheet.ShowAllData
'Il faudrait ajouter une colonne automatiquement
Range("X1").Select
Selection.Copy
Sheets("resultat").Select
Range("A65536").End(xlUp).Select
p = ActiveCell.Row
ActiveCell.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("donnees").Select
Range("X1").Select
'Il faut décaler le filtre d'une colonne
ActiveSheet.Range("$A$1:$CJ$10000").AutoFilter Field:=24, Criteria1:="<>"

'Récupération des données filtrées et copie dans la feuille "resultat"
Range("A65536").End(xlUp).Select
n = ActiveCell.Row
Range("A2:A" & n).Copy Worksheets("resultat").Range("B" & p + 1)
Range("C2:D" & n).Copy Worksheets("resultat").Range("C" & p + 1)
Range("F2:L" & n).Copy Worksheets("resultat").Range("E" & p + 1)
Range("N2:O" & n).Copy Worksheets("resultat").Range("L" & p + 1)
Range("T2:T" & n).Copy Worksheets("resultat").Range("N" & p + 1)
Range("X2:X" & n).Copy Worksheets("resultat").Range("O" & p + 1)
'Il faudrait ne pas noter X mais faire W+1 colonne

'Ajouter le nom dans la colonne A sur les lignes copiées
'rechercher dernière ligne renseignée dans colonne B
Range("B65536").End(xlUp).Select
e = ActiveCell.Row
'dans la colonne "A" ajouter nom du Mag
Range("A" & e).Select
ActiveCell.Value = nom



Je ne sais pas si possibilité de mettre fichier avec exemple.
Je vous remercie pour votre aide.
A voir également:

13 réponses

f894009 Messages postés 17217 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 27 décembre 2024 1 712
14 sept. 2013 à 08:03
Bonjour,

Pour mettre un fichier a dispo, click sur le lien suivant https://www.cjoint.com/

N'oubliez pas de copier/coller le lien cree dans votre prochain message
0
Bonjour,
Je vous remercie pour votre aide.
J'ai déposé un fichier exemple "Test.xls".
Une feuille avec les données d'origine "donnees", une autre avec le résultat souhaité "resultat souhaite".

http://cjoint.com/?0IqbmjIUQAf
0
f894009 Messages postés 17217 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 27 décembre 2024 1 712
16 sept. 2013 à 16:07
Bonjour,

Débutante en VBA je n'arrive pas à trouver une solution a mon problème de copie de données sous excel 2007.

Votre fichier est en excel97-2003, sous 2007 et plus si vous voulez conserver vos macros, enregistrez en .xlsm (classeurs prenant en charge les macros)

Un exemple de programmation 2007-20xx

https://www.cjoint.com/c/CIqqdOvgXXf

et en excel 97-2003

https://www.cjoint.com/?CIqqgq69zs3

A+
0
Fleur 99 Messages postés 2 Date d'inscription samedi 14 septembre 2013 Statut Membre Dernière intervention 17 septembre 2013
17 sept. 2013 à 23:03
Bonjour,
Je vous remercie pour votre aide. J'ai testé le fichier .xlsm, j'ai ajouté des colonnes supplémentaires qui ne sont pas concernées par cette boucle grâce a vos explications.
J'ai un message d'erreur (Erreur d'execution "9", l'indice n'appartient pas à la sélection) pour le cas suivant : si une des colonnes contient un nom dans l'en-tête et pas de données (exemple colonne « AY »). Le passage à la colonne suivante ne se fait pas, l'exécution s'arrête sur la colonne filtrée sans ligne de donnée et sur la ligne de code
ReDim Tab_Inter(1 To nblig, 1 To nbcol)

J'ai essayé d'ajouter une boucle if avec le cas de nblig à zéro. Compte-tenu de mon niveau de codage, ceci ne fonctionne pas, je ne dois pas ajouter la bonne syntaxe, de plus au bon endroit. Ne faut-il pas prévoir un deuxième cas pour le tableau des données utiles ?


Le fichier Test1 est joint.
http://cjoint.com/?0Irw23z2Bx8
Cordialement
0

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

Posez votre question
f894009 Messages postés 17217 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 27 décembre 2024 1 712
18 sept. 2013 à 07:25
Bonjour,

J'ai recupere votre fichier, je fais la modif.

A+
0
f894009 Messages postés 17217 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 27 décembre 2024 1 712
18 sept. 2013 à 07:48
Re,

vous n'etiez pas loin de la solution:

https://www.cjoint.com/?CIshVAo81cE

A+
0
Bonjour,
Reconnaissante de votre aide, je vous remercie.
Je vais tester le tout dans mon méga fichier avec mes autres codes.
Je vous tiens informé.
Cordialement
0
Bonsoir,
Désolée pour ce retour tardif mais surbookée. J'ai intégré votre code à mon fichier général.
Les premiers tests confirment le problème déjà détecté dans le fichier test.
Les cases d'en-tête de la feuille "resultat" ne comporte plus de libellé après exécution de la macro.
Pour le fichier test c'était toutes les cases de l'en-tête, pour le fichier général qui comporte plus de colonnes, les cases impactées sont celles avant la case "Mag".
Sauriez-vous m'indiquer l'origine du problème et le résoudre ?
Je vais pour suivre mes tests.
Cordialement
0
f894009 Messages postés 17217 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 27 décembre 2024 1 712
Modifié par f894009 le 2/10/2013 à 07:41
Bonjour,

J'ai repris le sujet et chez moi, en effet, les entetes de colonne ont ete effacees une fois. Je regarde la chose.

A+
0
f894009 Messages postés 17217 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 27 décembre 2024 1 712
2 oct. 2013 à 08:01
Re,

Ai ajoute ecriture des entetes:

https://www.cjoint.com/?CJciaHPCzhI


A+
0
Bonsoir,
Je vous remercie pour votre retour et réactivité.
Je regarde le tout.
Cordialement
0
Bonsoir,
Je suis toujours surbookée et sur le sujet (je peine sur d'autres points).
Les derniers tests effectués avec les autres codes dans le méga fichier sont concluants à ce jour.
Encore merci pour votre aide.
Cordialement.
0
f894009 Messages postés 17217 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 27 décembre 2024 1 712
11 nov. 2013 à 08:42
Bonjour,

sur le sujet (je peine sur d'autres points). Si vous avez besoin d'aide, ca roule.

A+
0