XL 2013 Formules et code VBA

lovesky

XLDnaute Junior
Bonjour à tous,

Je suis face à un petit soucis, j'essaye d'intégrer des formules que j'utilise dans une feuille dans un code VBA mais je n'y arrive pas :'(

J'ai une feuille "liquide" et "liquideold"
Mon code VBA me permet de mettre ma feuille "liquide" dans une autre feuille "Resume"
Mes colonnes vont de A à T
Voici le code :

Sub sample()
Dim wsO As Worksheet, wsI As Worksheet
Dim wsOLRow As Long, wsILRow As Long

Set wsO = ThisWorkbook.Worksheets("Resume")
Set wsI = ThisWorkbook.Worksheets("liquide")

With wsO
If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
wsOLRow = .Cells.Find(What:="*", _
After:=.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row + 1
Else
wsOLRow = 1
End If
End With

With wsI
wsILRow = .Range("A" & .Rows.Count).End(xlUp).Row
For i = 1 To wsILRow
If .Cells(i, "T").Value2 <> 0 Then
.Rows(i).Copy wsO.Rows(wsOLRow)
wsOLRow = wsOLRow + 1
ElseIf .Cells(i, "T").Value2 = 0 Then
If .Cells(i, "C").Value2 < 81 Or .Cells(i, "C").Value2 > 99 Then
.Rows(i).Copy wsO.Rows(wsOLRow)
wsOLRow = wsOLRow + 1
End If
End If

Next i
End With
End Sub


Ensuite, je vais sur ma feuille "Resume" et :
  • dans la colonne T : je mets la formule "=INDEX(liquideold!L:L;MATCH(I3;liquideold!I:I;0))"
  • Colonne U : "=MATCH(I3;liquideold!I:I;0)"
  • Colonne V : "=INDEX(liquideold!K:K;MATCH(I3;liquideold!I:I;0))"
Puis je tire vers le bas, jusqu'à la dernière ligne, mes formules.

Ce que j'aurai aimé, c'est que lorsque j'exporte ma feuille "liquide" vers "resume", les colonnes T, U et V soit insérées automatiquement.

Je vous remercie d'avance pour votre aide
 

lovesky

XLDnaute Junior
Oupssss sotte que je suis, je me suis trompé en indiquant les colonnes ... il fallait lire :
  • dans la colonne U : je mets la formule "=INDEX(liquideold!L:L;MATCH(I3;liquideold!I:I;0))"
  • Colonne V : "=MATCH(I3;liquideold!I:I;0)"
  • Colonne W : "=INDEX(liquideold!K:K;MATCH(I3;liquideold!I:I;0))"
Mille excuses :p
 

Dranreb

XLDnaute Barbatruc
Joignez votre classeur.

Ou testez vous même à la fin :
VB:
With wsO.Rows(2).Resize(wsOLRow - 1)
   .Columns("V").FormulaR1C1 = "=MATCH(RC9,LiquideOld!C9,0)"
   .Columns("U").FormulaR1C1 = "=INDEX(LiquideOld!C12,RC[1])"
   .Columns("W").FormulaR1C1 = "=INDEX(LiquideOld!C11,RC[-1])"
   End With
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
J'ai un arrêt sur Set wsII = ThisWorkbook.Worksheets("poudre"): cette feuille n'existe pas.
Pourquoi n'utilisez vous pas les noms d'objets Worksheet de la rubrique Microsoft Excel Objets ? Ce serait plus simple ! Quitte à les renommer plus explicitement dans la fenêtre de propriétés (Je ne parle pas des noms des feuilles Excel dont ces objets assument la représentation dans VBA).
Essayez tout à la fin mon code en Edit poste précédent.
 
Dernière édition:

lovesky

XLDnaute Junior
J'ai supprimé les feuilles "poudre" et "autres" pour
1) pour que le fichier ne soit pas trop lourd
2) car j'applique le même principe sur ces feuilles que la feuille "liquide"

Je vais tester votre code et reviendrai dire ce qu'il en est.

Merci à vous
 

Statistiques des forums

Discussions
312 094
Messages
2 085 240
Membres
102 832
dernier inscrit
kirale