Réorganiser une sélection de cellule [vba]

Réorganiser une sélection de cellule [vba] - VB/VBA/VBS - Programmation

Marsh Posté le 11-09-2007 à 11:37:31    

Hello,
 
Voici mon problème :
J'ai un fichier excel (A) où des données sont saisies. Une fois saisies, ces données sont dispatchées à la main vers une série de fichiers (Bs) excel grâce à un copier-coller tout bête. Important pour la suite, la structure de ces fichiers n'est pas modifiable.  
Tout allait bien, jusqu'à hier quand un des managers a décidé de changer la structure des fichiers Bs qui reçoivent les copier-coller... Il y a des nouvelles colonnes, l'ordre n'est plus le même etc.
 
Ma solution :
Rajouter une macro dans A qui va, à partir de la sélection d'une ligne:
- Restructurer les données en introduisant des colonnes vides, en mettant les bonnes colonnes au bon endroit pour que ça corresponde au format des Bs
- Copier ces données dans le clipboard et après il reste plus qu'à aller dans le fichier Bs et à faire Ctrl+V
 
Problème :
Copier une plage de cellule dans le clipboard n'est pas un pb, c'est plutôt la réorganisation à la volée des cellules. Je vois pas comment manipuler les données pour "recréer" la plage de cellule une fois que j'ai récupéré la plage de cellule. Par exemple :
Source : id / Nom / Date / Machin
Destination : id / blanc / Date / Nom / Machin
La seule solution (pas terrible) que je vois, c'est que ma macro copie les cellules dans un endroit non-visible de la feuille en les réorganisant, puis copie cette nouvelle plage dans le clipboard...
 
Merci :)

Reply

Marsh Posté le 11-09-2007 à 11:37:31   

Reply

Marsh Posté le 11-09-2007 à 13:50:04    

Bonjour,
 
C'est pas très clair,  mais le problème est que tu as fait une macro qui fait des copier coller d'une cellules dans une autre feuille, et que la présentation de celle-ci à changé.
Dans ta feuille de destination, donne un nom à chaque cellule de la tétière
pour exemple Nom
 
col =sheets(feuil2).range("Nom" ).column : permet de récupérer le numéro de la colonne nom
 
Je présume que tu connais la ligne  
 
sheets("feuil2" ).cells(ligne, col)=sheets("feuil1" ).cells(x,y)
 
Par ce principe, si on ajoute des colonnes dans la feuille 2, notre formule est toujours bonne
 
J'espère que cela va résoudre ton problème

Reply

Marsh Posté le 11-09-2007 à 15:17:47    

Hello,
Le problème c'est qu'il n'y a pas de macro au départ. La copie se fait à la main en copier-coller, et ça nous convenait très bien
La macro que je dois faire pour résoudre ce problème ne peut pas juste copier dans l'autre feuille Bs (je ne peux pas savoir quelle est cette autre feuille, je sais juste qu'elle a une certaine structure), mais simplement récupérer les bonnes infos et les mettre dans le presse-papier pour un collage en Ctrl+V.
De plus, comme je l'ai dit, je ne peux pas modifier les feuilles Bs.


Message édité par gooopil le 11-09-2007 à 15:18:13
Reply

Marsh Posté le 11-09-2007 à 15:30:29    

La solution que tu proposes toi-même est la bonne.
Tu ne la trouves pas terrible parce que tu n'as peut-être pas l'habitude de travailler sur des documents Excel complexes (10 classeurs de 20 onglets chacun, avec des références croisées et des calculs statistiques et des formats conditionnels et des macros d'importation/exportation, par exemple).
Moi ça ne me choque pas du tout.
Ne jamais oublier que WorkSheet, ça veut dire feuille de travail :)

Reply

Marsh Posté le 11-09-2007 à 15:37:06    

tegu a écrit :

La solution que tu proposes toi-même est la bonne.
Tu ne la trouves pas terrible parce que tu n'as peut-être pas l'habitude de travailler sur des documents Excel complexes (10 classeurs de 20 onglets chacun, avec des références croisées et des calculs statistiques et des formats conditionnels et des macros d'importation/exportation, par exemple).
Moi ça ne me choque pas du tout.
Ne jamais oublier que WorkSheet, ça veut dire feuille de travail :)


Je la trouve pas terrible parce que ça fait faire une lecture/écriture en plus, alors qu'il devrait (logiquement) être possible de lire puis de transformer directement, sans réécrire puis relire...[:spamafote]
Par contre c'est vrai que je n'ai pas l'habitude d'Excel, donc encore moins des situations complexes avec Excel :D

Reply

Marsh Posté le 11-09-2007 à 16:50:20    

Plusieurs solutions coexistent souvent pour faire la même chose.
C'est plus une question de cohérence avec le reste, les perspectives de maintenance ou la lisibilité du code qui fait pencher la balance.
À toi de voir si tu veux optimiser les perfs en y passant plusieurs jours de codage, ou te contenter de perfs moindres (et encore) en moins de temps.
En PHP les fonctions de tri de tableaux permettraient certainement d'envisager une solution de réorganisation à la volée.  
VB est beaucoup plus pauvre en ce domaine et il est plus facile d'utiliser les fonctions Excel.
Reste que quelqu'un te trouvera peut-être une meilleure idée.

Reply

Marsh Posté le 11-09-2007 à 17:09:31    

tegu a écrit :

Plusieurs solutions coexistent souvent pour faire la même chose.
C'est plus une question de cohérence avec le reste, les perspectives de maintenance ou la lisibilité du code qui fait pencher la balance.
À toi de voir si tu veux optimiser les perfs en y passant plusieurs jours de codage, ou te contenter de perfs moindres (et encore) en moins de temps.
En PHP les fonctions de tri de tableaux permettraient certainement d'envisager une solution de réorganisation à la volée.  
VB est beaucoup plus pauvre en ce domaine et il est plus facile d'utiliser les fonctions Excel.
Reste que quelqu'un te trouvera peut-être une meilleure idée.


Tout à fait d'accord  :jap: Vu le peu de temps que j'ai, il est fort probable que je me dirige vers la solution de copie/recopie, même si l'autre ne doit pas être si compliquée que ça... Je manque juste des connaissances en VB ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed