Inserer une formule excel complexe sous VBA

Résolu/Fermé
ti_mouton Messages postés 143 Date d'inscription vendredi 29 mai 2015 Statut Membre Dernière intervention 5 septembre 2020 - Modifié par Whismeril le 9/07/2015 à 14:27
ti_mouton Messages postés 143 Date d'inscription vendredi 29 mai 2015 Statut Membre Dernière intervention 5 septembre 2020 - 15 juil. 2015 à 10:43
Bonjour,
Grâce au forum Développez, je sais maintenant comment retranscrire une formule excel en code VBA. A présent je souhaiterais intégré ma formule au code de mon userform (qui a été developpé par des membres de ce forum). Mais je n'ai pas les compétences nécessaires pour y arriver... Voici la fin du code de mon userform, avec la formule que je souhaite appliquer à la colonne R :

Private Sub CommandButton1_Click()
Dim DerLig As Integer
If TextBox2 = "" Then
    MsgBox "Merci de remplir le champ Déscription"
    Exit Sub
End If
With Worksheets("Saisie")
    If Ligne_Modif = 0 Then
        DerLig = .Range("B" & Rows.Count).End(xlUp).Row + 1
    Else
        DerLig = Ligne_Modif
    End If
    .Range("C" & DerLig).Value = ComboBox1.Value
    .Range("D" & DerLig).Value = ComboBox2.Value
    .Range("E" & DerLig).Value = ComboBox3.Value
    .Range("F" & DerLig).Value = ComboBox4.Value
    .Range("B" & DerLig).Value = ComboBox5.Value
    .Range("G" & DerLig).Value = TextBox1
    .Range("G" & DerLig).NumberFormat = "dd/mm/yyyy"
    .Range("H" & DerLig).Value = TextBox2.Value
    .Range("I" & DerLig).Value = TextBox4.Value
    .Range("J" & DerLig).Value = TextBox5.Value
    .Range("K" & DerLig).Value = TextBox3.Value
    .Range("L" & DerLig) = semaine(CDate(TextBox1))
    .Range("M" & DerLig) = Format(CDate(TextBox1), "mmmm")
    .Range("N" & DerLig) = Year(CDate(TextBox1))
    .Range("O" & DerLig).Value = OptionButton1.Value
    .Range("P" & DerLig).Value = ComboBox6.Value
    .Range("Q" & DerLig).Value = ComboBox7.Value
    .Range("R" & DerLig).Formula ="= IF(O:O=TRUE,(INDEX('\\BRUTUS\Bureautique\AssistantGestion\BETON\CDG FVMB VMBS\F... G...\Essai VBA MAppy\Suivi des temps Maintenance - Copie\[Matrice Frais (Km + MO).xlsm]Matrice Distance'!$A:$BZ,MATCH($C:$C,'\\BRUTUS\Bureautique\AssistantGestion\BETON\CDG FVMB VMBS\F... G....\Essai VBA MAppy\Suivi des temps Maintenance - Copie\[Matrice Frais (Km + MO).xlsm]Matrice Distance'!$A:$A,0),MATCH($D:$D,'\\BRUTUS\Bureautique\AssistantGestion\BETON\CDG FVMB VMBS\F... G...\Essai VBA MAppy\Suivi des temps Maintenance - Copie\[Matrice Frais (Km + MO).xlsm]Matrice Distance'!$1:$1,0)))*2,INDEX('\\BRUTUS\Bureautique\AssistantGestion\BETON\CDG FVMB VMBS\F... G...\Essai VBA MAppy\Suivi des temps Maintenance - Copie\[Matrice Frais (Km + MO).xlsm]Matrice Distance'!$A:$BZ,MATCH($C:$C,'\\BRUTUS\Bureautique\AssistantGestion\BETON\CDG FVMB VMBS\F.... G...\Essai VBA MAppy\Suivi des temps Maintenance - Copie\[Matrice Frais (Km + MO).xlsm]Matrice Distance'!$A:$A,0),MATCH($D:$D,'\\BRUTUS\Bureautique\Assista
ntGestion\BETON\CDG FVMB VMBS\F... G...\Essai VBA MAppy\Suivi des temps Maintenance - Copie\[Matrice Frais (Km + MO).xlsm]Matrice Distance'!$1:$1,0)))"
End With
 
Unload UserForm1
 
End Sub



La ligne de code .Range ("R" & DerLig) ne fonctionne pas. De plus j'aurais besoin de transformer le chemin d'accès au fichier "Matrice Frais (Km+MO)" en ThisworkBook.Path. Il faut que la formule puisse fonctionner sans que le classeur "Matrice Frais (Km + MO)" ne soit ouvert.

EDIT: Précision du langage dans la coloration syntaxique.

Si quelqu'un peut m'aider ... Merci d'avance !
A voir également:

1 réponse

Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
10 juil. 2015 à 07:59
Bonjour
La ligne de code .Range ("R" & DerLig) ne fonctionne pas. Elle est trop longue, elle dépasse les capacités du nombre de caractères admis dans une ligne VBA.
2 solutions:
Soit vous la tronçonner en plusieurs morceaux et vous affectez chaque tronçon à une variable, puis vous assemblez le tout, mais c'est pas évident à faire.
ou bien, écrivez votre formule dans une cellule d'une autre feuille de votre projet puis dans votre code, remplacez la ligne trop longue par (exemple avec la formule en A1 de la feuille FORMULE)
.Range("R" & DerLig).FormulaR1C1 = Sheets("Formule").Range("A1").FormulaR1C1
A moins que quelqu'un d'autre trouve mieux.
Cdlt
0
ti_mouton Messages postés 143 Date d'inscription vendredi 29 mai 2015 Statut Membre Dernière intervention 5 septembre 2020
10 juil. 2015 à 09:43
Merci Frenchie83, ton astuce fonctionne parfaitement !
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > ti_mouton Messages postés 143 Date d'inscription vendredi 29 mai 2015 Statut Membre Dernière intervention 5 septembre 2020
10 juil. 2015 à 10:20
Bonjour,

Variable String (plus de 2 millions de caracteres) avec decoupage par: " & _
    Dim formule As String

   formule = "= IF(O:O=TRUE,(INDEX('\\BRUTUS\Bureautique\AssistantGestion\BETON\CDG FVMB VMBS\F... G...\" & _
                    "Essai VBA MAppy\Suivi des temps Maintenance - Copie\[Matrice Frais (Km + MO).xlsm]Matrice Distance'!$A:$BZ,MATCH($C:$C,'\\BRUTUS\" & _
                    "Bureautique\AssistantGestion\BETON\CDG FVMB VMBS\F... G....\Essai VBA MAppy\Suivi des temps Maintenance - Copie" & _
                    "\[Matrice Frais (Km + MO).xlsm]Matrice Distance'!$A:$A,0),MATCH($D:$D,'\\BRUTUS\Bureautique\AssistantGestion\BETON\" & _
                    "CDG FVMB VMBS\F... G...\Essai VBA MAppy\Suivi des temps Maintenance - Copie\[Matrice Frais (Km + MO).xlsm]" & _
                    "Matrice Distance'!$1:$1,0)))*2,INDEX('\\BRUTUS\Bureautique\AssistantGestion\BETON\CDG FVMB VMBS\F... G...\Essai VBA MAppy\" & _
                    "Suivi des temps Maintenance - Copie\[Matrice Frais (Km + MO).xlsm]Matrice Distance'!$A:$BZ,MATCH($C:$C,'\\BRUTUS\Bureautique\" & _
                    "AssistantGestion\BETON\CDG FVMB VMBS\F.... G...\Essai VBA MAppy\Suivi des temps Maintenance - Copie\[Matrice Frais (Km + MO).xlsm]" & _
                    "Matrice Distance'!$A:$A,0),MATCH($D:$D,'\\BRUTUS\Bureautique\AssistantGestion\BETON\CDG FVMB VMBS\F... G...\" & _
                    "Essai VBA MAppy\Suivi des temps Maintenance - Copie\[Matrice Frais (Km + MO).xlsm]Matrice Distance'!$1:$1,0)))"
 .Range("R" & 1).Formula = formule
0
ti_mouton Messages postés 143 Date d'inscription vendredi 29 mai 2015 Statut Membre Dernière intervention 5 septembre 2020 > f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024
10 juil. 2015 à 12:09
Bonjour F894009,

Merci pour ta réponse.

Si je modifie l'emplacement de mon dossier (qui contient mes deux classeurs ThisWorkbook et Matrice Frais (Km + MO)), est-ce que ton code fonctionnera toujours ? Ne pourrait on pas remplacer l'expression du chemin d'accès au fichier par une autre expression prenant en compte ThisWorkbook.Path ?

Merci pour ton aide
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > ti_mouton Messages postés 143 Date d'inscription vendredi 29 mai 2015 Statut Membre Dernière intervention 5 septembre 2020
10 juil. 2015 à 14:05
Re,

Il est certain que si vous deplacez les fichiers, n'importe quelle ligne de code avec un chemin ecrit, ne marche pas (!!!!!!)
0
ti_mouton Messages postés 143 Date d'inscription vendredi 29 mai 2015 Statut Membre Dernière intervention 5 septembre 2020
10 juil. 2015 à 14:08
oui je me doute, mais justement, comment pallier à ce pb ?
0