réorganiser de maniére automatique sur une nouvelle feuille Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
p
pwskeud
Nouveau venu
Nouveau venu
Messages : 2
Inscrit le : 17 août 2017
Version d'Excel : 2010 FR

Message par pwskeud » 17 août 2017, 12:10

Bonjour a tous,

Dans le cadre de mon travail je dois réorganiser chaque jour des données que je recois sur une feuille excel; ce travail est chronophage, fastidieux et ininteressant.
Les données que je recois sont toujours organisées de la meme maniere. Voila ce que je dois faire dans l'ordre chronologique :

copier la colonne 10 pour la coller sur une nouvelle feuille en colonne 1
copier la colonne 2 et 3 pour la coller sur la nouvelle feuille en colonne 2 et 3
copier la colonne 13 '' '' '' 4
'' '' 24 " " " 5
" " 11 " " 6
copier la colonne 21 pour la coller sur la nouvelle feuille en colonne 7
trier ensuite la nouvelle feuille dans l'ordre décroissant en fonction de la colonne 6.

Je commence a peine a travailler avc excel donc soyez clément avec moi dans vos explications.

pour résoudre ce probleme, j'ai essayé de m'initier au VBA et j'ai commencé a réaliser le programme suiant :
Sub CopierDonnees()

Dim Entree As Workbook, Sortie As Workbook

Nomfichierentree = Application.GetOpenFilename("Fichier Excel (*.xls), *.xsl")
' On verifie que l'on a selectionné un nom de classeur
If Nomfichierentree <> False Then
' On ouvre le classeur
Set Entree = Workbooks.Open(Nomfichierentree)


NomFichierSortie = Application.GetOpenFilename("Fichier Excel (*.xls), *.xsl")
If NomFichierSortie <> False Then
Set Sortie = Workbooks.Open(NomFichierSortie)

' Ici j'ai du commnce a mettre cellule par cellule car je ne sais pas comment le faire avec toute une colonne
Sortie.Worksheets("Feuil1").Cells(2, 1) = Entree.Worksheets("Feuil1").Cells(2, 10)
Sortie.Worksheets("Feuil1").Cells(3, 1) = Entree.Worksheets("Feuil1").Cells(3, 10)
Sortie.Worksheets("Feuil1").Cells(4, 1) = Entree.Worksheets("Feuil1").Cells(4, 10)



' On ferme le classeur
Sortie.Close


End If
' On ferme le second
Entree.Close
End If

Vous comprendrez que je me tourne vers vous car tel que j'ai commencé ca va etre chaud je crois ^^ en plus j'ai un probleme, le contenu de certaines cellules est une date et quand je fais le transfert via le VBA ca me donne une suite de chiffres qui n'a pas de sens...

Merci beaucoup pour l'aide que vous pourrez m'offrir !
Avatar du membre
Dan
Modérateur
Modérateur
Messages : 6'360
Appréciations reçues : 108
Inscrit le : 27 avril 2007
Version d'Excel : Office 365, Mac 2011

Message par Dan » 17 août 2017, 13:24

Bonjour

Avec un fichier ce serait plus facile mais vous pouvez essayer comme ceci en remplaçant les 3 lignes ci-dessous par le code proposé
 Sortie.Worksheets("Feuil1").Cells(2, 1) = Entree.Worksheets("Feuil1").Cells(2, 10)
 Sortie.Worksheets("Feuil1").Cells(3, 1) = Entree.Worksheets("Feuil1").Cells(3, 10)
 Sortie.Worksheets("Feuil1").Cells(4, 1) = Entree.Worksheets("Feuil1").Cells(4, 10)
Dim dlg As Integer
With Entree.Worksheets("Feuil1")
dlg = .Range("A" & .Rows.Count).End(xlUp).Row
    .Range(.Cells(2, 1), .Cells(dlg, 1)).Copy Sortie.Worksheets("Feuil1").Cells(2, 10)
    .Range(.Cells(3, 1), .Cells(dlg, 1)).Copy Sortie.Worksheets("Feuil1").Cells(3, 10)
    .Range(.Cells(4, 1), .Cells(dlg, 1)).Copy Sortie.Worksheets("Feuil1").Cells(4, 10)
End With
J'ai supposé que :
- Le fichier Entree comporte le code
- Les données sont copiées depuis le fichier Entree vers le fichier Sortie

Si Entree comporte le code Copierdonnees vous pourriez remplacer le nom Entree par THISWORKBOOK. PLus simple car vous ne devez pas declarer ENTREE via SET = ...

Tout cela à vérifier vu que je n'ai pas accès au fichier

Cordialement
@+ Dan ;)
Avatar du membre
78chris
Passionné d'Excel
Passionné d'Excel
Messages : 5'533
Appréciations reçues : 416
Inscrit le : 9 juillet 2017
Version d'Excel : 2010 à 2019 + 365

Message par 78chris » 17 août 2017, 13:41

Bonjour
Coucou Dan :)
pwskeud a écrit :... en plus j'ai un probleme, le contenu de certaines cellules est une date et quand je fais le transfert via le VBA ca me donne une suite de chiffres qui n'a pas de sens...
Petite précision : pour Excel c'est la notion de temps qui n'a pas de sens !
Comme tout système informatique, il utilise des nombres et donc traduit nos dates en nombres.

Aujourd'hui pour Excel c'est 42964.

Il suffit d'appliquer le format date à tes colonnes pour qu'elles apparaissent sous la forme habituelle.
Chris
Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
Confucius
p
pwskeud
Nouveau venu
Nouveau venu
Messages : 2
Inscrit le : 17 août 2017
Version d'Excel : 2010 FR

Message par pwskeud » 17 août 2017, 15:04

Bonjour Dan,

Tout d'abord un grand merci pour ta réponse!

Si j'ai bien compris tu introduis une variable dlg grace a Dim ! C'est top grace a ca pas besoin de lister toutes les cellules, il n'y a plus qu'a faire une rotation ensuite c'est top pour traiter de plus gros fichier !

je m'en suis cependant sorti en créant une variable (as integrer et as variant) colonnes dans laquelle j'ai stocké ce qui m'interessait dans l'ordre! Grace a vous j'ai ensuite mis la fonction with mais pas a votre maniére puisque cela me demander de lister ensuite tt les cellules... J'ai rajouté une boucle for a l'interieur et j'ai ensuite fait tourner! ::B-

par contre dans mon programme j'ai bien compris l'utilité de mettre THISWORKBOOK puisque ça évite de devoir créer avant une feuille vierge mais je ne maitrise pas trop la syntaxe. J'ai donc mis a la place :

Set Entree = Source.Worksheets(1).UsedRange.EntireRow

Au final ca me donne aprés avoir introduit toutes mes variables (et ça marche trés bien) : ::D

Colonnes = Array(, 10, 2, 3, 13, 4, 24, 11, 6)
NomSource = Application.GetOpenFilename("Fichier Excel (*.xls), *.xls")
If NomSource = False Then Exit Sub
Set Source = Workbooks.Open(NomSource)
Set Entree = Source.Worksheets(1).UsedRange.EntireRow
Set Sortie = Workbooks.Add(xlWBATWorksheet)
With Sortie.Worksheets(1)
For Colonne = 1 To UBound(Colonnes)
Entree.Columns(Colonnes(Colonne)).Copy .Cells(1, Colonne)
Next Colonne
End With
Source.Close

End Sub

Ce faisant j'ai aussi évité le probléme des dates sous excel puisque j'ai crée colonnes en varaint et integrer mais grace a vous, 78Chris j'ai compris qu'un logiciel ne sait pas ce qu'est le temps!

Vraiment, un grand merci, vous venez de me faire gagner un temps trés précieux a moi et mes collégues qui font la meme chose!
:slt:
Avatar du membre
Dan
Modérateur
Modérateur
Messages : 6'360
Appréciations reçues : 108
Inscrit le : 27 avril 2007
Version d'Excel : Office 365, Mac 2011

Message par Dan » 17 août 2017, 21:01

Re

Pour 78chris, je n'avais pas lu cette ligne concernant les dates. :?

Pour pwskeud
par contre dans mon programme j'ai bien compris l'utilité de mettre THISWORKBOOK puisque ça évite de devoir créer avant une feuille vierge mais je ne maitrise pas trop la syntaxe.
This workbook t'évite de déclarer le classeur dans lequel tu exécutes la macro.
En relisant ton code, je ne vois pas très bien le rapport entre les deux codes du fil mais bon si cela fonctionne... :D

Cordialement
@+ Dan ;)
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message