Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Autres Transférer des données d'une feuille Excel vers une autre avec subtilité ...

furiousxsi

XLDnaute Nouveau
Bonjour,

Je souhaiterai transféré automatiquement une base de données qui est classé par colonne en feuille1 sur feuille2 en mettant en ligne et en respectant la case date et les équipes concerné ça sera plus lisible

à tout de suite
 

Pièces jointes

  • Classement auto par date.xlsx
    44.4 KB · Affichages: 7

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @furiousxsi

Un essai en VBA.
Le tableau se met à jour quand on modifie une valeur dans les colonnes A à C (pour débuter, retapez une valeur dans une de ces trois colonnes).

nota : si pour une date donnée et une équipe donnée, il y a plusieurs lignes, alors on ajoute les valeurs de ces lignes pour le tableau final.

Le code est dans le module de code associé à la feuille "Feuil1"/
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim dLig, dCol, t, i&, n&, r
 
   If Intersect(Range("a:c"), Target) Is Nothing Then Exit Sub
   Application.ScreenUpdating = False
   Set dLig = CreateObject("scripting.dictionary"): Set dCol = CreateObject("scripting.dictionary")
   Columns("a:a").Copy Columns("e:e")
   Columns("e:e").Sort key1:=Range("e1"), order1:=xlDescending, Header:=xlYes
   Columns("e:e").RemoveDuplicates Columns:=1, Header:=xlYes
   t = Intersect(Range("e:e"), Me.UsedRange).Value2
   For i = 2 To UBound(t)
      If t(i, 1) <> "" Then If IsNumeric(t(i, 1)) Then dCol(CStr(t(i, 1))) = 1 + dCol.Count
   Next i

   Columns("b:b").Copy Columns("e:e")
   Columns("e:e").Sort key1:=Range("e1"), order1:=xlAscending, Header:=xlYes, MatchCase:=False
   Columns("e:e").RemoveDuplicates Columns:=1, Header:=xlYes
   t = Intersect(Range("e:e"), Me.UsedRange).Value
   For i = 2 To UBound(t)
      If t(i, 1) <> "" Then dLig(CStr(t(i, 1))) = 1 + dLig.Count
   Next i

   ReDim r(1 To dLig.Count, 1 To dCol.Count)
   t = Intersect(Range("a:c"), Me.UsedRange).Value2

   For i = 2 To UBound(t)
      If t(i, 1) <> "" Then
         If IsNumeric(t(i, 1)) Then r(dLig(t(i, 2)), dCol(CStr(t(i, 1)))) = r(dLig(t(i, 2)), dCol(CStr(t(i, 1)))) + t(i, 3)
      End If
   Next i

   Range(Range("e1"), Range("e1").End(xlToRight)).EntireColumn.Clear
   Range("f1").Resize(, dCol.Count) = dCol.keys
   Range("e2").Resize(dLig.Count) = Application.Transpose(dLig.keys)
   Range("f2").Resize(UBound(r), UBound(r, 2)) = r
   Range("f1").Resize(, dCol.Count).NumberFormat = "dd mmm yyyy"
   Range("e1").Resize(dLig.Count + 1, dCol.Count + 1).Borders.LineStyle = xlContinuous
   Range("f1").Resize(, dCol.Count).Orientation = 60
   Range("e1").Resize(dLig.Count + 1, dCol.Count + 1).EntireColumn.AutoFit
End Sub
 

Pièces jointes

  • furiousxsi- Classement auto par date- v1.xlsm
    49.1 KB · Affichages: 7

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Je n'ai pas prêté attention que vous désirez le résultat sur Feuil2. Voici la version qui le fait.

Le tableau se met à jour chaque fois qu'on sélectionne la feuille Feuil2.
Le code est dans le module de la feuille Feuil2.
 

Pièces jointes

  • furiousxsi- Classement auto par date- v2.xlsm
    49.9 KB · Affichages: 2
Dernière édition:

furiousxsi

XLDnaute Nouveau
j'ai testé c'est fonctionnel sur le fichier numéro 1
j'ai mis d'autres données ca ne fonctionne pas ... je te fais parvenir mon fichier v2
 

Pièces jointes

  • furiousxsi- Classement auto par date- v2.xlsm
    40.4 KB · Affichages: 6

Lolote83

XLDnaute Barbatruc
Bonjour à tous
Merci @mapomme pour ton intervention.
@furiousxsi , qu'est ce qui ne va pas dans ma proposition ?
Dans le post#4 ou tu fournis une petite copie d'écran, c'est difficile de pourvoir comparer quelque chose !!!!

As tu remarqué que sur le TCD joint, il y avait des petits "+" pour ouvrir le mois et donc afficher les jours en conséquence.




@+ Lolote83
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Si la structure des données est changeante, on va avoir du mal à s'accorder
Dans le fichier de départ, les dates sont des dates "pures" sans heure et c'est avec cette état de fait que j'ai composé.
Mais dans le dernier fichier du message #9, les dates sont des dates avec heure !!!!

Ce n'est pas la même chose... Et les résultats s'en ressentent.

Faut-il laisser tomber les heures ?
 

furiousxsi

XLDnaute Nouveau
non je n'avais pas remarqué ... je le constate sur ta capture d'écran ... je vais revoir ça de plus prés
 

furiousxsi

XLDnaute Nouveau
oui on peut laisser tomber les heures. désolé
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…