Ligne excel et macro

H

hugo

Guest
bonjour,
Je ne connaissais pas ce site, et j'espère pouvoir trouver une solution à mon problème, déjà avant tout, je vous souhaite à tous, mes meilleurs voeux, pour cette nouvelle année.

Je travail avec excel, avec des lignes, je copie, je colle, les lignes entières, comprenant des données. J'aimerais savoir comment, avec l'aide d'une macro, copier automatiquement, une ligne de la feuil 1 et la coller sur la feuille 2.

Je m'explique, j'ai une ligne par exemple sur 1 ou 2 3 ou.....jusqu'à 20

je voudrais sans faire manuellement coller toute les ligne sur la feuil 2.

Jusque là pas de problème, c'est du ''paste worksheet''.

là ou je ne sais pas c'est ensuite le lendemain, mes lignes de 1 à 20 sur la feuille 1 ,vont etre remplacés, par d'autre ligne de la journée.

La feuil-2 se mettra à jour automatique, et donc je n'aurais pas d'historique.

En clair je voudrais que la feuille-2, fasse apparaître, les lignes supplémentaires de la journée, sans remplacer les précédentes.

et pour cela je pense que la macro, devrait être du style, ''insérer'' ligne, après le dernier coller, et paste, la ligne de feuil 1.

Tout cela me permettrais d'avoir une feuil-1 avec les ligne de la journée, (10-20 ligne) et sur la feuille 2 tout le recap, de toute les journées.

merci beaucoup d'avance pour votre aide, j'espère que le professionnel connaissant la réponse, me répondra.

Cordialement, ce serait géant
 
C

Celeda

Guest
Bienvenue Hugo sur le ForumXLD et bonsoir,

Tu vas trouver ton bonheur je pense avec les spécialistes en VBA qui oeuvrent sur ce forum.

Et ta demande m'a inspiré un supplément : je ne sais pas comment est constituée ta base de données dans ta feuille 1 mais supposons que :

tu as deux colonnes A et B et que dans A reviennent systématiquement les mêmes noms ou produits ou ect.. ne serait-il pas possible de demander à la macro :
copie moi la feuille 1 dans la feuille 2 mais si tu retrouves le même nom ou produit inséres cette nouvelle donnée en dessous de la premiere déjà copiée le jour précédent, par exemple.

Je sais que tu pourrais faire à la place en final un tri par ordre d'arrivée si date il y a sur la ligne mais pourquoi pas voir si cela est possible avec la même macro.

Enfin, je dis cela comme cela ..............quant à faire une demande si on peut l'étoffer ......un peu ?

Mais si Hugo mon supplément ne te convient pas, cela n'est pas grave. Les Maîtres VBA pourront faire simple, j'en suis sure.

I do appreciate your assistance in solving this difficult problem (for me!).

Celeda
 
H

hugo

Guest
Bonjour Celeda,
Je suis content d'apprendre, que tu veuilles m'aider. En effet cette solution serais adéquate, dans le cas ou je ne supprime pas les données.

Je pense que la donnée, serait, du type :
Copy (17:19) à 8h00 du matin
paste sur feuille 2 (17:37) à 8h01 diu matin.

et le lendemain
Copy (17:19) à 8h00 du matin
paste sur feuille 2 (38:48) à 8h01 diu matin.

car en effet si il paste tous les jours sur (17:19) il remplacera, les données de hier.

Je ne sais pas si la ''donnée temporaire'' serait possible sur excel. dans ce cas, il y'aurait, aussi une solution dans le registre de ''l'execution''.

Par exemple, dés que je demande que la macro s'active, il copy,
Copy feuille 1 (17:19)
paste sur feuille 2 (17:37)

J'arrete la macro

et le lendemain j'active la macro pour
Copy (17:19)
paste sur feuille 2 (38:48)

Je ne sais pas si tout cela est possible, c'a m'a l'air très compliqué, vraiment ''hors computer''

mais je me dis que toutes les lignes de codes inimaginable, serais infinis.

Un petit espoir peut être...


Je t'expliques plus en détail, Sur la Feuille 1, j'ai un groupe par exemple ''Achat'', qui débute à 17 et termine à 19. à la ligne 20 j'ai le total (=somme(17:19))

Donc cela est le 1er groupe. Ensuite pour que cela serve, j'insere donc les lignes extraites de d'autres feuilles, (des lignes, de produits par exemple )
à partir de la ligne 18.

J'en insere par exemple 20, donc 20 ligne qui se trouve entre 17 et 19.
Donc effectivement le total (=somme(17:19)) se transforme en
(=somme(17:39)) automatiquement.

Pour le moment tout est basique

Je connais donc le total de ma journée, c'est très bien....le lendemain, je vais aussi insérer 20 autres produits. Je pourrais effectivement les insérer à partir de la ligne 39 et recommencer le lendemain à 59....

Ce que je veux faciliter, c'est la lecture des données. Car en effet à la fin du moi je verrais s'accumuler dans la feuille 1 dans le groupe ''achat'', environs 300 lignes.

On me dira surement ''''eh bien tu les enleves journalierement et tu les colles manuellement sur la feuille-2'''

oui si je n'avais que ce groupe à gérer, ce serais très la solution.
Le problème est que ma base principal. se compose de 30 groupes différents.

(Achat, no stock, stock, high, low, QTE, Piece,) ensuite les ventes, le stock, les livraisons...et tout un tas de détail de que je me suis créer, pour faciliter, mes statistiques.

Donc de ce fait, je me sens vraiment dans le besoin de demander une macro, qui collerais automatiquement les données en fin de journée, sur une autre feuille, ce qui me permettrait de voir la feuille1, presque vierge....tout en ayant l'historique, sur l'autre feuille.

Sincerement Celeda, tu es très gentille, à vouloir m'aider et tes compations, me vont droit, dans le coeur.

merci
Hugo
 
C

Celeda

Guest
Bonjour et HELP - HELP : les specialistes en VBA

Hugo : je vais très franche avec toi. 1- je suis contente d'essayer de t'aider mais 2- ton cas m'interesse alors quand j'ai lu ton post je me doutais d'une fonctionnalité un peu plus ardue. Et le timer en plus !

J'ai compris ce que tu voulais faire car tes explications me semblent claires.
Néanmoins, il faut maintenant reproduire tout ce que tu as ecris dans un fichier exemplaire car j'entends derriere moi quelques personnes qui me disent ; un fichier, un fichier......
En effet, pour étayer cette question, les personnes qui vont essayer de faire une macro vont, eux être obligés de monter le fichier pour toi alors il faut leur simplifier la vie.
Ecrire en VBA est une chose. Mais il faut etre ''Visuel'' et illustrer dans ton fichier XLS avec des commentaires et des flêches tout ce que doit faire la macro. Je t'avoue que je suis sur un travail de graph ce matin pour mon boulot et que je n'ai pas le temps de préparer le fichier. Sorry.

Donc post à suivre mais si quelques VBAMasters avaient déjà des commentaires à faire, ils seraient certainement appréciés.
Merci
Celeda
 
@

@+Thierry

Guest
=> Mini Démo de copié/collé de Plage/Lignes

Bon alors me revoilà après avoir casser la croute quand m^me un peu devant l'ordi !!

Bon alors moi je me suis arrêté au premier post de HUgo..... çà avait l'air clair après le second post je t'avoue que je n'ai pas suivi....

On commence par cette petite démo de copié-collé, puis tu afine ta demande Hugo car vraiment çà à l'air pas clair....

Bonne Nuit
@+Thierry
 

Pièces jointes

  • Copie-Colle.zip
    10.8 KB · Affichages: 48
@

@+Thierry

Guest
Tiens je regardais ce fichier en fermant mes fenêtres......

faudrait faire un test... Si on click 2 Fois sur Report... il y a un bug ! (la ligne 1 de "Data" est virée avec les Boutons !! lol)

macro révisée :

Sub Report()
Dim PlageSource As String
Dim DerLigneCible As Integer
Dim DerLigneSource As Integer
DerLigneSource = Sheets("Data").Range("A65536").End(xlUp).Row
If DerLigneSource = 1 Then Exit Sub '<= TEST ICI pour le Bug
PlageSource = Sheets("Data").Range("A2:F" & DerLigneSource).Address
DerLigneCible = Sheets("Historik").Range("A65536").End(xlUp).Row + 1
Sheets("Data").Range(PlageSource).Cut
ActiveSheet.Paste Worksheets("Historik").Range("A" & DerLigneCible)

End Sub

Sorry...
@+Thierry
 
H

hugo

Guest
Re: => Mini Démo de copié/collé de Plage/Lignes

Bonsoir, à vous deux,
A Celeda, car, tu est la 1ère, à être intérréssé par mon problème et à thierry, car même si tu n'a pas tous compris, tu a bien bien voulu, tu étais prêt, à le résoudre, tu m'a même concocter, un fichier (quand même, ce n'est pas rien ), (d'ailleurs je ne l'ai pas ouvert, j'en suis navré car entre temps, je suis déjà sur un autre problème).

Vous êtes très compatissant.

J'avais posté sur un autre forum, je ne sais pas si je peux indiquer le lien, ici, mais un spécialiste de chez eux m'a donné la réponse

Le code d'oriqgine est

Sub Macro1()
'
' Copier coller feuille 1 dans suite de feuille 2
'
Dim DerniereLigne
'Cherche la derniere ligne non vide de la feuille 2
Sheets("Feuil2").Select
DerniereLigne = Sheets("Feuil2").Application.WorksheetFunction.CountA(Columns("A"))
Sheets("Feuil1").Select
Rows("1:20").Select 'selectionne les lignes 1 à 20 dans feuille 1
Selection.Copy
Sheets("Feuil2").Select
Cells(DerniereLigne + 1, 1).Select 'selectionne la 1ere cellule vide de la feuille 2
ActiveSheet.Paste
Sheets("Feuil1").Select
Application.CutCopyMode = False
[A1].Select
End Sub

-------------------------------------------

Et il marche du tonnerre.....

Je l'ai modifié comme cela avec mes références.

-------------------------------------------


Sub Macro1()
' Copier coller feuille 1 dans suite de feuille 2


Dim DerniereLigne
'Cherche la derniere ligne non vide de la feuille 2
Sheets("Historiques").Select
DerniereLigne = Sheets("Historiques").Application.WorksheetFunction.CountA(Columns("A"))
Sheets("commande").Select
Rows("36:47").Select 'selectionne les lignes 1 à 20 dans feuille 1
Selection.Copy
Sheets("Historiques").Select
Cells(DerniereLigne + 1, 1).Select 'selectionne la 1ere cellule vide de la feuille 2
ActiveSheet.Paste
Sheets("commande").Select
Application.CutCopyMode = False
[A1].Select

'

End Sub

--------------------------------------

Donc celui ci marche aussi.

Mais j'ai un autre problème, j'en ai d'ailleurs fais part sur l'autre forum,
Je vous recolle, le texte de mon explication non résolé.

-----------------------------------------

à titre indicatif tu a nommés
''Rows("1:20")''

Je les ai renommés
''Rows("36:47")''

pour le premier groupe...j'en ai environ 20
Je pense que je vais devoir faire 20 macros
1 macro pour chaque groupe de ligne, pour avoir 1 historique, pour chaque groupe.

Parfois cela m'arrive pour le premier groupe, ' de (36:47) ou plutot en reprenant l'exemple (1:20), de rajouter des lignes de produits en faisant copier (control insert)
et coller avec (control +) (en insérant 1 ligne).

donc la selection ne sera plus (36:47) mais (36:48ou49ou50) suivant les insertions.

La macro de toute les manières ne prendra que la selection du départ soit (36:47) (meme si j'ai insérer avant 47; il ne décalera pas dans le script (47-48-49-50....)

par contre (c'est comme c'a que mes totaux sont mémorisés) lorsque sur ma feuille1 d'excel, je met à la ligne 50, la formule (=somme(36:47)) et que j'insere 10 ou 20 ou + 30 ligne supplémentaires, la somme change automatiquement (=somme(36:87) par exemple.

c'a reviens à définir une demande de calcul des lignes se trouvant entre la ligne 36 et 47

je défini 36 comme (début du copier coller)
et 47 fin du copier coller)

donc j'insere à 38 jusqu'à maximum 46, les lignes de produits.

et la formule se retrouve comme avec enchantement, à (=somme(37:58) par exemple. Il prends en compte les insertions et réajuste la formule // aux lignes insérées.

Ce que la macro, ne fais pas.

le script ne change pas selon les insertions(coller) de ligne.

meme en indiquant une plage, plus large sur script, par exemple

''Rows("36:58")'', il ne faudra pas que je dépasse la ligne 58.

Donc comme je te disais, c'est pour cela que, je vais passé 2-3 jour, ''à ménager'' mon nouveaux plan de travail, car j'ai absolument besoin d'un historique sur la feuille 2 et de voir ma feuille1 quasiment vierge.

car j'ai trop de groupe à gérer. ( je ne me vois pas avoir 300 lignes de reca pour chaques groupes, sur la meme feuille, et non plus, je ne me vois pas, à 20h00 du soir devoir me taper les copier coller de tout les groupes, sur la feuille2 pour que le lendemain, ma feuille1 soit vierge.

Cependant si tu connais un moyen pour que sur le script, le ''Rows("1:20")'' ou ''Rows("36:47")'' se transforme, se réajuste, selon les insertion, cela m'évitrait bien des modication.

-----------------------------------------------------
FIN
-----------------
Effectivement je ne sais pas si tout cela est clair, comme disais Celeda, je devrais peut-être, vous envoyé un petit fichier en explicant par des flèches, et des couleurs, ce que je veux faire exactement.

JEvous souhaite une bonne nuit, et j'espère vous retrouver, bon matin de dimanche.

merci vraiment
Hugo
 
@

@+Thierry

Guest
Re: => Mini Démo de copié/collé de Plage/Lignes

Bonsoir ou Bonjour Hugo
Je ne sais pas quoi te répondre....

Si tu n'as pas ouvert le fichier que je t'ai fabriqué expressément... :-(

Ce que j'ai préparé se fiche éperdument du nombre de lignes que tu peux avoir inséré, déplacer ou tout ce que tu aurais pu faire sur ta feuille "commande" ("Data" dans mon exemple) sera bien reporté à la suite dans la feuille historique... Tout ce qu'il faut ce sont des données en colonne A1...

Le reste est géré... jusqu'à la ligne 32767 (valeur maxi d'une variable de type "Integer") et si çà ne suffit pas on peut passer en "Long"... et tu auras 65536 lignes...)

Ce que je peux voir dans les codes que tu as récupérés ci-dessus c'est que déjà c'est pas très net... des "Select" partout etc... Variables non déclarées... C'est disons de l'enregistrement de macro un peu bricolé.

Maintenant ton histoire de "Groupe" n'est toujours pas plus claire pour moi ? et par conséquent pour VBA !

Quels sont les Séparateurs dans ta feuille "Commande" ? si tu as un mot clef, un format ou je ne sais quoi... c'est facile de faire faire une distinction entre tes groupes... faut-il encore savoir de quoi on parle et ce que l'on doit chercher.

Il y a aussi la solution de nommer tes Plages de Groupes qui éviterait de faire des références absolues à des adresses de Cellules... Enfin il y a sûrement plein de solutions... Mais si tu n'ouvres pas les fichiers... Tu risques de passer à coté !!

Bon ben on verra bien
Allez Bye Bye...
@+Thierry
 
H

hugo

Guest
Re: => Mini Démo de copié/collé de Plage/Lignes

Bonjour Thierry,
Je suis stupéfais, à savoir, qu'en 2003, il existe encore des gens qui essaie de résoudre les problèmes des autres.

C'est très compatissant, et je ne sais pas comment vous remercier.

J'ai ouvert ton fichier d'exemple, et d'explication, je n'ai pas compris, comment tu a compilé les données, car je ne connais pas le système de bouton et de formulaire, cependant, je crois avoir bien compris, le principe, tu passe, par 3 étapes,

1ere, tu prends les données cachées, se trouvant dans les colonne de fin.
tu les paste dans les colonne de début (A,B,C,D....)

et tu repsse dans l'historik.

Donc je pense qu'il faudrais travailler sur les colonne de fin, chose qui ne me dérangerais pas.

J'ai mis un fichier joins avec les explications, pour voir si tu pourrais m'aider.

Je te remercie beaucoup, tu es vraiment sympa, et l'air très passionné.
Hugo

ps''c'a été dur pour que le fichier, fasse moins de 50Ko
 

Pièces jointes

  • forum1.xls
    46 KB · Affichages: 78
  • forum1.xls
    46 KB · Affichages: 79
  • forum1.xls
    46 KB · Affichages: 85
@

@+Thierry

Guest
Re: => Mini Démo de copié/collé en foction couleur de cellule

Bonjour Hugo et Bonjour le Forum.

Heuf, j'ai regardé ton fichier avec toutes tes explications embrouillées... Oui j'avais déjà bien compris ton problème...

A savoir :
Tu n'arrives pas en VBA à récupérer les adresses de cellules quand tu insères des nouvelleS lignes dans tes tableaux, alors qu'une simple formule arrive à se réactualiser suite à ce genre de changement. Et oui c'est normal... Il y a plein de moyens de contourner cette difficulté !

Par contre dans ton tableau c'était pas vraiment la peine de me ré-expliquer tout çà... J'aurai préféré avoir un exemple plus concret du vrai tableau.

Enfin qu'à cela ne tienne, vu que tes données sont placées sur des cellules de fond de couleur Orange... Je t'ai écrit un code qui récupèrera toutes les Lignes dont la première cellule est Orange...

L'exemple ci-joint est basé là dessus, tu peux insérer toutes les lignes que tu veux...
Par contre je n'ai pas testé sur des grands grands tableau... çà peut être un peu long vu que je test chaque cellule pour connaitre son Interior.ColorIndex... N'oublie pas non plus les limites d'une variable de Type "Integer" comme j'ai expliqué plus haut.

Tu sais en VBA il n'y a pas de problème il n'y a que des solutions.

Bon Dimanche et bon tests
@+Thierry
 

Pièces jointes

  • CopieColleCouleur.zip
    12.7 KB · Affichages: 61
H

hugo

Guest
Re: => Mini Démo de copié/collé en foction couleur de cellule

Thierry,
Je suis désolé, car tu m'a envoyé ce fichier, hier, et je n'ai pu le tester, que aujourd'hui, en espérant que tu ai passé un bon dimanche, je suis stupéfais, car je savais que j'allais trouvé ici, un peu d'aide, une petite fonction de contribution, un indice, pour que je puisse, trouver la solution, mais jamais je ne me suis dit que j'allais rencontrer, quelqu'un de fort sympathique, qui allait vraiment, vraiment, et le mot est faible, me macher le travail, car effectivement tu m'a completement formulé l'astuce, je ne sais pas en combien de temps tu a fait cela, mais c'est grandiosement bien fais, avec les couleurs, les titres, tout y est.

Je ne sais pas comment te remercier, si je peux faire quelque chose, pour toi ?

Merci beaucoup
Hugo.
 
@

@+Thierry

Guest
Re: => Mini Démo de copié/collé en foction couleur de cellule

Bonjour Hugo, et les gens qui passeront pas ce fil de discussion.

Je n'ai pas passé plus de temps à écrire le code que celui d'écrire le post ! :)
C'est assez basic comme macro.. L'important en VBA c'est de ce fixer un Objectif et de s'y maintenir. Vu que ton fichier contenanait des couleurs... C'était "finger in the nose" !!

Pour me remercier... Hum hum, ben viens plus souvent nous rendre visite plutôt que de trainer dans d'autres forums !! lol

(Je blague, tu fais ce que tu veux !!)

Allez bonne journée
@+Thierry
 
H

hugo

Guest
Re: => Mini Démo de copié/collé en foction couleur de cellule

Merci beaucoup thierry,
Je te souhaite vraiment une bonne journée, je sais que je ne pourrais pas en dire plus aujourdhui, car j'ai pas mal de boulot.

je ne savais pas que les macros pouvaient donner autant de résultats, j'ai déjà plein d'idées en tête.

j'espère pouvoir faire vite pour vite revenir te dire bonjour.

j'espère que ce soir je pourrais revenir.

merci merci

'''Thierry, j'ai une question, surement un peu indiscrète, j'imagine que tu n'ai pas le seul à être specialiste sur ce forum. vue le nombre de message par jour, et que chacun, arrive à avoir une solution, je suis tout de même très étonné, à savoir de quoi vous vivez ?

Car pour le moment je n'ai pas vu une seule facture.

Arf..lol, la question a ne pas poser

excuse,
Hugo
 

Discussions similaires

Statistiques des forums

Discussions
314 651
Messages
2 111 553
Membres
111 199
dernier inscrit
mavoungou regis