XL 2013 Mettre en forme des élements d une base de données

  • Initiateur de la discussion Initiateur de la discussion LORDDD
  • Date de début Date de début

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 !

LORDDD

XLDnaute Occasionnel
Bonjour et bonne année 2017 à vous tous.
Je tente de mettre en forme une base de données brutes en tableau facilement lisible

Onglet base vous avez les données brutes a savoir 5 hôtels sur différentes dates avec 2 tarifs
Onglet Récap, je souhaite ranger par hôtel par date un seul type de prix, et ajouter l'info code prix et saison.

Vous trouverez un bout de code VBA dans le projet mais tourne en rond.

Merci de votre aide
Cordialement
 

Pièces jointes

Bonjour LORDDD,

un essai:

VB:
Sub Transfert()
Dim T, dico, i As Long, Lig As Long, Col As Integer, T1, T2
Set dico = CreateObject("Scripting.Dictionary")
With Worksheets("Base")
T = .Range("A4:J" & .Range("A" & Rows.Count).End(xlUp).Row)
Dini = CDbl(.Range("A4"))
End With
For i = LBound(T, 1) To UBound(T, 1)
    If T(i, 8) = "Previous" Then
        clé = T(i, 3) & "|" & CDbl(T(i, 1))
        dico(clé) = T(i, 5) & "|" & T(i, 10) & "|" & T(i, 9)
    End If
Next

With Worksheets("Recap")
For Each clé In dico.keys
    T1 = Split(clé, "|")
    T2 = Split(dico(clé), "|")
    Lig = CLng(Right(T1(0), 1)) * 3
    Col = T1(1) - Dini + 3
    Cells(Lig, 1) = T1(0)
    Cells(2, Col) = T1(1)
    Cells(Lig, Col).Resize(UBound(T2, 1) + 1, 1) = Application.Transpose(T2)
Next
End With
End Sub

A+
 
re et bonjour gosselien,

Je viens de me souvenir que dans la feuille Base, colonne C, pour l'Hotel 1, il y a un espace après le 1 ( cet espace n'existe pas pour les autres )

Espace à supprimer par rechercher "1 " et remplacer par "1" sur toute la colonne C.

A+
 
Ok Paf, je viens de faire la modif.
Pour l'exemple j'avais simplifier les noms d 'hotels mais en reel les nom sont du style :
Hôtel de la place d'air, légèrement plus compliqué, est ce que cela marche aussi.

En tout cas tu viens de me sauver...!
Merci de ton aide précieuse, et de la participation de Gosselien et Dranreb
 
La macro me semble fort compliqué a décortiquer
Ne cherchez pas, bien sûr à décortiquer la programmation de service, ça ne sert à rien. Lisez juste les commentaires guide d'utilisation pour avoir une idée claire de ce que renvoie toujours la fonction Gigogne selon les paramètres qu'on lui spécifie, comme dans la Sub Worksheet_Activate() utilisatrice. Une fois cela compris par cœur vous pourrez écrire des procédures faciles et courtes. Mais comment ça marche, ça ne sert à rien d'essayer de le comprendre.
 
Re,

nouvelle version qui accepte n'importe quel nom d'hotel.
VB:
Transfert_V2()
Dim T, dico, dico2, i As Long, Lig As Long, Col As Integer, T1, T2, x As Integer
Set dico = CreateObject("Scripting.Dictionary")
Set dico2 = CreateObject("Scripting.Dictionary")
With Worksheets("Base")
T = .Range("A4:J" & .Range("A" & Rows.Count).End(xlUp).Row)
Dini = CDbl(.Range("A4"))
End With
For i = LBound(T, 1) To UBound(T, 1)
    If Not dico2.exists(T(i, 3)) Then
        x = x + 1
        dico2(T(i, 3)) = x
    End If
Next

For i = LBound(T, 1) To UBound(T, 1)
    If T(i, 8) = "Previous" Then
        clé = T(i, 3) & "|" & CDbl(T(i, 1))
        dico(clé) = T(i, 5) & "|" & T(i, 10) & "|" & T(i, 9)
    End If
Next

With Worksheets("Recap")
For Each clé In dico.keys
    T1 = Split(clé, "|")
    T2 = Split(dico(clé), "|")
    'Lig = CLng(Right(T1(0), 1)) * 3
    Lig = dico2(T1(0)) * 3
    Col = T1(1) - Dini + 3
    Cells(Lig, 1) = T1(0)
    Cells(2, Col) = T1(1)
    Cells(Lig, Col).Resize(UBound(T2, 1) + 1, 1) = Application.Transpose(T2)
Next
End With
End Sub

A+
 
Re,

Ok cela fonctionne super bien , j'ai juste ajouter une petite ligne de plus, car je lance le programme de la page Para en moyenne.

à moins qu'on veuille afficher la feuille Para, Sheets ("Recap"). Select ne sert à rien puisque toutes les lectures écritures sont référencées à une feuille. On reste donc sur la feuille active au moment du lancement, et si au moment du lancement on est sur la feuille Para ..... on y reste ....

Par ailleurs, pas compris "car je lance le programme de la page Para en moyenne"

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

Réponses
3
Affichages
232
Réponses
9
Affichages
739
Réponses
3
Affichages
469
Retour