OVH Cloud OVH Cloud

VB excel, formule dans une macro

4 réponses
Avatar
piotrg
Bonjour,

comme tout le monde ici, j'ai un petit souci au niveau programmation.

Mon problème :

Dans une feuille j'importe des données qui sont stockées dans la colonne A. Jusque là pas de souci.

Le nombre de lignes est variable, de 1 à Dernière ligne, jusque là pas de problème.

Maintenant, je dois faire un tri et ne retenir que certaines données qui ont des places variables (puisque le nombre de lignes est variable d'un cas à l'autre).

Voilà ce que je n'arrive pas à faire :

For i to Dernière ligne
Sheets("Feuille Import").Range("B"&i).formulalocal="=si(A&i=""truc"";0;1)"
Next i

Le résultat c'est qu'il me copie la dernière expression sans faute alors que je veux pouvoir avoir en Bi soit 0 soit 1.

Autrement dit comment je fais pour que dans la formule qui sera écrite dans ma feuille j'ai bien =:=si(A1="truc";0;1) pour i = 1
=si(A2="truc";0;1) pour i = 2...etc

4 réponses

Avatar
Gloops
piotrg a écrit, le 23/08/2012 17:10 :
Sheets("Feuille Import").Range("B"&i).formulalocal="=si(A&i=""tru c"";0;1)"



Bonjour,

J'imagine que l'idée, c'est qu'à la place de A&i, il faut remplacer l e i
par le numéro de ligne ?
Alors il faut le lui dire, comme tu as très bien su le faire un peu plu s
à gauche pour la colonne B.

Je trouve qu'on risque moins ce genre d'oubli en recourant à la syntaxe
Cells(numligne, numcolonne).

.FormulaLocal = "=si(" + Cells(i, 1).Address(True, True) + "=" + _
chr$(34) + "truc" + Chr$(34) + ";0;1)"

C'est lourd, mais les nombres sont avec des nombres et les chaînes avec
des chaînes.
Mais ça, c'est une question d'appréciation personnelle ...
D'ailleurs maintenant que j'ai dit ça, j'espère que je n'ai pas fait de
faute de syntaxe dans ma formule :)
Avatar
Gloops
Gloops a écrit, le 23/08/2012 17:30 :
Cells(i, 1).Address(True, True)

sauf que là tu vas te retrouver avec des signes $ devant la lettre de l a
colonne et le numéro de ligne.
J'aurais dû mettre Address(False, False)
Avatar
MichD
Bonjour,

Si tu veux copier ta formule sur un ensemble de cellules de la colonne A:A

'------------------------------------------
Sub test()
With Worksheets("Feuil1") 'Nom feuille à adapter
'Nom de la colonne à adapter au besoin
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.Formula = "=si(A1=""truc"",0,1)"
End With
End With
End Sub
'------------------------------------------


MichD
--------------------------------------------------------------
Avatar
piotrg
Le jeudi 23 Août 2012 à 17:09 par piotrg :
Bonjour,

comme tout le monde ici, j'ai un petit souci au niveau programmation.

Mon problème :

Dans une feuille j'importe des données qui sont stockées dans la
colonne A. Jusque là pas de souci.

Le nombre de lignes est variable, de 1 à Dernière ligne, jusque
là pas de problème.

Maintenant, je dois faire un tri et ne retenir que certaines données qui
ont des places variables (puisque le nombre de lignes est variable d'un cas
à l'autre).

Voilà ce que je n'arrive pas à faire :

For i to Dernière ligne
Sheets("Feuille
Import").Range("B"&i).formulalocal="=si(A&i=""truc"";0;1)"
Next i

Le résultat c'est qu'il me copie la dernière expression sans
faute alors que je veux pouvoir avoir en Bi soit 0 soit 1.

Autrement dit comment je fais pour que dans la formule qui sera écrite
dans ma feuille j'ai bien =:=si(A1="truc";0;1) pour i = 1
=si(A2="truc";0;1) pour i = 2...etc


Merci beaucoup à vous deux,

j'ai testé la proposition de MichD, qui fonctionne parfaitement.

Merci pour la rapidité de vos réponses.