Formules excel en VBA dans plage variable

Delux

XLDnaute Occasionnel
Bonjour a tous,
(desole pour les accents, je travaille sur clavier QWERTY)

Cela fait plusieurs jours que je cherche une solution pour inserer une formule dans une plage variable grace a une macro.

Pour exemple, j'ai choisi cette formule :

Code:
=CONCATENATE(LEFT($A5, 1), $B5, $C5, MID($D5, 2, 1))

J'ai essaye de la retranscrire dans une macro, mais le code ci-dessous ne fonctionne pas :
Code:
Sub Conca()
'
Dim Cell As Range
Dim Lg As Integer

Lg = 5

For Each Cell In Sheet1.Range("A5:D" & [A65489].End(xlUp).Row)
    If Cell.Value <> "" Then

        Sheet1.Range("F" & Cell.Row).Formula = Application.WorksheetFunction.Left(Cells(Lg, 1) & Cells(Lg, 2) & Cells(Lg, 3) & Application.WorksheetFunction.Mid(Cells(Lg, 4), 2, 1))
        
        Lg = Lg + 1
    
    End If
    Next

End Sub

J'ai joint un petit fichier exemple pour plus de precision ^^

Si vous possedez la solution, je suis preneur :)

Merci beaucoup

Cordialement,

Delux
 

Pièces jointes

  • formule dans range variable.xls
    32 KB · Affichages: 48

Delux

XLDnaute Occasionnel
Re : Formules excel en VBA dans plage variable

Bonjour Delux, Bonjour ERIC S , Si j'ai bien compris..
VB:
Sheet1.Range("F5.F" & [A65489].End(xlUp).Row).Formula = "=CONCATENATE(LEFT($A5, 1), $B5, $C5, MID($D5, 2, 1))"
Cordialement

Bonjour a tous,

Elge,

Ceci ne fonctionnera que pour la premiere ligne :/
J'aimerais que pour chaque cellules non vide en A:A, la formule prenne les infos de chaque ligne.

Un peu dans ce style:

Code:
=CONCATENATE(LEFT(Cells(Lg, 1), 1), Cells(Lg, 2), Cells(Lg, 3), MID(Cells(Lg, 4), 2, 1))

Cordialement,

Delux
 

Efgé

XLDnaute Barbatruc
Re : Formules excel en VBA dans plage variable

Re
Même si Delux semble avoir trouvé une réponse qui lui convient :rolleyes:.

Pour strictement répondre à la question d'origine et sur la base du code fourni dans l'exemple:
VB:
Sub Conca2()
Dim Cell As Range
For Each Cell In Sheet1.Range("A5:D" & [A65489].End(xlUp).Row)
    If Cell.Value <> "" Then
        Sheet1.Range("F" & Cell.Row).Formula = _
        "=CONCATENATE(LEFT($A" & Cell.Row & ", 1), $B" & Cell.Row & _
        ", $C" & Cell.Row & ", MID($D" & Cell.Row & ", 2, 1))"
    End If
Next
End Sub

Pour le même résultat en "accélérant la manoeuvre":
VB:
Sub test()
With Sheet1.Range("A5.A" & [A65489].End(xlUp).Row)
    .Offset(, 5).Formula = "=CONCATENATE(LEFT($A5, 1), $B5, $C5, MID($D5, 2, 1))"
    .SpecialCells(xlCellTypeBlanks).Offset(, 5).ClearContents
End With
End Sub

Voir:
VB:
Sub test2()
Sheet1.Range("A5.A" & [A65489].End(xlUp).Row).SpecialCells(xlCellTypeConstants).Offset(, 5).Formula = _
"=CONCATENATE(LEFT($A5, 1), $B5, $C5, MID($D5, 2, 1))"
End Sub

Cordialement
 

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 196
Messages
2 086 101
Membres
103 116
dernier inscrit
kutobi87