Laoo | sidne a écrit :
Bonjour, après des heures et des heures de recherche je m'en remets à vous pour résoudre mon problème.
ActiveCell.FormulaR1C1 = "=IF(LEFT(RC[-7],1)="" "",= bm,LEFT(RC[-7],4))"
bm = ActiveCell.Value
C'est la variable bm que je n'arrive pas à définir ou à affecter à la cellule active.
J'ai VBA pour Excel pour les nuls mais je dois être encore plus nul, j'ai essayé maintes et maintes instructions et je n'y arrive toujours pas.
J'espère avoir été assez clair et qu'une âme charitable parmi vous pourra me sortir de cette galère.
Merci
|
NEIN !!!!
On ne peut pas affecter une variable de macro dans une formule de terrain !!! Elle ne représente évidemment plus rien à l'arrivée ! Et on ne peut pas introduire au milieu ce signe égal en essayant de bidouiller un chmerdakès!!! VERBOTEN!!! je t'ai pondu cette petite macro qui donne le résultat que tu voulais. MAIS, il y a DEUX contrainteS absolueS : 1) il ne doit y avoir aucune ligne vide dans l'ensemble à traiter, car la macro sélectionne TOUTES les cellules contigües à la cellule active, mais SEULEMENT celles-ci. est-ce clair? j'ai qud même placé une vérif par sécurité! = si il y a encore un bloc non traité, tu cliques dedans, et tu recommences, etc.
2) la ligne au-dessus doit être IMPERATIVEMENT VIDE, ou alors il faut introduire une ligne entre. j't'esplique: la formule fait appel à la VALEUR se trouvant au-dessus, donc elle ne peut pas appeler une ligne avant la ligne 1, évidemment.
voila la macro:
Sub Macro_ZZ()
ActiveCell.CurrentRegion.Columns(1).Select
ActiveCell.CurrentRegion.Columns(2).FormulaR1C1 = "=IF(ISNUMBER(1*LEFT(RC1,2)),LEFT(RC1,4),R[-1]C)"
ActiveCell.CurrentRegion.Columns(2).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
ActiveCell.CurrentRegion.Columns(1).TextToColumns Destination:=ActiveCell.Offset(0, 1), DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 9), Array(4, 1))
Columns(3).AutoFit
DernRang = Range("A1" ).SpecialCells(xlLastCell).Row
NbRangs = ActiveCell.CurrentRegion.Rows.Count
If DernRang <> NbRangs Then MsgBox ("Attention! la dernère ligne est la " & DernRang & " et ce bloc contient " & NbRangs & " lignes." )
ActiveCell.Offset(NbRangs + 3, -1).Select
End Sub
CQFD !
---------------
Olympus OM-D EM-5 + 14-42
|