Macro excel 2003

Résolu/Fermé
bartone Messages postés 19 Date d'inscription mardi 9 décembre 2008 Statut Membre Dernière intervention 19 février 2010 - 2 sept. 2009 à 13:05
bartone Messages postés 19 Date d'inscription mardi 9 décembre 2008 Statut Membre Dernière intervention 19 février 2010 - 4 sept. 2009 à 12:48
Bonjour,

J'ai un tableau de 750 lignes sous la forme suivante :

A 4200 PES ODG 2564014 B 1200 PAR ODF 152458 C 12 LYO 7821456
A 4500 PES ODG 2457545 B 1400 PAR ODF 15424 C 25 LYO 457821

Je souhaiterais avoir ce tableau sous la forme suivante :
A 4200 PES ODG 2564014
B 1200 PAR ODF 152458
C 12 LYO 7821456
A 4500 PES ODG 2457545
B 1400 PAR ODF 15424
C 25 LYO 457821

J'ai réalisé facilement une macro qui copie-colle les cellules de ma premiere ligne
"A 4200 PES ODG 2564014" , "B 1200 PAR ODF 152458 " et "C 12 LYO 7821456" dans un nouveau classeur respectivement dans les cellules A1, A2 et A3 mais je suis incapable d'automatiser le processus pour traiter mes 750 lignes !

Merci d'avance pour votre aide
A voir également:

13 réponses

roni77300 Messages postés 25 Date d'inscription lundi 31 août 2009 Statut Membre Dernière intervention 27 octobre 2009
2 sept. 2009 à 13:08
bonjour,

peux tu me donner ta premiere macro que je vois ce que cela donne.


je regarde ce que je peux faire et je te transmet la solution dans la journée.
0
bartone Messages postés 19 Date d'inscription mardi 9 décembre 2008 Statut Membre Dernière intervention 19 février 2010
2 sept. 2009 à 13:34
Voilà le code, moi j'ai utilisé l'enregistreur de macro !

Sub Macro3()
'
' Macro3 Macro
' Macro enregistrée le 02/09/2009 par Eric'

'
Range("B3:H3").Select
Selection.Copy
Windows("Classeur2").Activate
ActiveWindow.WindowState = xlNormal
Range("A1").Select
ActiveSheet.Paste
Windows("Classeur2.xls").Activate
Range("J3:R3").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Classeur2").Activate
Range("A2").Select
ActiveSheet.Paste
Windows("Classeur2.xls").Activate
Range("T3:AC3").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Classeur2").Activate
Range("A3").Select
ActiveSheet.Paste
Windows("Classeur2.xls").Activate
Range("AE3:AN3").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Classeur2").Activate
Range("A4").Select
ActiveSheet.Paste
Windows("Classeur2.xls").Activate
End Sub

Merci
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
2 sept. 2009 à 17:56
Bonjour,
Essayez avec le code ci après, à copier dans le module de la feuille à traiter:
Sub CopierGrouper()
' boucle sur feuille 1
For cl = 2 To WorksheetFunction.CountA(Columns(1))
' boucle sur les groupes
For cc = 1 To 11 Step 5
Range(Cells(cl, cc), Cells(cl, cc + 4)).Copy Destination:=Sheets("bartone_2").Cells(WorksheetFunction.CountA(Sheets("bartone_2").Columns(1)) + 1, 1)
Next cc
Next cl
End Sub
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
2 sept. 2009 à 19:33
Bonjour Bartone, cher Jean-Pierre

a essayer ( ca marche avec 10 lignes de 3 colonnes mais j'ignore ce que ca peut donner avec quelques 2250 données: saturation- mémoire(?)) :

Sub transposer_en_colonne()
Dim lig_dep As Byte, col_dep As Byte, derlig As Integer
Dim tablo
Dim cptr_tablo As Integer

With Sheets(1)
'   initialisation
    lig_dep = 2 'ligne de départ des données
    col_dep = 1 'colonne de départ des données
    derlig = .Cells(65536, 1).End(xlUp).Row
     ReDim tablo((derlig - 1) * 3)
     
    'collecte dans un tableau des données "ABC"
    For lig = lig_dep To derlig
        For col = col_dep To col_dep + 2
            tablo(cptr_tablo) = .Cells(lig, col)
            cptr_tablo = cptr_tablo + 1
        Next
    Next
End With

'restitue en feuille 2 sur une colonne
With Sheets(2)
    .Range("A2:A3000").ClearContents
    .Range("A2").Resize(UBound(tablo), 1) = Application.Transpose(tablo)
End With

End Sub


Bartone: si ca marche,pourrais tu m'envoyer la feuille avec les 750 lignes sur
https://www.cjoint.com/
j'aimerais chronométrer la durée de la transposition (j'ai un autre plan dans mes cartons...). D'avance merci
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
2 sept. 2009 à 21:42
Bonsoir michel_m,
Si je vois juste vous passez par une variable tableau intermédiaire, très intéressant je vais voir comment sa marche.
Il y a un problème d'après les données de Bartone le résultat demandé est :
A 4200 PES ODG 2564014
B 1200 PAR ODF 152458
C 12 LYO 7821456
A 4500 PES ODG 2457545
B 1400 PAR ODF 15424
C 25 LYO 457821

Votre résultat est :
A
4200
PES
A
4500
PES

A une prochaine.
0

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

Posez votre question
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
2 sept. 2009 à 22:29
Bonsoir Jean-Pierre,

d'après ce que j'ai compris, il n'y aurait que 3 colonnes...

J'ai réalisé facilement une macro qui copie-colle les cellules de ma premiere ligne
"A 4200 PES ODG 2564014" , "B 1200 PAR ODF 152458 " et "C 12 LYO 7821456" dans un nouveau classeur respectivement dans les cellules A1, A2 et A3


donc j'ai interprété que:
"A 4200 PES ODG 2564014" était dans une seule cellule

Ci joint démo avec environ 760 lignes: c'est pratiquement instantané...
(j'ai ajouté activate à la fin de la macro)
https://www.cjoint.com/?jcwzg1NpWl

Attendons donc que Bartone fasse signe
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
2 sept. 2009 à 22:54
Bonsoir Michel,
Oui effectivement je suis passé sur:
J'ai réalisé facilement une macro qui copie-colle les cellules de ma premiere ligne
"A 4200 PES ODG 2564014" , "B 1200 PAR ODF 152458 " et "C 12 LYO 7821456" dans un nouveau classeur respectivement dans les cellules A1, A2 et A3


Par contre j'ai oublié la conversion des données que j'ai réalisées en copiant ses données.
Alors au travail le petit ...
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
2 sept. 2009 à 23:23
Bonsoir,
Voici ma proposition corrigée : https://www.cjoint.com/?jcxwkGfCvD
0
bartone Messages postés 19 Date d'inscription mardi 9 décembre 2008 Statut Membre Dernière intervention 19 février 2010
3 sept. 2009 à 10:49
Bonjour,

Merci vraiment pour la peine que vous vous êtes donnés pour résoudre mon problème. En fait mon tableau ne fait plus que 413 lignes apres nettoyage.

Au départ, il se presentait sous cette forme :

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

A l'arrivée j'ai reussi à avoir ce que je voulais :

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

Pour parvenir à ce résultat, j'ai numéroté les 4 colonnes jaunes de 1 à 413, puis j'ai coupé-collé les 3 blocs (entre chaque colonne jaune) de plusieurs cellules les uns en dessous des autres. Le deuxième sous le premier, le troisième sous le deuxième et le quatrième sous le troisième. Enfin j'ai fait un tri par ordre croissant du tableau obtenu et supprimé la colonne transitoire 1 à 413. J'espère avoir été assez clair !

J'ai quand même regardé, essayé, voire de piger votre code hélas je crains que mes compétences ont atteint leur limite ! De plus le dernier lien me renvoie une erreur visual basic "400" : https://www.cjoint.com/?jcxwkGfCvD

Si l'un d'entre vous parvient à faire fonctionner sa "moulinette", je suis très interessé parce que j'ai pas mal de tableaux dans ce genre à retravailler.

Merci encore pour vos contributions ...
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
3 sept. 2009 à 11:40
Bonjour Bartone,

tu es bien gentil, mais tu vois les désagréments que tu as causé car plusieurs contributeurs ont essayé de t'aider à partir de ce que tu avais écrit:

J'ai réalisé facilement une macro qui copie-colle les cellules de ma premiere ligne
"A 4200 PES ODG 2564014" , "B 1200 PAR ODF 152458 " et "C 12 LYO 7821456" dans un nouveau classeur respectivement dans les cellules A1, A2 et A3


il y a eu un petit débat amical entre Jean-Pierre et moi à ce sujet

Or, la réalité de ton classeur ne correspond pas du tout à ce que tu as écris: comprend donc que je ne sois pas très chaud pour rechercher à nouveau

ma proc fonctionne (mon dernier message): tu dois pouvoir l'adapter à ton classeur en décalant entre les colonnes jaunes
Désolé.
0
bartone Messages postés 19 Date d'inscription mardi 9 décembre 2008 Statut Membre Dernière intervention 19 février 2010
3 sept. 2009 à 12:29
Sincerement désolé . Je voulais vous retranscrire les choses de façon simple et c'est pourquoi j'ai opté pour cet exemple qui certes, ne correspond pas tout à fait à mon tableau final. En fonction du retour, je pense que j'aurais été capable de l'adapter à mes données.
Avant de vous écrire, je ne connaissais même pas la possibilité de vous joindre un fichier sinon je pense que je l'aurais fait, ça aurait été effectivement bcp plus simple.

Je ferai mieux la prochaine fois, encore merci !
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
3 sept. 2009 à 12:34
OK, sans rancune et à la prochaine
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
3 sept. 2009 à 17:12
Bonjour,
Pour ceci :
J'ai quand même regardé, essayé, voire de piger votre code hélas je crains que mes compétences ont atteint leur limite ! De plus le dernier lien me renvoie une erreur visual basic "400" :
Essayez donc cette version : https://www.cjoint.com/?jdrlAu5Eli

Malgré la déception entre votre demande et vos 2 tableaux, j’ai pris la peine de les étudier.
Désolé de vous dire qu’il va être très difficile de faire mieux que votre manipulation en regard du tableau [A l'arrivée] dont il est impossible de reconnaître qui est qui ; par colonne on trouve des données incohérentes … !
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
3 sept. 2009 à 21:27
bonjour à tous,

J'avais regardé cette question mais comme la macro faisait tout à fait autre chose que ce qui était posé comme question, il était manifeste comme vous l'avez vu qu'il y aurait impossibilité de donner la solution espérée.

Je voulais vous retranscrire les choses de façon simple et c'est pourquoi j'ai opté pour cet exemple qui certes, ne correspond pas tout à fait à mon tableau final

bonjour bartone,

Quand tu dis ceci, saches que c'est la seule solution à ne pas adapter car tu vas systématiquement entrainer tes lecteurs sur une fausse piste et tu n'auras jamais la solution voulue.

En fonction du retour, je pense que j'aurais été capable de l'adapter à mes données.

Comme les solutions que l'on te propose ne seront pas adaptées à un problème autre que celui exposé tu n'auras aucune chance de pouvoir les adapter.

La preuve, c'est que Le Pingou t'as donné (dans le poste 3) une solution très proche de ce qui peut être fait et que tu ne l'a pas saisie.

Dans la mesure où tu encadres tes blocs avec une colonne colorée, comme tu l'as fait dans ton exemple, je te propose la macro "recadre" dans le fichier joint qui obtient le résultat que tu as obtenu en mettant le résultat dans la feuille 2.

http://www.cijoint.fr/cjlink.php?file=cj200909/cijGZxypXj.xls
0
bartone Messages postés 19 Date d'inscription mardi 9 décembre 2008 Statut Membre Dernière intervention 19 février 2010
4 sept. 2009 à 12:48
Bonjour,

Je suis assez stupéfait de tout de ce que vous avez fait pour moi. Quelle richesse et quelles ressources !

J'ai bien compris que je n'avais pas poser le problème comme il se doit. Vos recommandations et vos observations sont tres pertinentes et je saurai en faire bon usage pour les éventuelles questions à venir.

Bravo pour les macro "ConvertirCopierColler" et "recadre", résultats aussi bluffants que magiques.

Je découvre ce site depuis peu et je suis assez émerveillé par la qualité des intervenants.

Merci encore à tous et bonne continuation
0