Besoin d'aide - Formatage de devis

youki

XLDnaute Occasionnel
Bonjour, je souhaiterais formater un devis selon des forfaits. Ce devis est créé en amont de façons automatique. Les lignes à formater sont toujours précédées d'un début et d'une fin. Pour ces lignes encadrées je souhaite en faire la somme et n'afficher que le contenu du total plus le nom du forfait correspondant.

Je joins un fichier pour exemple. La présentation dans le fichier (exepté les couleurs)est exactement celle du fichier créé.

Si vous avez une idée pour formater automatiquement le fichier, j'vous remercie de m'en faire part.
 

Pièces jointes

  • exemple.xls
    22.5 KB · Affichages: 125
  • exemple.xls
    22.5 KB · Affichages: 131
  • exemple.xls
    22.5 KB · Affichages: 125

cbea

XLDnaute Impliqué
Re : Besoin d'aide - Formatage de devis

Bonsoir youki,

Voici une solution avec du code VBA.
J'ai rajouté un bouton "Transférer" qui permet d'avoir le résultat demandé.
 

Pièces jointes

  • exemple_v1.xls
    35 KB · Affichages: 86
  • exemple_v1.xls
    35 KB · Affichages: 80
  • exemple_v1.xls
    35 KB · Affichages: 78

youki

XLDnaute Occasionnel
Re : Besoin d'aide - Formatage de devis

Merci beaucoup cbea c'est exactement cela que je cherché.


Par contre Etant donné que je recopie le tableaux deux sur le premier, il ne me reste qu'a savoir supprimer les lignes se trouvant apres Total.

Aurais tu la syntaxe pour supprimer les lignes apres la case TOTAL.
Detecter le total puis supprimer les lignes se trouvant apres.
 

cbea

XLDnaute Impliqué
Re : Besoin d'aide - Formatage de devis

Bonjour Youki,

Voici une nouvelle version.
Le 2me tableau est copié et déplacé à la place du 1er tableau.
 

Pièces jointes

  • exemple_v2.xls
    36 KB · Affichages: 62
  • exemple_v2.xls
    36 KB · Affichages: 62
  • exemple_v2.xls
    36 KB · Affichages: 68

youki

XLDnaute Occasionnel
Re : Besoin d'aide - Formatage de devis

y aurait il un moyen moins "gourmand" que deux boucles for pour formater tout un tableaux. Le tableaux en question c'est celui se trouvant dans l'exemple. je souhaite qu'il soit entiérement en 8 arial et que toute la colonne B soit centré.

J'ai fais un system de double boucle mais c'est trop gourmand et vu la gueule de certains pc et devis les risque de plantage ne sont pas négligeable.
 

cbea

XLDnaute Impliqué
Re : Besoin d'aide - Formatage de devis

re,

Dans la procédure "cmdTransformer_Click", tu trouveras la méthode pour mettre une fonte Arial de taille 8 et pour centrer les données dans la colonne B :
Code:
    ' Formater le tableau en fonte Arial 8 et colonne B centrée
    With Range("B7:F" & derLig)
        .Font.Name = "Arial"
        .Font.Size = 8
    End With
    Range("B7:B" & derLig).HorizontalAlignment = xlCenter
 

Pièces jointes

  • exemple_v3.xls
    37.5 KB · Affichages: 73

youki

XLDnaute Occasionnel
Re : Besoin d'aide - Formatage de devis

Snif, je n'arrive pas à faire en sorte que les quantité ne soient pas sommé. Tout est sommé, nikel sauf que comme c'est un forfait fodrait mettre tout le temps 1 dans la colone quantité.
 

youki

XLDnaute Occasionnel
Re : Besoin d'aide - Formatage de devis

Bonjour cbea, la dernière version est la meme que ta version 3 parfaite (juste au dessus), je n'ai pas changé grand chose elle est juste englobé dans d'autres fonctions (nottament celles qui prépare la feuille avec le total).

Code:
'--------------------------------------------------
Private Sub fin_Click()
'--------------------------------------------------
Unload UserForm1
ThisWorkbook.Save
'archive
total
copie
'Sheets("construction_devis").Select
'Sheets("construction_devis").Activate
'Sheets("construction_devis").Copy
'Sheets("devis_imprimable").Activate
'Sheets("Devis_details").Select
'Application.Quit

    Dim derLig As Long
    Dim Lig As Long
    Dim LigTab As Long
    Dim forfait As Boolean
    
    Sheets("devis_imprimable").Activate
    
    ' Effacer les cellules résultat
    derLig = Range("H" & Cells.Rows.Count).End(xlUp).Row
    If derLig < 8 Then derLig = 8
    Range("H8:L" & derLig).Clear
    
    ' Dernière ligne en colonne B
    derLig = Range("B" & Cells.Rows.Count).End(xlUp).Row + 1
    
    ' Vérifier qu'il existe une ligne de fin de forfait
    If Application.WorksheetFunction.CountIf(Range("C8:C" & derLig), "___ Fin forfait ___") = 0 Then Exit Sub
    
    Application.ScreenUpdating = False
    
    ' Première ligne de transfert
    LigTab = 8
    forfait = False
    
    ' Boucle de la ligne 8 à la dernière
    For Lig = 8 To derLig
        ' Début du forfait - Transférer la ligne dans le tableau résultat
        If UCase(Range("C" & Lig).Value) Like "FORFAIT*" Then
            Range("B" & Lig & ":F" & Lig).Copy Destination:=Range("H" & LigTab)
            Application.CutCopyMode = False
            forfait = True
        Else
            ' Forfait détecté dans une ligne précédente
            If forfait = True Then
                ' Si fin du forfait, annuler le forfait et incrémenter la ligne
                If Range("C" & Lig).Value = "___ Fin forfait ___" Then
                    forfait = False
                    LigTab = LigTab + 1
                ' Ajouter les valeurs à la ligne de forfait
                Else
                    Range("D" & Lig & ":F" & Lig).Copy
                    Range("J" & LigTab).PasteSpecial _
                        Paste:=xlPasteAll, Operation:=xlAdd, _
                        SkipBlanks:=False, Transpose:=False
                    Application.CutCopyMode = False
                End If
            ' Ligne normale à transférer dans le tableau résultat
            Else
                Range("B" & Lig & ":F" & Lig).Copy Destination:=Range("H" & LigTab)
                Application.CutCopyMode = False
                LigTab = LigTab + 1
            End If
        End If
    Next Lig
    
    ' Dernière ligne en colonne B
    derLig = Range("C" & Cells.Rows.Count).End(xlUp).Row + 1
    If derLig < 8 Then derLig = 8
    ' Effacer le premier tableau
    Range("B8:F" & derLig).Clear

    ' Dernière ligne en colonne H
    derLig = Range("I" & Cells.Rows.Count).End(xlUp).Row + 1
    If derLig < 8 Then derLig = 8
     'Déplacer le 2me tableau à la place du premier
    Range("H8:L" & derLig).Cut Destination:=Range("B8")
    Application.CutCopyMode = False
    
     ' Formater le tableau en fonte Arial 8 et colonne B centrée
    With Range("B7:F" & derLig)
        .Font.Name = "Arial"
        .Font.Size = 8
    End With
    Range("B7:B" & derLig).HorizontalAlignment = xlCenter
    
    Range("A8").Select
    
    Application.ScreenUpdating = True


End Sub
'--------------------------------------------------
Private Sub forfait_Click()
'--------------------------------------------------
If forfait.Caption = "Débuter un forfait" Then
forfait_use.Show
Else
Ligne = Devis.numeroDerniereLigne + 1

'envoi des informations de l'Useform  => les cellules
Set sheetDevis = Sheets("construction_devis")

    sheetDevis.Cells(Ligne, 1).Value = "_"
    sheetDevis.Cells(Ligne, 2).Value = "___ Fin forfait ___"
    sheetDevis.Cells(Ligne, 3).Value = "000"
For i = 1 To 24
sheetDevis.Cells(Ligne, i).Font.Bold = False
sheetDevis.Cells(Ligne, i).Font.Size = 9
Next i
forfait.Caption = "Débuter un forfait"
End If

End Sub
 

Discussions similaires

Réponses
7
Affichages
775

Statistiques des forums

Discussions
315 166
Messages
2 116 922
Membres
112 912
dernier inscrit
amexlie