Microsoft 365 Simplification de code

GADENSEB

XLDnaute Impliqué
Bonjour,

Je perfectionne mon fichier de gestion de finances perso.

J'en suis à un stade d'import des datas depuis la banque.

De cet import je catégorise les flux sur mes comptes en type de dépenses et recettes.

Grace à une formule matricielle (crée grâce à ce forum d'ailleurs merci). je consulte une DB pour la reconnaissance
des libellés des différentes lignes sur mon compte.
Formule :
"=IF(ISNA(VLOOKUP(RC[-1],DATABUDGET,2,FALSE)),INDEX(DATABUDGET[LIBELLE],MAX(IF(ISNUMBER(SEARCH(DATABUDGET[ORIGINE],RC[-1])),ROW(DATABUDGET[LIBELLE])-1,0)),),VLOOKUP(RC[-1],DATABUDGET,2,FALSE))"
Cela fonctionne assez bien, avec 80 90% de reconnaissance.
De ce résultat, dépend d'autres formules pour obtenir le formalise de databae souhaitée.

L'ensemble des résultats sera déplacé dans la database principale, après vérification de l'ensemble des lignes.


Sur le traitement que je suis entrain de faire, j'ai 3000 lignes.
Et c'est assez longtemps de faire l'ensemble des calculs.
3000 lignes, pour des calculs sur environ 15 colonnes

cela pendre en 10 et 15 minutes.

...........C'est trés long................

j'ai crée le code suivant.
je pense qu'il n'ai pas optimiser et c'est pour quoi c'est long.............. lol

est-ce que qqn aurait une idée pour le simplifier et l'accélerer ???

Je ne peux pas diffuser mon fichier comme c'est mes comptes persos :)
J'ai mis annotations dans le code.

Pour Résumer le code:
1-Je rècupère les datas sur l'onglet "IMPORT"
2-Je les colles dans l'onglet "CONVERSION"
3-J'installe les formules sur toutes les lignes et les colonnes.
4-Je fige les résultats.
5-Un peu de mise en page.

Ce qui me manque :
- Accélerer le code lol
- Ne figer les résultats que sur les lignes dont la colonne AA ="OUI"
- Si la collone AA passe à "OUI" alors je fige les résultats de la ligne
- Si la collone AA passe à "NON" alors je réinstalle les formules commme sur l'étape 3

je pense que je me suis un peu perdu dans tout mon code lol

Bonne journée

Sébastien



VB:
Sub ConversionImport()
Dim L%
Dim X%

Dim cellule As Range



'Je récupére le nombre max de la DATABASE
X = Application.Max(Worksheets("COMPTES").Range("A1:A99999"))

'Je bloque les calcul sur certaines feuilles
Worksheets("DATA").EnableCalculation = False
Worksheets("CONVERSION").EnableCalculation = False

'--------------------------------------------------------Initialisation de la page
'Je vide la page Concernée


With Sheets("CONVERSION")

L = .[w65000].End(xlUp).Row


.Range("A2:Ab" & L).ClearContents
.Range("A2:Ab" & L).FormatConditions.Delete


Range("w2").Select
End With

'-----------------------------------------------------------------------------------
'--------------------------------------------Copie des données de la Feuille IMPORT
'je recopie depuis la feuille "IMPORT" les datas que je veux importer et transformer dans la feuille "CONVERSION"

---------'Dans l'exemple qui me concerne il ya 3000 lignes--------------

With Sheets("IMPORT")
'Copie de la DATE
    .Range("A2", .Range("A65536").End(xlUp).MergeArea).Copy
    Sheets("CONVERSION").Range("B2").PasteSpecial xlPasteValues
    
'Copie du LIBELLE
    .Range("c2", .Range("c65536").End(xlUp).MergeArea).Copy
    Sheets("CONVERSION").Range("w2").PasteSpecial xlPasteValues
    
'Copie du DEBIT
    .Range("D2", .Range("D65536").End(xlUp).MergeArea).Copy
    Sheets("CONVERSION").Range("P2").PasteSpecial xlPasteValues
    
  'Copie du  CREDIT
    .Range("E2", .Range("e65536").End(xlUp).MergeArea).Copy
    Sheets("CONVERSION").Range("Q2").PasteSpecial xlPasteValues
    
    
    
End With





'--------------------------------------------------------------------------------------------------
'------------------------------------------------Recherche de COMMERCE ET DIFFERENTES VALIDATIONS

'J'installe les formules prioritaires, notamment celle en Colonne X
'C'est long 3000 lignes avec une formule matricelle

With Sheets("CONVERSION")
Worksheets("CONVERSION").EnableCalculation = True


'COMMERCES
   .Range("x2").FormulaArray = _
    "=IF(ISNA(VLOOKUP(RC[-1],DATABUDGET,2,FALSE)),INDEX(DATABUDGET[LIBELLE],MAX(IF(ISNUMBER(SEARCH(DATABUDGET[ORIGINE],RC[-1])),ROW(DATABUDGET[LIBELLE])-1,0)),),VLOOKUP(RC[-1],DATABUDGET,2,FALSE))"

   .Range("x2").AutoFill Destination:=.Range("x2:x" & L), Type:=xlFillDefault
  
    'Validation Finale
    .Range("aa2:aa" & L).FormulaR1C1 = _
        "=IF(XLOOKUP(RC[-3],DATA!C[-25],DATA!C[-17],FALSE)<>""OUI"",""NON"",""OUI"")"
  
  
    'Contre validation des données
 .Range("z2:z" & L).FormulaR1C1 = "=VLOOKUP(RC[-2],DATABUDGET[[LIBELLE]:[Validation]],8,false)"
 


 

End With



'-----------------------------------------------------------------------
'------------------------------------------------Intallation des FORMULES

With Sheets("CONVERSION")
Worksheets("CONVERSION").EnableCalculation = False
'Code
  .Range("A2").Value = X + 1
  .Range("a3:a" & L).FormulaR1C1 = "=R[-1]C+1"
  '.Range("a2:a" & L).Value = .Range("a2:a" & L).Value


'Transformation de la DATE en ANNEE
  .Range("b2:b" & L).NumberFormat = "DD/MM/YYYY"
  .Range("C2:C" & L).FormulaR1C1 = "=YEAR(RC[-1])"
  '.Range("C2:C" & L).Value = .Range("C2:C" & L).Value
 
 
 
     'MOIS
 .Range("d2:d" & L).FormulaR1C1 = "=sansaccent(UPPER(TEXT((RC[-2]),""MMMM"")))"
 '.Range("d2:d" & L).Value = .Range("C2:C" & L).Value
  
 
   'BUDGETREEL = REEL
  .Range("E2:E" & L).Value = "REEL"
 
 
 'Compte
  .Range("F2:F" & L).Value = UCase(NomCompte)
 
 
  'N° de CHQ
  .Range("j2:j" & L).FormulaR1C1 = "=IF(RC[2]=""CHQ"",RIGHT(RC[13],7),"""")"
 
     'MODE = VRT
  .Range("l2:l" & L).FormulaR1C1 = "=XLOOKUP(RC[12],DATA!C[-10],DATA!C[-5],false)"
 
    
    'Tiers
  .Range("M2:M" & L).FormulaR1C1 = "=XLOOKUP(RC[11],DATA!C[-11],DATA!C[-5],FALSE)"
 
  
    'Futur = NON
  .Range("n2:n" & L).Value = "NON"
 
  'BQ =OUI
  .Range("o2:o" & L).Value = "OUI"
 
 
   'Débit Crédit
 .Range("R2:R" & L).FormulaR1C1 = "=RC[-1]-RC[-2]"
 

'Calcul du FLAG
.Range("s2:s" & L).Value = "OUI - " & Format(Date, "YYYY-MM-DD")

'Calcul du numéro de semaine
.Range("T2:T" & L).FormulaR1C1 = "=Year(RC2) & TEXT(NoSem(rc2),""00"")"
 
'Groupe
 .Range("H2:H" & L).FormulaR1C1 = "=VLOOKUP(RC[16],DATABUDGET[[LIBELLE]:[GROUPE]],4,FALSE)"
 
'Ligne
.Range("i2:i" & L).FormulaR1C1 = "=VLOOKUP(RC[15],DATABUDGET[[LIBELLE]:[LIGNE]],5,FALSE)"
 
 'Poste
  .Range("G2:G" & L).FormulaR1C1 = "=RC[1]&"" - ""&RC[2]"
 
'Libelle
  .Range("k2:k" & L).FormulaR1C1 = "=RC[-2]&"" l ""&TEXT(MONTH(RC[-9]),""00"")&""/""&YEAR(RC[-9])"


'Vérif Ligne
.Range("U2:U" & L).FormulaR1C1 = _
        "=IF((RC[-13]&"" - ""&RC[-12])=RC[-14],""OK"",""A VERIFIER"")"
      
        
 'Vérif Poste
.Range("V2:V" & L).FormulaR1C1 = _
        "=IF(ISERROR(VLOOKUP(RC7,PARAMETRES!R1C3:R255C3,1,FALSE)),""Not Exist"",""Exist"")"
 
 
 
 

Worksheets("CONVERSION").EnableCalculation = True


End With

'-----------------------------------------------------------------------
'-----------------------------------------------VEROUILLAGE DES CELLULES

'Je figes les cellules

With Sheets("CONVERSION")
Worksheets("CONVERSION").EnableCalculation = False

'Commerces
 .Range("x2:x" & L).Value = .Range("x2:x" & L).Value

 'Code
  .Range("a2:a" & L).Value = .Range("a2:a" & L).Value
 
'Transformation de la DATE en ANNEE
  .Range("C2:C" & L).Value = .Range("C2:C" & L).Value

'MOIS
 .Range("d2:d" & L).Value = .Range("C2:C" & L).Value

 'N° de CHQ
.Range("j2:j" & L).Value = .Range("j2:j" & L).Value


 'MODE = VRT
  .Range("l2:l" & L).Value = .Range("l2:l" & L).Value
 
    
    'Tiers
  .Range("M2:M" & L).Value = .Range("M2:M" & L).Value
 
  
 
   'Débit Crédit
  '.Range("r2:r" & L).Value = .Range("r2:C" & L).Value
  
  'Calcul du FLAG
.Range("s2:s" & L).Value = .Range("s2:s" & L).Value

'Calcul du numéro de semaine
.Range("T2:T" & L).Value = .Range("T2:T" & L).Value
  
  
 'Groupe
  .Range("h2:h" & L).Value = .Range("h2:h" & L).Value
  
  
'Ligne
.Range("i2:i" & L).Value = .Range("i2:i" & L).Value
  
'Poste
  '.Range("G2:G" & L).FormulaR1C1 = "=RC[1]&"" - ""&RC[2]"

'Poste
  .Range("G2:G" & L).Value = .Range("G2:G" & L).Value
  
'Libelle
  .Range("k2:k" & L).Value = .Range("k2:k" & L).Value


'Vérif Ligne
.Range("U2:U" & L).Value = .Range("k2:k" & L).Value
        
 'Vérif Poste
.Range("V2:V" & L).Value = .Range("V2:V" & L).Value
  
  

'Contre validation des donneées
 .Range("z2:z" & L).Value = .Range("z2:z" & L).Value
 
'Validation Finale
.Range("aa2:aa" & L).Value = .Range("z2:z" & L).Value





Worksheets("CONVERSION").EnableCalculation = True
End With
'-------------------------------------------------------------------------
'------------------------------------------------Mise en place des formats

' Un peu de mise en page

With Sheets("CONVERSION")
'Couleur de fonds colonne X


.Range("A2:ab" & L).Interior.Color = vbWhite
 With .Range("A1").CurrentRegion
        .Borders(1).LineStyle = 0 'bordure gauche et insidevertical
        .Borders(2).LineStyle = 0 'bordure droite et insidevertical
        .Borders(3).LineStyle = 0 'bordure  top et 'insidehorizontal
        .Borders(4).LineStyle = 0 'bordure bottom et insidehorizontal
End With

 With .Range("A1").CurrentRegion
        .Borders(1).LineStyle = 3 'bordure gauche et insidevertical
        .Borders(2).LineStyle = 3 'bordure droite et insidevertical
        .Borders(3).LineStyle = 3 'bordure  top et 'insidehorizontal
        .Borders(4).LineStyle = 3 'bordure bottom et insidehorizontal
End With


'mfc

With .Range("A2:aa" & L).FormatConditions.Add(xlExpression, , "=ET($AA2=""OUI"";$Z2=""OUI"")")
    .Interior.Color = RGB(0, 255, 255)
    With .Font
        .Bold = False
        .Color = RGB(0, 0, 0)
    End With
End With



End With

Application.Calculation = xlCalculationAutomatic

Range("w2").Select
  
        
Application.ScreenUpdating = True
End Sub
 

Discussions similaires

  • Question
Microsoft 365 Code VBA
Réponses
10
Affichages
747
Réponses
4
Affichages
416

Membres actuellement en ligne

Statistiques des forums

Discussions
315 087
Messages
2 116 084
Membres
112 655
dernier inscrit
fannycordi