Utilisation de variables dans des formules

Bonjour à toutes et tous,

je débute en VBA, je souhaite dans un premier temps faire de la mise en forme de fichier Excel extrait d'un fichier texte. Mon objectif dans un premier temps et la redisposition des colonnes. Les étapes de ma redisposition sont assez simples : premièrement supprimer les colonnes A puis B en décalant vers la gauche les autres colonnes entre chaque suppression.

Ensuite dans la colonne C, j'aimerai effectuer une calcul via une formule afin d'avoir sur la colonne C, les valeurs de B auxquelles je soustrait la valeur de A1. j'essaye de passer par une variable cependant cela ne fonctionne pas. j'ai essayé différentes solutions proposées sur d'autres posts mais je n'y arrive toujours pas.

Je vous mets en pièce jointe mon code de macro et mon fichier excel de départ.

Merci d'avance pour vos réponses.

Sub Redispositon_cellules()
'
' Redispositon_cellules Macro
'

'
    Dim v As Long
    Columns("A:A").Select
    Selection.Delete Shift:=xlToLeft
    Columns("B:B").Select
    Selection.Delete Shift:=xlToLeft
    Selection.ClearContents

    v = Range("A1").Value
    MsgBox v
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "=Sub(RC[-1] : " & v & ")"

End Sub
7classeur1.xlsx (30.93 Ko)

Bonjour,

Tout cela n'est pas bien clair !

Supprimer les deux premières colonnes, OK ! Il s'ensuit que la colonne A contient des dates et B des heures, et C du texte.

Tu dis vouloir mettre en C une formule soustrayant la valeur de A1 (cellule) de la valeur en B. Outre que l'on ne voit pas ce qui est cherché en soustrayant une date fixe d'une valeur horaire, tu établis une formule utilisant une fonction Sub inexistante que tu places en B1 et qui ferait une concaténation si elle pouvait fonctionner...

Avoue que l'on peut s'y perdre !

Conseils : clarifier ce que tu veux faire !

Ensuite pour ne pas rester un éternel débutant, il convient d'éviter l'enregistreur pour produire un code cohérent, ou tout au moins le réécrire entièrement (sachant ce qu'on écrit) pour éliminer prioritairement tout Select ou Activate du code ainsi que nombre d'autres éléments inutiles, puis en concevant un code de singer des opérations manuelles dans Excel pour utiliser les moyens qu'offre VBA de faire autrement.

Cordialement.

Merci, tu as raison c'est du charabia.

Ce que je fais c'est supprimer les colonnes A, C et D. J'insère ensuite une colonne en B, celle-ci va contenir le résultat du calcul.

Je met une copie du fichier après avoir effectué les modifications manuellement. Ca sera surement plus clair pour voir ce que je souhaite supprimer et garder.

voici les deux versions du fichiers :

10classeur1.xlsx (30.93 Ko)

Un peu plus clair

Sub Modifier()
    Dim n%
    With Worksheets("Feuil1")
        n = .Cells(.Rows.Count, 1).End(xlUp).Row
        Application.ScreenUpdating = False
        .Columns("C:D").Delete
        .Columns("A").Delete
        .Columns("B").Insert
        .Range("B1").Formula = "=(A1-$A$1)/1000"
        .Range("B1").AutoFill .Range("B1:B" & n)
    End With
End Sub

Note que tu pourrais directement mettre le résultat dans la nouvelle colonne B plutôt qu'une formule...

Merci pour ton aide. Je vais essayer de déterminer comment éviter d'utiliser la formule, cependant vu que cela fonctionne très bien comme ça, je vais passer à la suite.

Si tu rajoutes une ligne (avant End With) :

        .Range("B1:B" & n).Value = .Range("B1:B" & n).Value

Cela écrasera les formules au profit des valeurs.

C'est le plus économique en termes d'écriture de code.

A priori, la constitution d'un tableau de résultats et son affectation à la colonne serait plus rapide, mais plus long à écrire, et l'écart ne deviendrait sensible que sur un bien plus grand nombre de lignes (centaines de milliers) et opération répétée...

Cordialement.

Merci pour tout.

Rechercher des sujets similaires à "utilisation variables formules"