Test

plombiero

XLDnaute Nouveau
Bonjour tout le monde,

Il s'agit d'un problème de copie de données.
(edit: désolé pour le nom du topic, j'avais mis ça pendant que je le mettais en forme).

Voici un exemple concret de ce que je voudrais réaliser :

Code:
Classeur1 Feuille2
A       B       C       D       E   
N°        INFOS         en €    Description
1         Alpha         25      Truc
2         Beta          30      Muche
3         Gamma         25      Chose
3         Gamma         20      Chose
3         Gamma         -10     Chose
4         ...

[COLOR="Red"]devienne via macro [/COLOR]
Classeur2 Feuille2

A       B       C       D
N°      INFOS   en €    Description
1       Alpha   25      Truc
2       Beta    30      Muche
3       Gamma   35      Chose
4       ...

L'idée :
Ce serait de copier les lignes d'une feuille de classeur à une autre feuille d'un autre classeur.
Mais surtout, si il y a plusieurs lignes qui ont le même n° sur la même colonne (par exemple A), alors on colle l'incrémentation des plusieurs lignes du classeur 1 en une seule ligne sur le classeur 2 en faisant une somme sur une colonne spécifique (ici, c'est la D).

Attention : Certaines colonnes que je dois copier sont "Merge" à la base (comme B et C dans mon exemple) et les cellules de destination non. Je passe par un "Unmerge" avant de copier le bébé donc mais je ne peux pas me permettre de copier comme un sauvage toutes les lignes.

Ce que j'ai commencé à faire :

Ouvrir le classeur1 à partir du 2.
Selectionner la feuille 2 du classeur 1.
Sélectionner l'ensemble de mes données du classeur 1 sur lesquelles je veux executer la macro.

Code:
Sub copier_cellules_entre_classeurs()

Dim lastlineselect As Integer
Dim filetoOpen
Dim Erreur
Dim rw
Dim ligne
Dim nb_lignes

'Nomme le workbook n°2 en "ici"
ici = ThisWorkbook.Name

'Ouvre le workbook n°1 et je le nomme en "ouvert"
filetoOpen = Application.GetOpenFilename("Excel (*.xls), *.xls")
If filetoOpen <> False Then
Workbooks.Open Filename:=filetoOpen
ouvert = ActiveWorkbook.Name


'Ma sélection commence à partir du B7
Workbooks(ouvert).Activate
Sheets("Feuille2").Activate
ActiveCell.SpecialCells(xlLastCell).Select
lastlineselect = Selection.Row
If lastlineselect < 7 Then lastlineselect = 7
nb_lignes = lastlineselect - 6

Voilà où je reste bloqué, si quelqu'un avait de quoi m'aider, je lui en serais fortement reconnaissant !

Merci d'avance,

Damien
 
Dernière édition:

plombiero

XLDnaute Nouveau
Re : Test

J'aimerai en savoir plus si possible ?

Car en appliquant les sous totaux, je n'arrive pas à mes fins via Excel. Et sachant qu'il s'agit d'automatiser au maximum pour de purs novices (enfin plus que moi :eek:)), j'ai bien peur d'arriver à son application en algorithmie/vba.

Merci pour la piste,

Damien
 

plombiero

XLDnaute Nouveau
Re : Test

Au final, j'ai exploré la piste du sous-total car je me trouvais un peu démuni d'idées ;), avec un semblant de début de solution (mais il ne me reste plus beaucoup de cheveux à arracher ! :) )

Considérons ma liste brute à copier.

-Je lance un "UnMerge" sur l'ensemble de la feuille à copier.
-Je sélectionne l'ensemble des données que je vais devoir copier (un tableau de 800lignes (et ça grimpe tous les jours) et 18 colonnes, qui commence en B7)
-Sur mon ensemble de données, j'effectue un tri par ordre décroissant à partir de la cellule 7 de la colonne C.
-Sur mon ensemble de données, j'effectue un sous-total par n° dans la colonne C avec une fonction somme sur la colonne M.

Problématique nouvelle :

Comment récupérer la ligne à copier sans l'info de la colonne M(i) et y incrémenter le sous.total réalisé en M(i+x) ?
Avec "i" le n° de la ligne et "x" le nombre de lignes où on retrouve la même occurence de la colonne C.
Avec, éventuellement, un "offset" ? Je maîtrise encore mal cette fonction.

N'hésitez pas à poster même s'il s'agit d'idées à développer :)

Merci d'avance :cool:

Damien
 

plombiero

XLDnaute Nouveau
Re : Test

Bonjour et bonne semaine à tout le forum,

Je me permets de remonter ce fil après un petit week-end de repos mérité ;)

Quelqu'un aurait une idée pour récupérer les lignes créées par les sous totaux ?

Merci d'avance,

Damien
 

Staple1600

XLDnaute Barbatruc
Re : Test

Bonsoir


J'ai testé en fasiant la manip (avec l'enregisteur de macro)

L'archive contient deux classeurs
(Les décompressé dans C:\Temp pour tester)
CA.xls
CB.xls (contient le code VBA)


Ouvrir CB.xls
• Effacer le contenu de la feuille 1 (et annuler les Sous-totaux)
• Lancer la macro

Observe le code VBA généré

Piste à creuser et à suivre
 
Dernière édition:

plombiero

XLDnaute Nouveau
Re : Test

Bonjour à vous deux et merci de vous intéresser à mon souci.

@Staple : Je réfléchissais à une méthode relativement lourde à base de fonction "Offset". Lourde, mais qui fonctionnerait.

@Lii : Les résultats que l'on peut obtenir avant la méthode "paste" sont exactement ceux que je recherche. Ca me génère une erreur "1004" au moment du paste ceci-dit (mais dont je m'en fous terriblement car on obtient les résultats escomptés). Bref, c'est exactement ce que je cherchais, je vais adapter tout ça à mon usine à gaz ;)

C'est génial, un gros merci :)
 

Discussions similaires

Statistiques des forums

Discussions
312 579
Messages
2 089 900
Membres
104 300
dernier inscrit
katlynefortin