Inserer une formule excel complexe sous VBA
Résolu
ti_mouton
Messages postés
143
Date d'inscription
Statut
Membre
Dernière intervention
-
ti_mouton Messages postés 143 Date d'inscription Statut Membre Dernière intervention -
ti_mouton Messages postés 143 Date d'inscription Statut Membre Dernière intervention -
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 :
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 !
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:
- Inserer une formule excel complexe sous VBA
- Formule si et excel - Guide
- Formule moyenne excel plusieurs colonnes - Guide
- Insérer liste déroulante excel - Guide
- Insérer une vidéo dans powerpoint - Guide
- Formule somme excel colonne - Guide
1 réponse
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
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
Variable String (plus de 2 millions de caracteres) avec decoupage par: " & _
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
Il est certain que si vous deplacez les fichiers, n'importe quelle ligne de code avec un chemin ecrit, ne marche pas (!!!!!!)