Partage
  • Partager sur Facebook
  • Partager sur Twitter

Dynamisation de ligne de calculs dans VBA Excel.

Ligne Formulalocal

    1 juillet 2019 à 16:27:06

    Bonjour Chers Tous,

    Je débute en VBA Excel et j'aimerais optimiser mon code de manière à limiter les instructions de mon code.

    Je vous remercie d'avance pour votre aide. Ci-dessous les lignes que je souhaite optimiser de manière à créer une boucle :

    Range("F" & LigneTotal).FormulaLocal = "=Somme(F2:F" & LigneTotal - 1 & ")"
    Range("G" & LigneTotal).FormulaLocal = "=Somme(G2:G" & LigneTotal - 1 & ")"
    Range("H" & LigneTotal).FormulaLocal = "=Somme(H2:H" & LigneTotal - 1 & ")"
    Range("I" & LigneTotal).FormulaLocal = "=Somme(I2:I" & LigneTotal - 1 & ")"
    Range("J" & LigneTotal).FormulaLocal = "=Somme(J2:J" & LigneTotal - 1 & ")"
    

    Le code en entier :

    Sub MiseàJour_Conso()
    ' Initialisation
    
    ' Selection de la feuille Conso de la cellule A2 à la derniere.
    Worksheets("Conso").Activate
    DerniereLigne = ActiveSheet.UsedRange.Rows.Count + 1
    ActiveSheet.Range("A2:J" & DerniereLigne).Select
    
    ' On efface la selection de cellule
    Selection.Clear
    
    ' Parcours de tous les feuilles et effectue les copier-coller pour chaque zones
    
        Dim Zone As Worksheet
        Dim ZoneS As Worksheet
    
        Const S_Conso As String = "Conso"
        Const S_TRC As String = "TRC"
        Const S_Recap As String = "Recap"
    
        Dim DebutNomFichier As Integer
    
            Set ZoneS = Worksheets(S_Conso)
    
            For Each Zone In Worksheets
            If Zone.Name <> S_Conso And Zone.Name <> S_TRC And Zone.Name <> S_Recap Then
    
                Zone.Activate
                AvantDerniereLigne = ActiveSheet.UsedRange.Rows.Count - 3
                Zone.Range("A2:D" & AvantDerniereLigne).Copy
                Worksheets("Conso").Activate
                DebutNomFichier = ActiveSheet.UsedRange.Rows.Count + 1
                Range("A" & ActiveSheet.UsedRange.Rows.Count + 1).Select
                ActiveSheet.Paste
                Application.CutCopyMode = False
    
            End If
            Next Zone
            Set ZoneS = Nothing
    
    ' Finalisation des travaux
    
    ' Les RET & ZONE & MSISDN dans les cellules vides
    LigneRETAAA = ActiveSheet.UsedRange.Rows.Count - 3
    ActiveSheet.Range("E2:E" & LigneRETAAA).Select
    
    
    ' Calcul (ligne TOTAL:)
    LigneTotal = ActiveSheet.UsedRange.Rows.Count + 1
    Range("D" & LigneTotal) = "TOTAL :"
    JaunePale = 13434879
    Range("D" & LigneTotal & ":J" & LigneTotal).Interior.Color = JaunePale
    Range("D" & LigneTotal & ":J" & LigneTotal).Font.Bold = True
    ' Formule NB à mettre ici pour determiner le nombre de CF
    Range("F" & LigneTotal).FormulaLocal = "=Somme(F2:F" & LigneTotal - 1 & ")"
    Range("G" & LigneTotal).FormulaLocal = "=Somme(G2:G" & LigneTotal - 1 & ")"
    Range("H" & LigneTotal).FormulaLocal = "=Somme(H2:H" & LigneTotal - 1 & ")"
    Range("I" & LigneTotal).FormulaLocal = "=Somme(I2:I" & LigneTotal - 1 & ")"
    Range("J" & LigneTotal).FormulaLocal = "=Somme(J2:J" & LigneTotal - 1 & ")"
    
    ' Les RechercheV dans les cellules vides
    LigneRechercheV = ActiveSheet.UsedRange.Rows.Count - 1
    ActiveSheet.Range("F2:F" & LigneRechercheV).Select
    ActiveSheet.Range("F2:F" & LigneRechercheV).Value = WorksheetFunction.VLookup(Worksheets("Conso").Range("D2:D" & LigneRechercheV).Value, Sheets("TRC").Range("A:B"), 2, False)
    ActiveSheet.Range("G2:G" & LigneRechercheV).Value = WorksheetFunction.VLookup(Worksheets("Conso").Range("D2:D" & LigneRechercheV).Value, Sheets("TRC").Range("D:E"), 2, False)
    ActiveSheet.Range("H2:H" & LigneRechercheV).Value = WorksheetFunction.VLookup(Worksheets("Conso").Range("D2:D" & LigneRechercheV).Value, Sheets("TRC").Range("G:H"), 2, False)
    ActiveSheet.Range("I2:I" & LigneRechercheV).Value = WorksheetFunction.VLookup(Worksheets("Conso").Range("D2:D" & LigneRechercheV).Value, Sheets("TRC").Range("J:K"), 2, False)
    ActiveSheet.Range("J2:J" & LigneRechercheV).Value = WorksheetFunction.VLookup(Worksheets("Conso").Range("D2:D" & LigneRechercheV).Value, Sheets("TRC").Range("M:N"), 2, False)
    
    
    ' Calcul Nombre CF ACTIF zone
    LigneNbCFActif = ActiveSheet.UsedRange.Rows.Count + 2
    Range("E" & LigneNbCFActif).Select
    Range("E" & LigneNbCFActif) = "Nb CF Actif :"
    Range("E" & LigneNbCFActif & ":F" & LigneNbCFActif).Interior.Color = JaunePale
    Range("E" & LigneNbCFActif & ":F" & LigneNbCFActif).Font.Bold = True
    ' Formule nb.si à mettre ici pour le calcul du nombre de CF actif
    Range("F" & LigneNbCFActif).Select
    
    ' Ajustement des colonnes
    Cells.EntireColumn.AutoFit
    
    ' Selection des cellules (ligne ajoutée dans la limite des colonne utilisée)
    LigneMiseForme = ActiveSheet.UsedRange.Rows.Count - 3
    ActiveSheet.Range("A2:J" & LigneMiseForme).Select
    
    ' Message de fin à l'utilisateur
    MsgBox "Mise à jour feuille Conso effectuée. " & LigneMiseForme - 1 & " Conseillers Financiers."
    
    End Sub




    • Partager sur Facebook
    • Partager sur Twitter
      8 juillet 2019 à 10:59:33

      Salut,

      Tu peux regarder du côte de Chr : https://docs.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/chr-function

      Avec ça tu pourras faire une boucle et remplacer les lettres par Chr(65+5+i) (à vérifier mais ça devrait donner F si i=0) par exemple.

      • Partager sur Facebook
      • Partager sur Twitter

      Dynamisation de ligne de calculs dans VBA Excel.

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown