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

une data perdue lors d'un transpose

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

gosselien

XLDnaute Barbatruc
Bonjour,

En feuille "source" des dates et des données; en feuille "cible" je cherche à avoir ces dates et date transposées mais j'ai 2 soucis:
1 - mon code oublie à chaque date une donnée (la dernière de sa série)
2 - si les dates se placent bien en ligne1 de l'onglet cible, les données ne commencent pas en ligne2 et je ne vois pas pourquoi...

Merci de m'éclairer

P.
 

Pièces jointes

Re : une data perdue lors d'un transpose

oups ...
sorry j'ai fais une copie acceptable niveau taille mais oublié d'y mettre ce code:

Option Base 1
Sub Inverser_regrouper()
' regrouper les dates de la colonne A feuille Source et
' recopier celles-ci en feuille cible
' 10/2015
'
Set f = Sheets("source")
Set f1 = Sheets("cible")
Set d = CreateObject("Scripting.Dictionary")
Set d2 = CreateObject("Scripting.Dictionary")
f.Select
For Each c In [A2].Resize(Application.CountA([A:A]))
tmp = c.Value & c.Offset(, 1)
If c.Value <> "" Then
If Not d2.exists(tmp) Then d(c.Value) = d(c.Value) & "|" & c.Offset(, 1)
d2(tmp) = ""
End If
Next c
ligne = 1: col = 4
f1.Select
For Each c In d.keys 'pour chaque clé (clé = date ici)
f1.Cells(ligne, col) = c 'les dates une après l'autre de gauche à droite en commencant en colonne 4 ligne 1
a = Split(d.Item(c), "|")
f1.Cells(1, col).Offset(1).Resize(UBound(a)) = Application.Transpose(a)
col = col + 1
Next c
f1.Select
End Sub
 
Re : une data perdue lors d'un transpose

Re,

suis pas top pour les dictionnaires.. mais à priori. ton souci numéro 2 vient du numéro 1

Code:
For Each c In d.keys 'pour chaque clé (clé = date ici)
f1.Cells(ligne, col) = c 'les dates une après l'autre de gauche à droite en commencant en colonne 4 ligne 1
a = Split(d.Item(c), "|")
f1.Cells(1, col).Offset(1).Resize(UBound(a)) = Application.Transpose(a)
col = col + 1
Next c

à remplacer par
Code:
For Each c In d.keys 'pour chaque clé (clé = date ici)
    f1.Cells(ligne, col) = c  'les dates une après l'autre de gauche à droite en commencant en colonne 4 ligne 1
    a = Split(d.Item(c), "|")
    f1.Cells(2, col).Resize(UBound(a)) = Application.transpose(a)
    col = col + 1
Next c

f1.Cells(1, col).Offset(1).Resize(UBound(a)) = Application.Transpose(a)
tu commences à la ligne 1 avec un offset de 1 ligne. pourquoi ne pas faire directement
f1.Cells(2, col).Resize(UBound(a)) = Application.transpose(a)

tu vois en ligne 2, du vide.. je pense qu'il s'agit en fait de ta ligne manquante..
c'est là où ma connaissance des dictionnaires est nulle.. quand tu le remplis, n'y a t il pas un risque que
data 14/10/15 10 soit vu comme déjà existant car il y a déjà data 14/10/15 1
 
Re : une data perdue lors d'un transpose

c'est là où ma connaissance des dictionnaires est nulle.. quand tu le remplis, n'y a t il pas un risque que
data 14/10/15 10 soit vu comme déjà existant car il y a déjà data 14/10/15 1

Hello,

non parce que si tu as 8 x la même donné pour une date et 2 autres; ça fait donc 3 data pour cette date et il devrait transposer 3 données pour une seule date...
 
Re : une data perdue lors d'un transpose

tout est dans le Ubound...
avec ceci.. on récupère la donnée manquante..

f1.Cells(2, col).Resize(UBound(a) + 1) = Application.transpose(a)


J'adore le mode pas à pas et les espions. on apprend beaucoup sans passer par l'aide excel !! ;-)
 
Re : une data perdue lors d'un transpose

Oui je m'en sers aussi du pas à pas mais j'ai quelques codes où je n'ai pas ce "+1" et quand tu mets ta souris sur le UBOUND il affiche bien le nombre de données contenues pour une date, mais le transpose en oublie une.
 
Re : une data perdue lors d'un transpose

Bonjour gosselien, vgendron

Même avec Option Base 1, l'indice du tableau a commence à 0; s'il y a 10 éléments Ubound(a) vaut 9. D'où le +1 nécessaire

Pour la ligne vide insérée en ligne 2, elle est du à l'élément a(0) qui est vide, car les item du dico d commencent par un "|" et le split génére un élément supplémentaire vide.

Il faudrait modifier le chargement du dico ainsi:
Code:
 For Each c In f.[A2].Resize(Application.CountA(f.[A:A]))
    If c.Value <> "" Then
        If Not d.exists(c.Value) Then
            d(c.Value) = c.Offset(, 1)
        Else
            d(c.Value) = d(c.Value) & "|" & c.Offset(, 1)
        End If
    End If
 Next c

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Question code VBA
Réponses
2
Affichages
578
Réponses
3
Affichages
620
P
Réponses
6
Affichages
2 K
Pat13127
P
M
Réponses
4
Affichages
935
mimich_88
M
J
Réponses
1
Affichages
692
J
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…