Copie de données
Résolu
Fleur 99
Messages postés
2
Statut
Membre
-
f894009 Messages postés 17413 Statut Membre -
f894009 Messages postés 17413 Statut Membre -
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.
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:
- Copie de données
- Fuite données maif - Guide
- Copie cachée - Guide
- Super copie - Télécharger - Gestion de fichiers
- Copie écran samsung - Guide
- Copie disque dur - Guide
13 réponses
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
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
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
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
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+
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+
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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
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
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+
J'ai repris le sujet et chez moi, en effet, les entetes de colonne ont ete effacees une fois. Je regarde la chose.
A+