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

Probléme de mise en forme vba

  • Initiateur de la discussion Initiateur de la discussion cheikh
  • 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 !

C

cheikh

Guest
Bonjour,
Avec un fichier de Boisgontier Jacques
A partir d’un modèle je génère mes fichiers et ça marche très bien mais en ce qui concerne la mise en page du fichier généré je n’y arrive pas encore. J’aimerais avoir pour chaque nouveau client un saut de quatre lignes comme j’ai essayé de le montrer dans l’onglet exemple car pour chaque client j’aimerai tracer une courbe d’évolution à côté.
NB: chaque client doit aussi avoir un espace pour les 4 jalons ordonnés suivant cet ordre (MAT, SO, FL, COC)

Merci d’avance.
 

Pièces jointes

Re : Probléme de mise en forme vba

Bonjour,

Voici une macro qui va écrire tes résultats directement sur les bonnes lignes

Code:
Sub essai()
Dim tab_L
Set tab_L = CreateObject("scripting.dictionary")
Dim tab_Datas
Set tab_Datas = CreateObject("scripting.dictionary")
'----------------------------------------------------------------
'                         Lecture des données
'----------------------------------------------------------------
Dim Rang, Jalon
With Sheets("Base1")
    l = 6
    While .Cells(l, 1) <> ""
        Rang = "R" & .Cells(l, 2)
        Jalon = .Cells(l, 4)
        ' indexation client pour numéro de ligne
        If tab_L.exists(Rang) = False Then
            cpt = cpt + 1
            tab_L(Rang) = cpt
        End If
        ' mémorisation des données
        cle = Rang & "_" & Jalon
        tab_Datas(cle) = Array(.Cells(l, 5), .Cells(l, 6), .Cells(l, 7))
        l = l + 1
    Wend
End With
'----------------------------------------------------------------
'                         ecriture resultat
'----------------------------------------------------------------
With Sheets("Exemple")

For Each cle In tab_Datas
    Rang = Split(cle, "_")(0)
    Jalon = Split(cle, "_")(1)
    
    l = tab_L(Rang) * 8 + 1
    Select Case Jalon
        Case "MAT"
        Case "SO": l = l + 1
        Case "FE": l = l + 2
        Case "COC": l = l + 3
    End Select
    .Cells(l, 3) = Rang
    .Cells(l, 4) = Jalon
    .Cells(l, 5) = tab_Datas(cle)(0)
    .Cells(l, 6) = tab_Datas(cle)(1)
    .Cells(l, 7) = tab_Datas(cle)(2)
    
Next
End With
End Sub
 
Re : Probléme de mise en forme vba

Bonjour et merci pour votre réponse.
Votre solution a débloqué un peu la situation sauf que la feuille "Exemple" ne doit pas exister c'etait juste pour vous montrer ce que je veux avoir à la fin. Et les clients sont pas limités à 4 seulment.
Votre macro je l'ai placé dans "Base1".
J'espère que j'ai bien expliqué.

Merci.
 
Re : Probléme de mise en forme vba

Pour la feuille exemple, tu peux la renommer comme tu veux.

La macro a aucune limite en se qui concerne le nombre de client, il faudra seulement recopier la mise en forme des tableaux par client.

A+
 
Re : Probléme de mise en forme vba

Tu as modifié :
'----------------------------------------------------------------
' ecriture resultat
'----------------------------------------------------------------
With Sheets("modèle")

Si tu exécute la macro essai le résultat sera sur la feuille modèle et non sur S_curvevoiture
 
Re : Probléme de mise en forme vba

Bonjour,
effectivement ça marche trés bien votr solution.
Mais je veux avoir cette mise en forme au niveau de mes fichiers "S_curve.." qui sont crées. Je mexplique, comme appareils nous pouvons avoir voitures et moto à la foi. donc j'aurai deux fichiers("s_curvevoiture" et s_curvemoto")
Pourrions nous pas compléter le macro "creeronglet" avec ta solution "macro essai"?

Merci encore.
 
Re : Probléme de mise en forme vba

Bonjour,

Voici une nouvelle version qui n'a pas de limite dans le nombre d'appareil

Code:
Option Explicit
Sub essai()
supOnglets
Dim tab_L
Set tab_L = CreateObject("scripting.dictionary")
Dim tab_Datas
Set tab_Datas = CreateObject("scripting.dictionary")
Dim tab_Appareil
Set tab_Appareil = CreateObject("scripting.dictionary")
'----------------------------------------------------------------
'                         Lecture des données
'----------------------------------------------------------------
Dim Rang, Jalon, Appareil
Dim cpt, cle, l, cle1
Dim nom_onglet
With Sheets("Base1")
    l = 6
    While .Cells(l, 1) <> ""
        Rang = .Cells(l, 2)
        Jalon = .Cells(l, 4)
        Appareil = LCase(Trim(.Cells(l, 1)))
        '------------------------------------------- création nouvel onglet
        If tab_Appareil.exists(Appareil) = False Then
            nom_onglet = "S_curve" & Appareil
            Sheets("modèle").Copy After:=Sheets(Sheets.Count)
            ActiveSheet.Name = nom_onglet
            Sheets(nom_onglet).Cells(5, 3) = Appareil
            tab_Appareil(Appareil) = 1
        End If
        '------------------------------------------- indexation client pour numéro de ligne suivant appareil
        cle1 = Appareil & "_" & CStr(Rang)
        If tab_L.exists(cle1) = False Then
            cpt = 0
            For Each cle2 In tab_L
                If Split(cle2, "_")(0) = Appareil Then cpt = cpt + 1
            Next
            tab_L(cle1) = cpt + 1
        End If
        '------------------------------------------- mémorisation des données
        cle = Appareil & "_" & Rang & "_" & Jalon
        tab_Datas(cle) = Array(.Cells(l, 5), .Cells(l, 6), .Cells(l, 7))
        l = l + 1
    Wend
End With
'----------------------------------------------------------------
'                         ecriture resultat
'----------------------------------------------------------------


For Each cle In tab_Datas
    Appareil = Split(cle, "_")(0)
    Rang = Split(cle, "_")(1)
    Jalon = Split(cle, "_")(2)
    
    cle1 = Appareil & "_" & CStr(Rang)
    nom_onglet = "S_curve" & Appareil

    l = tab_L(cle1) * 8 + 1
    Select Case Jalon
        Case "MAT"
        Case "SO": l = l + 1
        Case "FE": l = l + 2
        Case "COC": l = l + 3
    End Select
    With Sheets(nom_onglet)
        .Cells(l, 3) = Rang
        .Cells(l, 4) = Jalon
        .Cells(l, 5) = tab_Datas(cle)(0)
        .Cells(l, 6) = tab_Datas(cle)(1)
        .Cells(l, 7) = tab_Datas(cle)(2)
    End With
Next

End Sub
 
Re : Probléme de mise en forme vba

Bonjour,
c'est impecable et ça m'avait pris une semaine pour en arriver là.
NB: variable cle2 à declarer. Mais ça marche super bien.
Mais c'est vrais il n'a pas de limite

Merci pour tt.
😎
 
Dernière modification par un modérateur:
Re : Probléme de mise en forme vba

Bonjour,
C'est encore moi, j'ai un petit souci comme je vous l'avais dit le macro est super mais j'ai remarqué qu'il me recopie seulement les 5 enrejustrements de mes lignes par exemple j'ai pas les "Actuals" or que je voudrais avoir tte la ligne.

Merci d'avance.
 
Re : Probléme de mise en forme vba

Bonjour,

Il faut modifier la ligne :
Code:
        tab_Datas(cle) = Array(.Cells(l, 5), .Cells(l, 6), .Cells(l, 7)[B][COLOR="#FF0000"], .Cells(l, 8)[/COLOR][/B])
J'ai rajouté la colonne 8
Puis

Code:
        .Cells(l, 7) = tab_Datas(cle)(2)

        [B].Cells(l, 8) = tab_Datas(cle)(3)[/B]
 
Re : Probléme de mise en forme vba

Re,

Primo le fichier joint à évolué depuis ta première demande, l'onglet base à changé.

Secondo: il faut essayer de comprendre le code

tab_Datas(cle) = Array(.Cells(l, 5), .Cells(l, 6), .Cells(l, 7), .Cells(l, 8))
Ici on mémorise un tableau contenant les colonnes 5,6,7,8 avec la référence 'cle'

Pour écrire les résultats
.Cells(l, 5) = tab_Datas(cle)(0)
.Cells(l, 6) = tab_Datas(cle)(1)
.Cells(l, 7) = tab_Datas(cle)(2)
.Cells(l, 8) = tab_Datas(cle)(3)

en colonne 5 on va écrire l'élément 0 de la référence 'cle' du tableau tab_Datas
puis idem pour les colonnes suivantes

Il faut donc dans l'array savoir se qu'on veut y mettre et définir l'ordre pour ensuite restituer les bonnes valeurs

N'ayant pas ta dernière version de fichier j'ai pensé que la nouvelle valeur que tu voulais récupérer était placée en colonne 8 alors qu'elle est dans la 3

C'est souvent le problème : un manque d'information, ce qui évident pour soi ne l'est pas forcément pour les autres.

A+
 
Re : Probléme de mise en forme vba

Bonjour,
je reviens vers vous pour un petit souci, j'ai remarqué qu'à chaque foi que j'ai deux dates pour un même jalon, il prend que la derniere dates. J'aimerai si possible avoir tous les dates comme j'ai montré dans l'exemple avec le rang R1002.

Merci d'avance.
 

Pièces jointes

- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…