Etat d'avancement de travaux

Marie Claire

XLDnaute Nouveau
Bonjour le forum et Bonjour à tous ses membres.

Heureuse d'être parmi vous.
Assistante dans le btp, je doit créer un tableau chaque mois avec report de chiffres, à ma chère direction.
Essentiellement pour la facturation. mais je bug depuis 2 semaines.

Pas très calée sur excel et ses macros, je vous demande votre aide.
Ci-joint copie de mon "oeuvre" (avec une petite fierté) afin de vous inspirer de mes annotations.
Par avance un grand merci.
 

Pièces jointes

  • AVANCEMENT.xls
    111.5 KB · Affichages: 3 976
  • AVANCEMENT.xls
    111.5 KB · Affichages: 2 958
  • AVANCEMENT.xls
    111.5 KB · Affichages: 2 767

Dranreb

XLDnaute Barbatruc
Re : Etat d'avancement de travaux

Bonjour
Ça pourrait déjà commencer comme ça :
VB:
Sub AVANCEMENT()
Dim FSrc As Worksheet, FCbl As Worksheet, Spl() As String, D As Date
Set FSrc = ActiveSheet: FSrc.Copy Before:=FSrc
Set FCbl = ActiveSheet
Spl = Split(FSrc.Name, "-"): D = CDate("1 " & Spl(1)): D = DateSerial(Year(D), Month(D) + 1, 1)
FCbl.Name  = "N°" & Mid$(Spl(0), 3) + 1 & " - " &  Application.Proper(Format(D, "mmmm yyyy"))
Après ça dépend un peu si vous voulez figer les cumuls de l'état d'avancement précédent ou vous y référer.
Vous auriez peut être intéret à utiliser SOUS.TOTAL(9; Plutot que SOMME. Elle à l'avantage de ne pas tenir compte des cellules qui utilisent déjà cette fonction et permet de ce fait de les inclure dans une expression plus simple de la partie englobée.

Dans le cas le plus favorable ça pourrait continuer par :
VB:
FCbl.[E14:M210].Replace What:=Worksheets(FSrc.Index + 1).Name, Replacement:=FSrc.Name, _
   LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Encore que ça impliquerait de mettre la première fois à la main les formules de renvoi vers l'état précédent

Enfin ça pourrait se terminer par :
VB:
FCbl.[E14:M210].SpecialCells(xlCellTypeConstants, 1).ClearContents

Bon, faisons un tout petit peu autrement. Voyez si ça vous convient.
 

Pièces jointes

  • AvancementMarieClaire.xls
    125.5 KB · Affichages: 2 083
Dernière édition:

Marie Claire

XLDnaute Nouveau
Re : Etat d'avancement de travaux

Bonsoir Tout le Monde, et Bonsoir Dranreb.

Un grand BRAVO pour votre réactivité et surtout un grand merci pour le temps que vous m'avez consacré.
J'adore et adopte votre cuisine :p
C'est impressionnant, vous allez faire des jaloux chez les profs...

Néanmoins, est-ce possible de rajouter un peu de "sel"

En créant l'avancement n°3, message d'erreur :
Plage.Columns(C + 1).SpecialCells(xlCellTypeConstants, 1).ClearContents

Dans l'attente de vous relire, bien entendu, selon vos disponibilités.

Cordialement
MC
 

Dranreb

XLDnaute Barbatruc
Re : Etat d'avancement de travaux

Mettez On Error Resume Next devant et
On Error GoTo 0 derrière si vous pensez que ça peut se produire en situation réelle.
Vous avez dû essayer de créer la feuille N°3 sans avoir rien entré dans les colonnes de droite dans la N°2
 

Marie Claire

XLDnaute Nouveau
Re : Etat d'avancement de travaux

Coucou le Forum, et coucou à vous DRANREB

Désolée pour ma réponse tardive, mais j'ai voulu prendre du recul et essayer et réessayer avant de vous déranger de nouveau.
Avec les indication données, toujours rien.
Il s' arrete sur le mot RESUME. Même en créant des situations avec montants..
Suis vraiment pas douée.

Petit cri de sos : help!

Bien à vous.
 

Dranreb

XLDnaute Barbatruc
Re : Etat d'avancement de travaux

Bonjour.
Je n'ai plus d'arrêt comme ça si des colonnes sont déjà vides :
VB:
Sub AVANCEMENT()
Dim FSrc As Worksheet, FCbl As Worksheet, Spl() As String, _
   D As Date, N As Long, Plage As Range, C As Long
Set FSrc = ActiveSheet: FSrc.Copy Before:=FSrc
Set FCbl = ActiveSheet
Spl = Split(FSrc.Name, "-"): D = CDate("1 " & Spl(1))
D = DateSerial(Year(D), Month(D) + 1, 1): N = Mid$(Spl(0), 3) + 1
FCbl.Name = "N°" & N & " - " & Application.Proper(Format(D, "mmmm yyyy"))
FCbl.[K7].Value = D: FCbl.[K8].Value = N
Set Plage = FCbl.[12:210]
For C = 5 To 13 Step 4
   Plage.Columns(C).FormulaR1C1 = "='" & FSrc.Name & "'!RC[-1]"
   On Error Resume Next
   Plage.Columns(C + 1).SpecialCells(xlCellTypeConstants, 1).ClearContents
   On Error GoTo 0
   Next C
End Sub
Veillez à ce que dans VBE, Outils, Options, onglet Général, rubrique Récupération d'erreur, ce ne soit pas la clause Arrêt sur toutes les erreurs qui soit cochée.
 
Dernière édition:

Statistiques des forums

Discussions
311 719
Messages
2 081 874
Membres
101 829
dernier inscrit
listener75