Bonjour à tous,

C'est ma première question sur ce forum, pardon par avance si je n'ai pas strictement suivi le protocole du forum.

Au prélable, j'ai longuement cherché mais je n'ai pas trouvé de réponse à mon problème, ni sur ce forum ni sur d'autres, en français et en anglais.

Mon problème est le suivant :

Objet: Création d'une macro qui permet de générer des écritures de reclassement comptable

Objectif: A partir d'un tableau (Cf. image ci-dessous) qui présente en colonnes des reclassements de montants de rubrique à rubrique, ces rubriques étant présentées en ligne (NB: une rubrique est constituée de plusieurs comptes comptables), je cherche à automatiser la génération des écritures comptables de reclassement à charger dans un format "plat" TXT dans mon ERP (logiciel comptable).

Pièce jointe 646623

Description succincte de la macro: A partir d'un tableau de synthèse des reclassements, ma macro vient créer un onglet par écriture (une écriture=une colonne) dans lequel elle génère l'écriture en colonne A, ça c'est plutôt simple, puis chaque montant à reclasser avec le compte correspondant, ce compte est à choisir dans une liste déroulante (liste qui comporte tous les comptes de la rubrique). Ces listes sont stockées dans des plages nommées dans un onglet à part et je souhaite appeler ces plages avec une objet type range qui dépend d'une variable NumRubrique (Cf. Code). la liste déroulante devant être mise dans une cellule sur la ligne de l'écriture générée. Cf. Image ci-dessous:

Nom : Image2.PNG
Affichages : 144
Taille : 16,3 Ko

Mon problème se situe en ligne 59 du code ci-dessous, Formula1 n'admet pas de plage Range. Comment pourrais-je procéder pour récupérer et lui donner les valeurs du Range NomPlage1 par exemple, sachant que ce NomPlageX est une variable qui permet de faire le lien entre le numéro de la rubrique dans le tableau de synthèse d'une part et la liste des comptes comptables de cette rubrique d'autre part ?

L'idéal eut été d'interroger directement l'utilisateur via une sorte d'inputbox liste déroulante et que le numéro de compte choisit vient se placer en ligne 69 du code à l'emplacement (Numéro de compte choisi)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
Sub Generer_Ecritures_Bridge_CFS()
 
Dim NumColonne, DerniereColonne, DerniereLigne, IndiceColonne, IndiceLigne, Montant, MontantSigne, Indice As Integer
Dim NbLigneEcriture As Integer
Dim Signe, NumCompte, NumRubrique, Liste As String
Dim Cell As Range
 
'Recuperer le numero de colonne de la dernière écriture dans le bridge retraité
 
IndiceLigneEcriture = 4
 
'Déterminer le numéro de la dernière colonne non vide du Bridge
 
DerniereColonne = Sheets("Bridge_CFS_EDF_Re").Range("D1").End(xlToRight).Column
 
'Déterminer le numéro de la dernière ligne non vide du Bridge
 
DerniereLigne = Sheets("Bridge_CFS_EDF_Re").Cells(Rows.Count, 1).End(xlUp).Row
 
'En fonction du nombre d'écritures, nous allons générée le code journal et créer l'onglet puis le nommer avec le code journal pour chaque écriture selon le format suivant "RBV_vX_vZ", X et Z étant vaiables. A noter qu'EDIFIS nous limite au numéro 10 pour la valeur X on passe donc la dizaine en Z
 
If DerniereColonne <= 13 Then
 
  For IndiceColonne = 4 To DerniereColonne
 
  'Création de l'onglet
 
  Sheets.Add After:=Worksheets(Worksheets.Count())
 
  'Nommer l'onglet
 
  Sheets(Sheets.Count).Name = "RBV41_" & IndiceColonne - 3 & "v_3"
 
   'Générer les 3 premières lignes génériques de l'écriture
 
    Sheets("RBV41_" & IndiceColonne - 3 & "v_3").Cells(1, 1).Value = "Ecriture RBV41_" & IndiceColonne - 3 & "v_3"
    Sheets("RBV41_" & IndiceColonne - 3 & "v_3").Cells(2, 1).Value = "!JOURNAL=RBV41 S1073 BR" & IndiceColonne - 3
    Sheets("RBV41_" & IndiceColonne - 3 & "v_3").Cells(3, 1).Value = "!DESC=" & Sheets("Bridge_CFS_EDF_Re").Cells(2, IndiceColonne).Value
 
    'Générer les lignes de l'écriture correspondant à impact par compte
 
    For IndiceLigne = 3 To DerniereLigne
    MontantSigne = Sheets("Bridge_CFS_EDF_Re").Cells(IndiceLigne, IndiceColonne).Value
    Montant = Int(Abs(Sheets("Bridge_CFS_EDF_Re").Cells(IndiceLigne, IndiceColonne).Value * 1000))
    'MsgBox (Sheets("RBV41_" & IndiceColonne - 3 & "v_3").Cells(Sheets("RBV41_" & IndiceColonne - 3 & "v_3").Range("A1").End(xlDown).Row + 1, 6).Value)
 
    If MontantSigne < 0 Then Signe = "D" Else Signe = "C"
    If MontantSigne <> 0 Then
 
    NumRubrique = Sheets("Bridge_CFS_EDF_Re").Cells(IndiceLigne, 1).Value
 
    With Sheets("RBV41_" & IndiceColonne - 3 & "v_3").Range("F" & Range("A1").End(xlDown).Row + 1).Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
         xlBetween, Formula1:="=NumRubrique"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
    Sheets("RBV41_" & IndiceColonne - 3 & "v_3").Cells(Sheets("RBV41_" & IndiceColonne - 3 & "v_3").Range("A1").End(xlDown).Row + 1, 1).Value = (Numéro de compte choisi) & "[ICP None];[None];[None];[None];" & Signe & ";" & Montant & ";"
    End If
    Next
 
  Next
Voici à quoi ressemble l'écriture générée dans chaque onglet:

!Scenario=RT
!Year=2023

!Period=September

!JOURNAL=RBV41 S1073 XXX;U;R;P;<Entity Curr Adjs>; ;;Entity;
!DESC=Reclassement d'immobilisation
P25300;[ICP None];[None];[None];[None];RBV41;C;10000;
P10606;[ICP None];[None];[None];[None];RBV41;D;10000;

PXXXXX correspondant aux numéros de compte.

Merci beaucoup pour votre aide.

Bien cordialement,

Izem