Amélioration d'un code

Bonsoir le forum,

Ci-après un code que je souhaiterai voir amélioré.

Je voudrais savoir s'il est possible d'écourter toutes les déclarations de variables et leur initialisation, et éventuellement d'améliorer le reste du code. Par exemple est-il possible en appelant les variables Intitule1_1 à Intitule30_3, Intitule1,2,3....99, de faire une boucle pour les initialiser ?

Mes connaissances d'excel sont essentiellement "livresques", mais après, au fil des années, avoir vu ce qui peux se pratiquer en m'étant inscrit sur se site, j'avoue avoir un peu "honte" de remettre la même chose.

Le code ouvre une archive, copie le fichier "en cours" et reprend ses intitulés et dates pour les transposer vers un fichier "maître" qui sert de modèle à la création de tout nouveau fichier. Ce fichier maître étant entièrement remodelé, je dois intervenir sur ce code.

Private Sub UserForm_Activate()
Dim DernierProtege As String
Application.ScreenUpdating = False
LDProtegesActifs
DernierProtege = Worksheets("Actifs").Range("B6").End(xlDown).Address
'Sélection de la plage de données à afficher dans la liste déroulante
'Choixprotege = nom zone du UserForm ListeDeroulante dans laquelle s'affichent les protégés
Choixprotege.RowSource = "Actifs!B6:" & DernierProtege
'Affichage à chaque ouverture du 1er protégé de la liste
Choixprotege.ListIndex = 0
'et focus sur le nom du protégé
Choixprotege.SetFocus
'Affichage de la page d'accueil
Sheets("PAccueil").Select
Application.ScreenUpdating = True
End Sub
Private Sub Annuler_Click()
Unload CreerDecompte
End Sub
Private Sub Valider_Click()
Dim bdd As Workbook
Dim bdd1 As Workbook
Dim bdd2 As Workbook
Dim bdd3 As Workbook
Dim nombdd As String
Dim nombdd1 As String
Dim nombdd2 As String
Dim nombdd3 As String
Dim nomfichier As String
Dim numeropro As String
Dim numindex As String
Dim valeursolde1 As Currency
Dim valeursolde2 As Currency
Dim valeursolde3 As Currency
Dim valeursolde4 As Currency
Dim valeursolde5 As Currency
Dim valeursolde6 As Currency
Dim valeursolde7 As Currency
Dim valeursolde8 As Currency
Dim valeursolde9 As Currency
Dim valeursolde10 As Currency
Dim valeursolde11 As Currency
Dim valeursolde12 As Currency
Dim valeursolde13 As Currency
Dim valeursolde14 As Currency
Dim valeursolde15 As Currency
Dim valeursolde16 As Currency
Dim valeursolde17 As Currency
Dim valeursolde18 As Currency
Dim valeursolde19 As Currency
Dim valeursolde20 As Currency
Dim valeursolde21 As Currency
Dim valeursolde22 As Currency
Dim valeursolde23 As Currency
Dim valeursolde24 As Currency
Dim valeursolde25 As Currency
Dim valeursolde26 As Currency
Dim valeursolde27 As Currency
Dim valeursolde28 As Currency
Dim valeursolde29 As Currency
Dim valeursolde30 As Currency
Dim intitule1_1 As String
Dim intitule1_2 As String
Dim intitule1_3 As String
Dim intitule2_1 As String
Dim intitule2_2 As String
Dim intitule2_3 As String
Dim intitule3_1 As String
Dim intitule3_2 As String
Dim intitule3_3 As String
Dim intitule4_1 As String
Dim intitule4_2 As String
Dim intitule4_3 As String
Dim intitule5_1 As String
Dim intitule5_2 As String
Dim intitule5_3 As String
Dim intitule6_1 As String
Dim intitule6_2 As String
Dim intitule6_3 As String
Dim intitule7_1 As String
Dim intitule7_2 As String
Dim intitule7_3 As String
Dim intitule8_1 As String
Dim intitule8_2 As String
Dim intitule8_3 As String
Dim intitule9_1 As String
Dim intitule9_2 As String
Dim intitule9_3 As String
Dim intitule10_1 As String
Dim intitule10_2 As String
Dim intitule10_3 As String
Dim intitule11_1 As String
Dim intitule11_2 As String
Dim intitule11_3 As String
Dim intitule12_1 As String
Dim intitule12_2 As String
Dim intitule12_3 As String
Dim intitule13_1 As String
Dim intitule13_2 As String
Dim intitule13_3 As String
Dim intitule14_1 As String
Dim intitule14_2 As String
Dim intitule14_3 As String
Dim intitule15_1 As String
Dim intitule15_2 As String
Dim intitule15_3 As String
Dim intitule16_1 As String
Dim intitule16_2 As String
Dim intitule16_3 As String
Dim intitule17_1 As String
Dim intitule17_2 As String
Dim intitule17_3 As String
Dim intitule18_1 As String
Dim intitule18_2 As String
Dim intitule18_3 As String
Dim intitule19_1 As String
Dim intitule19_2 As String
Dim intitule19_3 As String
Dim intitule20_1 As String
Dim intitule20_2 As String
Dim intitule20_3 As String
Dim intitule21_1 As String
Dim intitule21_2 As String
Dim intitule21_3 As String
Dim intitule22_1 As String
Dim intitule22_2 As String
Dim intitule22_3 As String
Dim intitule23_1 As String
Dim intitule23_2 As String
Dim intitule23_3 As String
Dim intitule24_1 As String
Dim intitule24_2 As String
Dim intitule24_3 As String
Dim intitule25_1 As String
Dim intitule25_2 As String
Dim intitule25_3 As String
Dim intitule26_1 As String
Dim intitule26_2 As String
Dim intitule26_3 As String
Dim intitule27_1 As String
Dim intitule27_2 As String
Dim intitule27_3 As String
Dim intitule28_1 As String
Dim intitule28_2 As String
Dim intitule28_3 As String
Dim intitule29_1 As String
Dim intitule29_2 As String
Dim intitule29_3 As String
Dim intitule30_1 As String
Dim intitule30_2 As String
Dim intitule30_3 As String
Dim annee
Dim annee1
Dim ddedebut As Date
Dim ddefin As Date
Dim ddebutorganisme As Date
Dim dfinorganisme As Date
Dim CreerUnDecompte As Integer
'--------------------------------------
Dim soldeprecedent As Currency
'--------------------------------------
Application.ScreenUpdating = False
valeursolde1 = 0
valeursolde2 = 0
valeursolde3 = 0
valeursolde4 = 0
valeursolde5 = 0
valeursolde6 = 0
valeursolde7 = 0
valeursolde8 = 0
valeursolde9 = 0
valeursolde10 = 0
valeursolde11 = 0
valeursolde12 = 0
valeursolde13 = 0
valeursolde14 = 0
valeursolde15 = 0
valeursolde16 = 0
valeursolde17 = 0
valeursolde18 = 0
valeursolde19 = 0
valeursolde20 = 0
valeursolde21 = 0
valeursolde22 = 0
valeursolde23 = 0
valeursolde24 = 0
valeursolde25 = 0
valeursolde26 = 0
valeursolde27 = 0
valeursolde28 = 0
valeursolde29 = 0
valeursolde30 = 0
intitule1_1 = " "
intitule1_2 = " "
intitule1_3 = " "
intitule2_1 = " "
intitule2_2 = " "
intitule2_3 = " "
intitule3_1 = " "
intitule3_2 = " "
intitule3_3 = " "
intitule4_1 = " "
intitule4_2 = " "
intitule4_3 = " "
intitule5_1 = " "
intitule5_2 = " "
intitule5_3 = " "
intitule6_1 = " "
intitule6_2 = " "
intitule6_3 = " "
intitule7_1 = " "
intitule7_2 = " "
intitule7_3 = " "
intitule8_1 = " "
intitule8_2 = " "
intitule8_3 = " "
intitule9_1 = " "
intitule9_2 = " "
intitule9_3 = " "
intitule10_1 = " "
intitule10_2 = " "
intitule10_3 = " "
intitule11_1 = " "
intitule11_2 = " "
intitule11_3 = " "
intitule12_1 = " "
intitule12_2 = " "
intitule12_3 = " "
intitule13_1 = " "
intitule13_2 = " "
intitule13_3 = " "
intitule14_1 = " "
intitule14_2 = " "
intitule14_3 = " "
intitule15_1 = " "
intitule15_2 = " "
intitule15_3 = " "
intitule16_1 = " "
intitule16_2 = " "
intitule16_3 = " "
intitule17_1 = " "
intitule17_2 = " "
intitule17_3 = " "
intitule18_1 = " "
intitule18_2 = " "
intitule18_3 = " "
intitule19_1 = " "
intitule19_2 = " "
intitule19_3 = " "
intitule20_1 = " "
intitule20_2 = " "
intitule20_3 = " "
intitule21_1 = " "
intitule21_2 = " "
intitule21_3 = " "
intitule22_1 = " "
intitule22_2 = " "
intitule22_3 = " "
intitule23_1 = " "
intitule23_2 = " "
intitule23_3 = " "
intitule24_1 = " "
intitule24_2 = " "
intitule24_3 = " "
intitule25_1 = " "
intitule25_2 = " "
intitule25_3 = " "
intitule26_1 = " "
intitule26_2 = " "
intitule26_3 = " "
intitule27_1 = " "
intitule27_2 = " "
intitule27_3 = " "
intitule28_1 = " "
intitule28_2 = " "
intitule28_3 = " "
intitule29_1 = " "
intitule29_2 = " "
intitule29_3 = " "
intitule30_1 = " "
intitule30_2 = " "
intitule30_3 = " "
ddedebut = 0
ddefin = 0
ddebutorganisme = 0
dfinorganisme = 0
soldeprecedent = 0

CreerDecompte.Hide
Index = Choixprotege.ListIndex
numindex = Index
Choixprotege = Choixprotege.List(Index)
numeropro = Worksheets("Actifs").Range(("A") & (6 + numindex))
annee = Year(Date)
annee1 = (Year(Date)) - 1
'Dans le cas où il n'y a qu'un seul enregistrement dans "Proteges", la valeur de Choixprotege est Null si l'utilisateur clique sur une ligne vide. A partir de 2 enregistrements c'est bon
    If IsNull(Choixprotege) Then
    Exit Sub
    End If

'Transfert du n°de protégé choisi dans la cellule A5 de la Feuille Variables pour relation entre le décompte et Directeur.xlsm pour échange de données et calcul des prélèvements
Sheets("Variables").Select
Sheets("Variables").Unprotect ("ElPasoTx67110")
Range("A5").Value = numeropro
Sheets("Variables").Protect ("ElPasoTx67110")
Sheets("PAccueil").Select
'Ouverture du fichier
nomfichier = Choixprotege
nombdd = ("C:\TutelSoft\") & numeropro & (".xlsm")
'Si le décompte existe, on ouvre le décompte
    If Dir(nombdd) <> "" Then
    Set bdd = Workbooks.Open(nombdd)
    Sheets("Décompte").Select
    Range("A83").Select
    Else
'Si le décompte n'existe pas, on regarde s'il existe dans l'archive de l'année en cours - 1
        nombdd2 = ("C:\TutelSoft\Archives\") & annee1 & ("\") & numeropro & (".xlsm")
        If Dir(nombdd2) <> vbNullString Then
'____________________________________________________________________________________________________________________________
            CreerUnDecompte = MsgBox("Le décompte de " & nomfichier & " va être crée à partir de l'archive de " & annee1 & " ! Tapez Oui pour valider, Non pour annuler", vbYesNo + vbQuestion, "Création d'un décompte")
            If CreerUnDecompte = vbYes Then
'____________________________________________________________________________________________________________________________
'Chargement de l'userform pour information utilisateur
           ' UFInfoCreation.Show 0
           ' DoEvents
            FileCopy ("C:\TutelSoft\Archives\") & annee1 & ("\") & numeropro & (".xlsm"), ("C:\TutelSoft\") & numeropro & (".xlsm")
            nombdd = ("C:\TutelSoft\") & numeropro & (".xlsm")
            Set bdd1 = Workbooks.Open(nombdd)
'____________________________________________________________________________________________________________________________
            Sheets("Décompte").Select
            Sheets("Décompte").Unprotect ("ElPasoTx67110")
            valeursoldes1 = Range("I508").Value
            valeursoldes2 = Range("I511").Value
            valeursoldes3 = Range("I514").Value
            valeursoldes4 = Range("I517").Value
            valeursoldes5 = Range("I520").Value
            valeursoldes6 = Range("I523").Value
            valeursoldes7 = Range("I526").Value
            valeursoldes8 = Range("I529").Value
            valeursoldes9 = Range("I532").Value
            valeursoldes10 = Range("I535").Value
            valeursoldes11 = Range("I538").Value
            valeursoldes12 = Range("I541").Value
            valeursoldes13 = Range("I544").Value
            valeursoldes14 = Range("I547").Value
            valeursoldes15 = Range("I550").Value
            valeursoldes16 = Range("I553").Value
            valeursoldes17 = Range("I556").Value
            valeursoldes18 = Range("I559").Value
            valeursoldes19 = Range("I562").Value
            valeursoldes20 = Range("I565").Value
            valeursoldes21 = Range("I568").Value
            valeursoldes22 = Range("I577").Value
            valeursoldes23 = Range("I580").Value
            valeursoldes24 = Range("I583").Value
            valeursoldes25 = Range("I586").Value
            valeursoldes26 = Range("I589").Value
            valeursoldes27 = Range("I592").Value
            valeursoldes28 = Range("I595").Value
            valeursoldes29 = Range("I598").Value
            valeursoldes30 = Range("I601").Value
            intitule1_1 = Range("A507").Value
            intitule1_2 = Range("A508").Value
            intitule1_3 = Range("A509").Value
            intitule2_1 = Range("A510").Value
            intitule2_2 = Range("A511").Value
            intitule2_3 = Range("A512").Value
            intitule3_1 = Range("A513").Value
            intitule3_2 = Range("A514").Value
            intitule3_3 = Range("A515").Value
            intitule4_1 = Range("A516").Value
            intitule4_2 = Range("A517").Value
            intitule4_3 = Range("A518").Value
            intitule5_1 = Range("A519").Value
            intitule5_2 = Range("A520").Value
            intitule5_3 = Range("A521").Value
            intitule6_1 = Range("A522").Value
            intitule6_2 = Range("A523").Value
            intitule6_3 = Range("A524").Value
            intitule7_1 = Range("A525").Value
            intitule7_2 = Range("A526").Value
            intitule7_3 = Range("A527").Value
            intitule8_1 = Range("A528").Value
            intitule8_2 = Range("A529").Value
            intitule8_3 = Range("A530").Value
            intitule9_1 = Range("A531").Value
            intitule9_2 = Range("A532").Value
            intitule9_3 = Range("A533").Value
            intitule10_1 = Range("A534").Value
            intitule10_2 = Range("A535").Value
            intitule10_3 = Range("A536").Value
            intitule11_1 = Range("A537").Value
            intitule11_2 = Range("A538").Value
            intitule11_3 = Range("A539").Value
            intitule12_1 = Range("A540").Value
            intitule12_2 = Range("A541").Value
            intitule12_3 = Range("A542").Value
            intitule13_1 = Range("A543").Value
            intitule13_2 = Range("A544").Value
            intitule13_3 = Range("A545").Value
            intitule14_1 = Range("A546").Value
            intitule14_2 = Range("A547").Value
            intitule14_3 = Range("A548").Value
            intitule15_1 = Range("A549").Value
            intitule15_2 = Range("A550").Value
            intitule15_3 = Range("A551").Value
            intitule16_1 = Range("A552").Value
            intitule16_2 = Range("A553").Value
            intitule16_3 = Range("A554").Value
            intitule17_1 = Range("A555").Value
            intitule17_2 = Range("A556").Value
            intitule17_3 = Range("A557").Value
            intitule18_1 = Range("A558").Value
            intitule18_2 = Range("A559").Value
            intitule18_3 = Range("A560").Value
            intitule19_1 = Range("A561").Value
            intitule19_2 = Range("A562").Value
            intitule19_3 = Range("A563").Value
            intitule20_1 = Range("A564").Value
            intitule20_2 = Range("A565").Value
            intitule20_3 = Range("A566").Value
            intitule21_1 = Range("A567").Value
            intitule21_2 = Range("A568").Value
            intitule21_3 = Range("A569").Value
            intitule22_1 = Range("A576").Value
            intitule22_2 = Range("A577").Value
            intitule22_3 = Range("A578").Value
            intitule23_1 = Range("A579").Value
            intitule23_2 = Range("A580").Value
            intitule23_3 = Range("A581").Value
            intitule24_1 = Range("A582").Value
            intitule24_2 = Range("A583").Value
            intitule24_3 = Range("A584").Value
            intitule25_1 = Range("A585").Value
            intitule25_2 = Range("A586").Value
            intitule25_3 = Range("A587").Value
            intitule26_1 = Range("A588").Value
            intitule26_2 = Range("A589").Value
            intitule26_3 = Range("A590").Value
            intitule27_1 = Range("A591").Value
            intitule27_2 = Range("A592").Value
            intitule27_3 = Range("A593").Value
            intitule28_1 = Range("A594").Value
            intitule28_2 = Range("A595").Value
            intitule28_3 = Range("A596").Value
            intitule29_1 = Range("A597").Value
            intitule29_2 = Range("A598").Value
            intitule29_3 = Range("A599").Value
            intitule30_1 = Range("A600").Value
            intitule30_2 = Range("A601").Value
            intitule30_3 = Range("A602").Value

            Range("D82").Select
            ddedebut = Range("D82").Value
            Range("H82").Select
            ddefin = Range("H82").Value
            Range("D77").Select
            ddebutorganisme = Range("D77").Value
            Range("D78").Select
            dfinorganisme = Range("D78").Value
'-----------------------------------------------
            soldeprecedent = Range("I334").Value
'-----------------------------------------------
            Application.DisplayAlerts = False
            Workbooks(numeropro & (".xlsm")).Close
            Application.DisplayAlerts = True
            Kill ("C:\TutelSoft\") & numeropro & (".xlsm")
            FileCopy ("C:\TutelSoft\9999999.xlsm"), ("C:\TutelSoft\") & numeropro & (".xlsm")
            Set bdd1 = Workbooks.Open(nombdd)
'_______________________________________________________________________________________________________________________________
            Sheets("C1").Select
            Sheets("C1").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes1
            Sheets("C1").Protect ("ElPasoTx67110")
            Sheets("C2").Select
            Sheets("C2").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes2
            Sheets("C2").Protect ("ElPasoTx67110")
            Sheets("C3").Select
            Sheets("C3").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes3
            Sheets("C3").Protect ("ElPasoTx67110")
            Sheets("C4").Select
            Sheets("C4").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes4
            Sheets("C4").Protect ("ElPasoTx67110")
            Sheets("C5").Select
            Sheets("C5").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes5
            Sheets("C5").Protect ("ElPasoTx67110")
            Sheets("C6").Select
            Sheets("C6").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes6
            Sheets("C6").Protect ("ElPasoTx67110")
            Sheets("C7").Select
            Sheets("C7").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes7
            Sheets("C7").Protect ("ElPasoTx67110")
            Sheets("C8").Select
            Sheets("C8").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes8
            Sheets("C8").Protect ("ElPasoTx67110")
            Sheets("C9").Select
            Sheets("C9").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes9
            Sheets("C9").Protect ("ElPasoTx67110")
            Sheets("C10").Select
            Sheets("C10").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes10
            Sheets("C10").Protect ("ElPasoTx67110")
            Sheets("C11").Select
            Sheets("C11").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes11
            Sheets("C11").Protect ("ElPasoTx67110")
            Sheets("C12").Select
            Sheets("C12").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes12
            Sheets("C12").Protect ("ElPasoTx67110")
            Sheets("C13").Select
            Sheets("C13").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes13
            Sheets("C13").Protect ("ElPasoTx67110")
            Sheets("C14").Select
            Sheets("C14").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes14
            Sheets("C14").Protect ("ElPasoTx67110")
            Sheets("C15").Select
            Sheets("C15").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes15
            Sheets("C15").Protect ("ElPasoTx67110")
            Sheets("C16").Select
            Sheets("C16").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes16
            Sheets("C16").Protect ("ElPasoTx67110")
            Sheets("C17").Select
            Sheets("C17").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes17
            Sheets("C17").Protect ("ElPasoTx67110")
            Sheets("C18").Select
            Sheets("C18").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes18
            Sheets("C18").Protect ("ElPasoTx67110")
            Sheets("C19").Select
            Sheets("C19").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes19
            Sheets("C19").Protect ("ElPasoTx67110")
            Sheets("C20").Select
            Sheets("C20").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes20
            Sheets("C20").Protect ("ElPasoTx67110")
            Sheets("C21").Select
            Sheets("C21").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes21
            Sheets("C21").Protect ("ElPasoTx67110")
            Sheets("C22").Select
            Sheets("C22").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes22
            Sheets("C22").Protect ("ElPasoTx67110")
            Sheets("C23").Select
            Sheets("C23").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes23
            Sheets("C23").Protect ("ElPasoTx67110")
            Sheets("C24").Select
            Sheets("C24").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes24
            Sheets("C24").Protect ("ElPasoTx67110")
            Sheets("C25").Select
            Sheets("C25").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes25
            Sheets("C25").Protect ("ElPasoTx67110")
            Sheets("C26").Select
            Sheets("C26").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes26
            Sheets("C26").Protect ("ElPasoTx67110")
            Sheets("C27").Select
            Sheets("C27").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes27
            Sheets("C27").Protect ("ElPasoTx67110")
            Sheets("C28").Select
            Sheets("C28").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes28
            Sheets("C28").Protect ("ElPasoTx67110")
            Sheets("C29").Select
            Sheets("C29").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes29
            Sheets("C29").Protect ("ElPasoTx67110")
            Sheets("C30").Select
            Sheets("C30").Unprotect ("ElPasoTx67110")
            Range("F2").Select
            Range("F2").Value = valeursoldes30
            Sheets("C30").Protect ("ElPasoTx67110")

            Sheets("Décompte").Select
'---------------------------------------------------------
            Sheets("Décompte").Unprotect ("ElPasoTx67110")
'---------------------------------------------------------
            Range("D82").Value = ddefin + 1
            Range("H82").Value = CDate("31/12/" & Year(Date))
            Range("A507").Value = intitule1_1
            Range("A508").Value = intitule1_2
            Range("A509").Value = intitule1_3
            Range("A510").Value = intitule2_1
            Range("A511").Value = intitule2_2
            Range("A512").Value = intitule2_3
            Range("A513").Value = intitule3_1
            Range("A514").Value = intitule3_2
            Range("A515").Value = intitule3_3
            Range("A516").Value = intitule4_1
            Range("A517").Value = intitule4_2
            Range("A518").Value = intitule4_3
            Range("A519").Value = intitule5_1
            Range("A520").Value = intitule5_2
            Range("A521").Value = intitule5_3
            Range("A522").Value = intitule6_1
            Range("A523").Value = intitule6_2
            Range("A524").Value = intitule6_3
            Range("A525").Value = intitule7_1
            Range("A526").Value = intitule7_2
            Range("A527").Value = intitule7_3
            Range("A528").Value = intitule8_1
            Range("A529").Value = intitule8_2
            Range("A530").Value = intitule8_3
            Range("A531").Value = intitule9_1
            Range("A532").Value = intitule9_2
            Range("A533").Value = intitule9_3
            Range("A534").Value = intitule10_1
            Range("A535").Value = intitule10_2
            Range("A536").Value = intitule10_3
            Range("A537").Value = intitule11_1
            Range("A538").Value = intitule11_2
            Range("A539").Value = intitule11_3
            Range("A540").Value = intitule12_1
            Range("A541").Value = intitule12_2
            Range("A542").Value = intitule12_3
            Range("A543").Value = intitule13_1
            Range("A544").Value = intitule13_2
            Range("A545").Value = intitule13_3
            Range("A546").Value = intitule14_1
            Range("A547").Value = intitule14_2
            Range("A548").Value = intitule14_3
            Range("A549").Value = intitule15_1
            Range("A550").Value = intitule15_2
            Range("A551").Value = intitule15_3
            Range("A552").Value = intitule16_1
            Range("A553").Value = intitule16_2
            Range("A554").Value = intitule16_3
            Range("A555").Value = intitule17_1
            Range("A556").Value = intitule17_2
            Range("A557").Value = intitule17_3
            Range("A558").Value = intitule18_1
            Range("A559").Value = intitule18_2
            Range("A560").Value = intitule18_3
            Range("A561").Value = intitule19_1
            Range("A562").Value = intitule19_2
            Range("A563").Value = intitule19_3
            Range("A564").Value = intitule20_1
            Range("A565").Value = intitule20_2
            Range("A566").Value = intitule20_3
            Range("A567").Value = intitule21_1
            Range("A568").Value = intitule21_2
            Range("A569").Value = intitule21_3
            Range("A576").Value = intitule22_1
            Range("A577").Value = intitule22_2
            Range("A578").Value = intitule22_3
            Range("A579").Value = intitule23_1
            Range("A580").Value = intitule23_2
            Range("A581").Value = intitule23_3
            Range("A582").Value = intitule24_1
            Range("A583").Value = intitule24_2
            Range("A584").Value = intitule24_3
            Range("A585").Value = intitule25_1
            Range("A586").Value = intitule25_2
            Range("A587").Value = intitule25_3
            Range("A588").Value = intitule26_1
            Range("A589").Value = intitule26_2
            Range("A590").Value = intitule26_3
            Range("A591").Value = intitule27_1
            Range("A592").Value = intitule27_2
            Range("A593").Value = intitule27_3
            Range("A594").Value = intitule28_1
            Range("A595").Value = intitule28_2
            Range("A596").Value = intitule28_3
            Range("A597").Value = intitule29_1
            Range("A598").Value = intitule29_2
            Range("A599").Value = intitule29_3
            Range("A600").Value = intitule30_1
            Range("A601").Value = intitule30_2
            Range("A602").Value = intitule30_3
'-----------------------------------------------
            Range("F339").Value = soldeprecedent
'-----------------------------------------------
                If ddebutorganisme > 1 Then
                Range("D77").Value = ddebutorganisme
                Else
                Range("D77").Value = ""
                End If
                If dfinorganisme > 1 Then
                Range("D78").Value = dfinorganisme
                Else
                Range("D78").Value = ""
                End If

'Déchargement de l'userform d'information utilisateur
            Unload UFInfoCreation
            Sheets("Décompte").Protect ("ElPasoTx67110")
            Range("A83").Select
            Workbooks(numeropro & (".xlsm")).Save
'___________________________________________________________________________________________________________________________
' Si l'utilisateur ne veux pas créer le décompte
        Else
        MsgBox "Le décompte n'a pas été créé!", vbInformation
        End If
'___________________________________________________________________________________________________________________________
' Si le décompte n'existe pas dans l'année N-1
    Else
'Sinon, on ouvre un décompte en copiant le décompte maître 9999999.xlsm
    CreerUnDecompte = MsgBox("Le décompte de " & nomfichier & " n'existe pas! Voulez-vous créer son décompte de gestion ?", vbYesNo + vbQuestion, "Création d'un décompte")
        If CreerUnDecompte = vbYes Then
'-------Chargement de l'userform pour information utilisateur
        UFInfoCreation.Show 0
        DoEvents
        FileCopy ("C:\TutelSoft\9999999.xlsm"), ("C:\TutelSoft\") & numeropro & (".xlsm")
        nombdd3 = ("C:\TutelSoft\") & numeropro & (".xlsm")
        Set bdd3 = Workbooks.Open(nombdd)
'-------Déchargement de l'userform d'information utilisateur
        Unload UFInfoCreation
        Sheets("Décompte").Select
        Sheets("Décompte").Protect ("ElPasoTx67110")
        Range("D82").Select
        Range("D82").Value = Date
        Range("H82").Value = CDate("31/12/" & Year(Date))
        Range("A83").Select
        Workbooks(numeropro & (".xlsm")).Save
        Else
        MsgBox "Le décompte n'a pas été créé!", vbInformation
        End If
    End If
End If
Application.ScreenUpdating = True
End Sub

Merci

Cordialement

Joseph

Bonsoir

Utilises des tableaux cela sera plus facile à initialiser

Avec ton fichier cela sera encore plus aisée de te trouver une solution (enfin je crois)

Bonjour

Une première étude, mais sans matériel pas évident du résultat

Option Explicit

Private Sub UserForm_Activate()
Dim DernierProtege As String

  Application.ScreenUpdating = False
'  LDProtegesActifs
  DernierProtege = Worksheets("Actifs").Range("B6").End(xlDown).Address

  'Sélection de la plage de données à afficher dans la liste déroulante
  'Choixprotege = nom zone du UserForm ListeDeroulante dans laquelle s'affichent les protégés
  Choixprotege.RowSource = "Actifs!B6:" & DernierProtege

  'Affichage à chaque ouverture du 1er protégé de la liste
  Choixprotege.ListIndex = 0

  'et focus sur le nom du protégé
  Choixprotege.SetFocus

  'Affichage de la page d'accueil
  Sheets("PAccueil").Select
  Application.ScreenUpdating = True
End Sub

Private Sub Annuler_Click()
  Unload CreerDecompte
End Sub

Private Sub Valider_Click()
Dim nombdd As String
Dim nombdd2 As String

Dim nomfichier As String
Dim numeropro As String
Dim numindex As String

Dim J As Long
Dim I As Integer
Dim Indice As Integer
Dim ValeurSolde(29) As Currency

Dim Intitule(29, 2) As String

Dim annee
Dim annee1
Dim ddedebut As Date
Dim ddefin As Date
Dim ddebutorganisme As Date
Dim dfinorganisme As Date
Dim CreerUnDecompte As Integer
'--------------------------------------
Dim soldeprecedent As Currency
'--------------------------------------

  Application.ScreenUpdating = False

  ddedebut = 0
  ddefin = 0
  ddebutorganisme = 0
  dfinorganisme = 0
  soldeprecedent = 0
  Dim Index As Integer
  CreerDecompte.Hide
  Index = Choixprotege.ListIndex
  numindex = Index
  Choixprotege = Choixprotege.List(Index)
  numeropro = Worksheets("Actifs").Range(("A") & (6 + numindex))
  annee = Year(Date)
  annee1 = (Year(Date)) - 1
  'Dans le cas où il n'y a qu'un seul enregistrement dans "Proteges", la valeur de Choixprotege est Null si l'utilisateur clique sur une ligne vide. A partir de 2 enregistrements c'est bon
  If IsNull(Choixprotege) Then
    Exit Sub
  End If

  For J = 0 To 29
    ValeurSolde(J) = 0
  Next J

  For J = 0 To 29
    For I = 0 To 2
      Intitule(J, I) = " "
    Next I
  Next J

  'Transfert du n°de protégé choisi dans la cellule A5 de la Feuille Variables pour relation entre le décompte et Directeur.xlsm pour échange de données et calcul des prélèvements
  With Sheets("Variables")
    .Unprotect ("ElPasoTx67110")
    .Range("A5").Value = numeropro
    .Protect ("ElPasoTx67110")
  End With

  Sheets("PAccueil").Select
  'Ouverture du fichier
  nomfichier = Choixprotege
  nombdd = ("C:\TutelSoft\") & numeropro & (".xlsm")

  If Dir(nombdd) <> "" Then
    ' Si le décompte existe, on ouvre le décompte
    Workbooks.Open nombdd
    Application.Goto Sheets("Décompte").Range("A83")
  Else
    'Si le décompte n'existe pas, on regarde s'il existe dans l'archive de l'année en cours - 1
    nombdd2 = ("C:\TutelSoft\Archives\") & annee1 & ("\") & numeropro & (".xlsm")
    If Dir(nombdd2) <> vbNullString Then
      '____________________________________________________________________________________________________________________________
      CreerUnDecompte = MsgBox("Le décompte de " & nomfichier & " va être crée à partir de l'archive de " & annee1 & " ! Tapez Oui pour valider, Non pour annuler", vbYesNo + vbQuestion, "Création d'un décompte")
      If CreerUnDecompte = vbYes Then
        '____________________________________________________________________________________________________________________________
        'Chargement de l'userform pour information utilisateur
        ' UFInfoCreation.Show 0
          ' DoEvents
        FileCopy ("C:\TutelSoft\Archives\") & annee1 & ("\") & numeropro & (".xlsm"), ("C:\TutelSoft\") & numeropro & (".xlsm")
        nombdd = ("C:\TutelSoft\") & numeropro & (".xlsm")
        Workbooks.Open nombdd
        '____________________________________________________________________________________________________________________________
        With Sheets("Décompte")
          .Unprotect ("ElPasoTx67110")

          Indice = 0
          For J = 508 To 601 Step 3
            ValeurSolde(Indice) = Range("I" & J)
            Indice = Indice + 1
          Next J

          Indice = 0
          For J = 507 To 600 Step 3
            For I = 0 To 2
              Intitule(Indice, I) = Range("A" & J + I)
            Next I
            Indice = Indice + 1
          Next J

          ddedebut = .Range("D82").Value
          ddefin = .Range("H82").Value
          ddebutorganisme = .Range("D77").Value
          dfinorganisme = .Range("D78").Value
          soldeprecedent = .Range("I334").Value
        End With
        '-----------------------------------------------
        Workbooks(numeropro & (".xlsm")).Close savechanges:=False    ' Ignore les modifications

        Kill ("C:\TutelSoft\") & numeropro & (".xlsm")              ' Détruit le fichier !!!!!!

        FileCopy ("C:\TutelSoft\9999999.xlsm"), ("C:\TutelSoft\") & numeropro & (".xlsm")
        '_______________________________________________________________________________________________________________________________
        Workbooks.Open nombdd
          For J = 1 To 30
            With Sheets("C" & J)
              .Unprotect ("ElPasoTx67110")
              .Range("F2") = ValeurSolde(J - 1)
              .Protect ("ElPasoTx67110")
            End With
          Next J

          With Sheets("Décompte")
            .Unprotect ("ElPasoTx67110")
            .Range("D82").Value = ddefin + 1
            .Range("H82").Value = CDate("31/12/" & Year(Date))
            Indice = 0
            For J = 507 To 600 Step 3
              For I = 0 To 2
                .Range("A" & J + I) = Intitule(Indice, I) = Range("A" & J + I)
              Next I
              Indice = Indice + 1
            Next J

            .Range("F339").Value = soldeprecedent

            If ddebutorganisme > 1 Then
              .Range("D77").Value = ddebutorganisme
            Else
              .Range("D77").Value = ""
            End If

            If dfinorganisme > 1 Then
              .Range("D78").Value = dfinorganisme
            Else
              .Range("D78").Value = ""
            End If

            'Déchargement de l'userform d'information utilisateur
            'Unload UFInfoCreation
            .Protect ("ElPasoTx67110")
          End With
          Application.Goto Sheets("Décompte").Range("A83")
          Workbooks(numeropro & (".xlsm")).Save
        '___________________________________________________________________________________________________________________________
        ' Si l'utilisateur ne veux pas créer le décompte
      Else
        MsgBox "Le décompte n'a pas été créé!", vbInformation
      End If
      '___________________________________________________________________________________________________________________________
      ' Si le décompte n'existe pas dans l'année N-1
    Else
      'Sinon, on ouvre un décompte en copiant le décompte maître 9999999.xlsm
      CreerUnDecompte = MsgBox("Le décompte de " & nomfichier & " n'existe pas! Voulez-vous créer son décompte de gestion ?", vbYesNo + vbQuestion, "Création d'un décompte")
      If CreerUnDecompte = vbYes Then
        '-------Chargement de l'userform pour information utilisateur
        'UFInfoCreation.Show 0
        'DoEvents
        FileCopy ("C:\TutelSoft\9999999.xlsm"), ("C:\TutelSoft\") & numeropro & (".xlsm")
        Workbooks.Open nombdd
        '-------Déchargement de l'userform d'information utilisateur
        'Unload UFInfoCreation
        With Sheets("Décompte")
          .Protect ("ElPasoTx67110")
          .Range("D82") = Date
          .Range("H82") = CDate("31/12/" & Year(Date))
        End With
        Application.Goto Sheets("Décompte").Range("A83")
        Workbooks(numeropro & (".xlsm")).Save
      Else
        MsgBox "Le décompte n'a pas été créé!", vbInformation
      End If
    End If
  End If
  Application.ScreenUpdating = True
End Sub

Bonjour,

J'en étais à peu près au même stade de réflexion...

Le problème est que la plage est discontinue avec une interruption à hauteur des lignes 568/577

Donc

For J = 508 To 601 Step 3

... génère 32 appels et non 30. Ce qui devrait générer des erreurs de type 9

En d'autre terme tes Array devraient comporter 32 éléments dont 2 inutiles

Il n'est d'ailleurs pas certain que la correction suffise pour ValeurSolde qui est Currency : Si les éléments inutiles (21 et 22) sont des String ça risque de coincer...

Nota :

Les boucles :

For J = 0 To 29

ValeurSolde(J) = 0

Next J

For J = 0 To 29

For I = 0 To 2

Intitule(J, I) = " "

Next I

Next J

...semblent inutiles ces valeurs ne semblent pas utilisées !

A+

Bonjour Banzai64, galopin, le forum,

Tout d'abord, je vous remercie de vous intéresser à mon post.

Je voudrais bien joindre le fichier type et un fichier exemple, mais même en .zip, ils dépassent chacun les 700ko.

Peut-être en vous envoyant un mail avec votre accord évidemment, mais celà ne figurera alors pas dans ce post.

Sinon, chaque intitulé possede 3 lignes et il y en a 30 (donc 90 au total), et la valeur des soldes (30 au total) est un nombre positif ou négatif à 2 decimales.

Concernant les boucles d'initialisation des variables, sont-elles inutiles ? D'après mes connaissances livresques, il faut les initialiser, mais d'après ce que dit galopin elles ne servent pas.

Je ne comprends pas tes autres remarques, ça me dépasse !!

Enfin, vous avez bien remarqué que la plage est discontinue. Ne pourrait-on pas alors faire 2 fois 2 boucles ?

Les intitulés vont de A507 à A569 puis de A576 à A602; les soldes de I508 à I568 avec 1 écart de 3 (508,511,514....568) puis de I577 à I601 avec 1 écart de 3 (577,580,583,...601).

Encore merci de votre aide.

Amicalement

Joseph

Bonjour

Oui c'est vrai je n'ai pas trop cherché

J'ai juste vu comment arrangé la sauce

La coupure je ne l'ai pas vue

Ton fichier tu peux le joindre avec Cijoint

Bonjour Banzai64, galopin, le forum,

Gràce à ton lien, voici un fichier exemple 1111111.xlsm ainsi que le fichier "type" 9999999.xlsm

Le fichier "type" est aujourd'hui entièrement remodelé, mais si la macro fonctionne avec l'ancien qui est dans le lien, je réussirai à la faire fonctionner avec le nouveau fichier "type". Ce sont les positions des intitulés et des valeurs solde qui changent.

J'ai pensé qu'en prenant les anciens modèles où les positions sont les mêmes, ce serait plus facile à réaliser.

Amicalement

Joseph

Bonjour

J'ai un petit souci avec les liens

J'obtiens seulement des hiéroglyphes

Impossible de les télécharger

Bonjour Banzai64, le forum,

Peut-être parce que les fichiers sont en .xlsm ?

J'ai réessayé via Cjoint, mais je n'arrive pas à afficher la 2e page!!! Ou alors c'est parce que ce sont les mêmes fichiers que je souhaite remettre ?

L'application entière fait plus de 3MO.

Ci-après un fichier exemple compressé dans lequel tout a été supprimé sauf les 2 feuilles avec les intitulés et les soldes.

J'ai également supprimé les onglets de C3 à C29 en ne laissant que C1, C2 et C30

Ce n'est pas grand chose, mais celà permattra de voir ce à quoi tout celà ressemble.

238888888.zip (154.07 Ko)

Merci beaucoup

Amicalement

Joseph

Bonjour,

Tu peux essayer comme ça :

Private Sub Valider_Click()
Dim nombdd As String
Dim nombdd2 As String

Dim nomfichier As String
Dim numeropro As String
Dim numindex As String

Dim J As Long
Dim I As Integer
Dim Indice As Integer

Dim ValeurSolde(29) As Currency
Dim Intitule(29, 2) As String

Dim annee
Dim annee1
Dim ddedebut As Date
Dim ddefin As Date
Dim ddebutorganisme As Date
Dim dfinorganisme As Date
Dim CreerUnDecompte As Integer
'--------------------------------------
Dim soldeprecedent As Currency
'--------------------------------------

  Application.ScreenUpdating = False

  ddedebut = 0
  ddefin = 0
  ddebutorganisme = 0
  dfinorganisme = 0
  soldeprecedent = 0
  Dim Index As Integer
  CreerDecompte.Hide
  Index = Choixprotege.ListIndex
  numindex = Index
  Choixprotege = Choixprotege.List(Index)
  numeropro = Worksheets("Actifs").Range(("A") & (6 + numindex))
  annee = Year(Date)
  annee1 = (Year(Date)) - 1
  'Dans le cas où il n'y a qu'un seul enregistrement dans "Proteges", la valeur de Choixprotege est Null si l'utilisateur clique sur une ligne vide. A partir de 2 enregistrements c'est bon
  If IsNull(Choixprotege) Then
    Exit Sub
  End If

' Inutile
'  For J = 0 To 29
'    ValeurSolde(J) = 0
'  Next J
'
'  For J = 0 To 29
'    For I = 0 To 2
'      Intitule(J, I) = " "
'    Next I
'  Next J

  'Transfert du n°de protégé choisi dans la cellule A5 de la Feuille Variables pour relation entre le décompte et Directeur.xlsm pour échange de données et calcul des prélèvements
  With Sheets("Variables")
    .Unprotect ("ElPasoTx67110")
    .Range("A5").Value = numeropro
    .Protect ("ElPasoTx67110")
  End With

  Sheets("PAccueil").Select
  'Ouverture du fichier
  nomfichier = Choixprotege
  nombdd = ("C:\TutelSoft\") & numeropro & (".xlsm")

  If Dir(nombdd) <> "" Then
    ' Si le décompte existe, on ouvre le décompte
    Workbooks.Open nombdd
    Application.Goto Sheets("Décompte").Range("A83")
  Else
    'Si le décompte n'existe pas, on regarde s'il existe dans l'archive de l'année en cours - 1
    nombdd2 = ("C:\TutelSoft\Archives\") & annee1 & ("\") & numeropro & (".xlsm")
    If Dir(nombdd2) <> vbNullString Then
      '____________________________________________________________________________________________________________________________
      CreerUnDecompte = MsgBox("Le décompte de " & nomfichier & " va être crée à partir de l'archive de " & annee1 & " ! Tapez Oui pour valider, Non pour annuler", vbYesNo + vbQuestion, "Création d'un décompte")
      If CreerUnDecompte = vbYes Then
        '____________________________________________________________________________________________________________________________
        'Chargement de l'userform pour information utilisateur
        ' UFInfoCreation.Show 0
          ' DoEvents
        FileCopy ("C:\TutelSoft\Archives\") & annee1 & ("\") & numeropro & (".xlsm"), ("C:\TutelSoft\") & numeropro & (".xlsm")
        nombdd = ("C:\TutelSoft\") & numeropro & (".xlsm")
        Workbooks.Open nombdd
        '____________________________________________________________________________________________________________________________
        With Sheets("Décompte")
          .Unprotect ("ElPasoTx67110")

''''''''''''''''''''Chargement ValeurSolde 2 zones
          Indice = 0
          For J = 508 To 568 Step 3
            ValeurSolde(Indice) = Range("I" & J)
            Indice = Indice + 1
          Next J
          For J = 577 To 601 Step 3
            ValeurSolde(Indice) = Range("I" & J)
            Indice = Indice + 1
          Next J
''''''''''''''''''''Chargement Intitule 2 zones
          Indice = 0
          For J = 507 To 567 Step 3
            For I = 0 To 2
              Intitule(Indice, I) = Range("A" & J + I)
            Next I
            Indice = Indice + 1
          Next J
          For J = 576 To 600 Step 3
            For I = 0 To 2
              Intitule(Indice, I) = Range("A" & J + I)
            Next I
            Indice = Indice + 1
          Next J
''''''''''''''''''''

          ddedebut = .Range("D82").Value
          ddefin = .Range("H82").Value
          ddebutorganisme = .Range("D77").Value
          dfinorganisme = .Range("D78").Value
          soldeprecedent = .Range("I334").Value
        End With
        '-----------------------------------------------
        Workbooks(numeropro & (".xlsm")).Close savechanges:=False    ' Ignore les modifications

        Kill ("C:\TutelSoft\") & numeropro & (".xlsm")              ' Détruit le fichier !!!!!!

        FileCopy ("C:\TutelSoft\9999999.xlsm"), ("C:\TutelSoft\") & numeropro & (".xlsm")
        '_______________________________________________________________________________________________________________________________
        Workbooks.Open nombdd
          For J = 1 To 30
            With Sheets("C" & J)
              .Unprotect ("ElPasoTx67110")
              .Range("F2") = ValeurSolde(J - 1)
              .Protect ("ElPasoTx67110")
            End With
          Next J

          With Sheets("Décompte")
            .Unprotect ("ElPasoTx67110")
            .Range("D82").Value = ddefin + 1
            .Range("H82").Value = CDate("31/12/" & Year(Date))

''''''''''''''''''''Restitution 2 zones
            Indice = 0
            For J = 507 To 567 Step 3
              For I = 0 To 2
                .Range("A" & J + I) = Intitule(Indice, I) = Range("A" & J + I)
              Next I
              Indice = Indice + 1
            Next J
            For J = 576 To 600 Step 3
              For I = 0 To 2
                .Range("A" & J + I) = Intitule(Indice, I) = Range("A" & J + I)
              Next I
              Indice = Indice + 1
            Next J
''''''''''''''''''''''''''''''''''''''''

            .Range("F339").Value = soldeprecedent

            If ddebutorganisme > 1 Then
              .Range("D77").Value = ddebutorganisme
            Else
              .Range("D77").Value = ""
            End If

            If dfinorganisme > 1 Then
              .Range("D78").Value = dfinorganisme
            Else
              .Range("D78").Value = ""
            End If

            'Déchargement de l'userform d'information utilisateur
            'Unload UFInfoCreation
            .Protect ("ElPasoTx67110")
          End With
          Application.Goto Sheets("Décompte").Range("A83")
          Workbooks(numeropro & (".xlsm")).Save
        '___________________________________________________________________________________________________________________________
        ' Si l'utilisateur ne veux pas créer le décompte
      Else
        MsgBox "Le décompte n'a pas été créé!", vbInformation
      End If
      '___________________________________________________________________________________________________________________________
      ' Si le décompte n'existe pas dans l'année N-1
    Else
      'Sinon, on ouvre un décompte en copiant le décompte maître 9999999.xlsm
      CreerUnDecompte = MsgBox("Le décompte de " & nomfichier & " n'existe pas! Voulez-vous créer son décompte de gestion ?", vbYesNo + vbQuestion, "Création d'un décompte")
      If CreerUnDecompte = vbYes Then
        '-------Chargement de l'userform pour information utilisateur
        'UFInfoCreation.Show 0
        'DoEvents
        FileCopy ("C:\TutelSoft\9999999.xlsm"), ("C:\TutelSoft\") & numeropro & (".xlsm")
        Workbooks.Open nombdd
        '-------Déchargement de l'userform d'information utilisateur
        'Unload UFInfoCreation
        With Sheets("Décompte")
          .Protect ("ElPasoTx67110")
          .Range("D82") = Date
          .Range("H82") = CDate("31/12/" & Year(Date))
        End With
        Application.Goto Sheets("Décompte").Range("A83")
        Workbooks(numeropro & (".xlsm")).Save
      Else
        MsgBox "Le décompte n'a pas été créé!", vbInformation
      End If
    End If
  End If
  Application.ScreenUpdating = True
End Sub

Non testé !

A+

Bonjour galopin, le forum,

Je vais essayer cà en début de soirée et te tiendrais au courant dès que.

Merci beaucoup

Amicalement

Joseph

Bonsoir galopin, banzai64, le forum,

Je n'ai pas pu résister, et j'ai essayé de suite. (et mis d'autres choses de côté : ca risque de chauffer!!!)

Pour ce qui est des soldes c'est OK.

Par contre, pour les intitulés, dans les 9 premiers j'ai FAUX, FAUX et FAUX, et pour les autres j'ai VRAI, VRAI et VRAI au lieu de chaque fois les 3 bons intitulés.

Le passage entre les 2 zones est parfait.

Mille merci

Amicalement

Joseph

Bonjour

Dans les boucles

Rajoutes un . (point) devant Range

exemple

         Indice = 0
          For J = 508 To 568 Step 3
            ValeurSolde(Indice) = .Range("I" & J)
            Indice = Indice + 1
          Next J
          For J = 577 To 601 Step 3
            ValeurSolde(Indice) = .Range("I" & J)
            Indice = Indice + 1
          Next J

En principe toutes les cellules concernées par le With Sheets(....)

Bonjour galopin, banzai64, le forum,

J'ai trouvé où se situait le souci

''''''''''''''''''''Restitution 2 zones
            Indice = 0
            For J = 507 To 567 Step 3
              For I = 0 To 2
                .Range("A" & J + I) = Intitule(Indice, I) = Range("A" & J + I)
              Next I
              Indice = Indice + 1
            Next J
            For J = 576 To 600 Step 3
              For I = 0 To 2
                .Range("A" & J + I) = Intitule(Indice, I) = Range("A" & J + I)
              Next I
              Indice = Indice + 1
            Next J
''''''''''''''''''''''''''''''''''''''''

Dans les 2 lignes .Range("A" & J + I) = Intitule(Indice, I) = Range("A" & J + I)

j'ai ôté = Range("A" & J + I)

Du coup il me semble que c'est parfait.

Encore quelques vérifications (après ce qui est mis de côté cette fois ci) et je vous tiens informé.

Mille merci

Amicalement

Joseph

Bonsoir,

Oui bien sur... Une errreur de Copier/Coller : Je n'ai fait que pomper lamentablement le code de Banzai64 sans analyser...

Le bon code :

''''''''''''''''''''Restitution 2 zones
            Indice = 0
            For J = 507 To 567 Step 3
              For I = 0 To 2
                .Range("A" & J + I) = Intitule(Indice, I)
              Next I
              Indice = Indice + 1
            Next J
            For J = 576 To 600 Step 3
              For I = 0 To 2
                .Range("A" & J + I) = Intitule(Indice, I)
              Next I
              Indice = Indice + 1
            Next J
''''''''''''''''''''''''''''''''''''''''

A+

Bonsoir galopin, banzai64,

Voilà, tout roule.

Ne me reste plus qu'à transposer et adapter au nouveau fichier"type" dans lequel les intitulés et soldes sont décalés.

Merci infiniment pour votre aide précieuse.

Amicalement

Joseph

Rechercher des sujets similaires à "amelioration code"