XL 2016 Fonctions SI & ARRONDI en VBA appliquées à toute une colonne

elleag

XLDnaute Nouveau
Bonjour,

Etant débutante en VBA, j'ai regardé plusieurs forums dont le votre afin de trouver solution à mon problème. J'ai repéré quelques pistes mais rien qui ne s'applique vraiment à mon cas (si par mégarde j'ai loupé un sujet semblable vous m'en voyez désolée).

Je souhaite travailler sur des fichiers de données à 3 colonnes, dont un exemple que vous trouverez en PJ (c'est une version simplifiée, le fichier initial en a 8 mais pour que les explications soient plus claires je n'ai sélectionné que les colonnes qui m'intéressent)

En mode Excel classique je fais ceci :

Code:
ARRONDI(A1;2)
Que j'applique à toute la colonne

Je me positionne en D1 :
Code:
=SI(A2=A1;"";B2)
Je l'applique à toute la colonne

Puis, en E1
Code:
=SI(A2=A1;"";C2)
Pareil, je l'applique à toute la colonne


Or comme j'ai plusieurs dizaines de fichiers à traiter, je souhaite faire une macro. J'ai juste du mal à comprendre si je dois utiliser Target.Column, ou bien une boucle For etc.
Merci d'avance pour votre aide !
 

Pièces jointes

  • datatest.xlsx
    13.8 KB · Affichages: 15

Dranreb

XLDnaute Barbatruc
Bonjour.
Ni l'un ni l'autre. Dans un module standard :
VB:
Sub MacroX()
   ActiveSheet.[D1].Resize(ActiveSheet.UsedRange.Rows.Count, _
      2).FormulaR1C1 = "=IF(R[1]C1=RC1,"""",R[1]C[-2])"
   End Sub
Remarque: j'ai ignoré l'arrondi que je n'ai pas bien compris.
 

elleag

XLDnaute Nouveau
Bonjour.
Ni l'un ni l'autre. Dans un module standard :
VB:
Sub MacroX()
   ActiveSheet.[D1].Resize(ActiveSheet.UsedRange.Rows.Count, _
      2).FormulaR1C1 = "=IF(R[1]C1=RC1,"""",R[1]C[-2])"
   End Sub
Bonjour, c'est bien ce que j'avais fait initialement, mais sur mes fichiers finaux cela n'avait pas fonctionné, les valeurs en A n'étaient pas arrondies, et j'avais toutes les données au lieu de 1/2.
Quand je teste avec un seul fichier c'est bon, mais quand je la fait tourner pour plusieurs je me retrouve dans le cas ci-dessus.

J'ai d'ailleurs fait une erreur par rapport à l'arrondi, il ne me faut pas de décimales
 

Dranreb

XLDnaute Barbatruc
Expliquez-vous clairement. Avant d'installer les formule souhaitez-vous arrondir les valeurs en colonne A ?
Ou souhaitez vous plutôt que les formules prennent en compte les valeurs arrondies de la colonne A sans que celles-ci soient modifiées, comme ça :
VB:
Sub MacroX()
   ActiveSheet.[D1].Resize(ActiveSheet.UsedRange.Rows.Count, _
      2).FormulaR1C1 = "=IF(ROUND(R[1]C1,0)=ROUND(RC1,0),"""",R[1]C[-2])"
   End Sub
Remarque la D1 est en erreur parce que la A1 contient du texte qui ne peut pas être arrondi.
À moins que vous vous soyez trompé, et que la formule que vous disiez vouloir en D1 eusse dû être installée à partir de la D2 ? Voire à partir de la D3, comme ça ? :
Code:
Sub MacroX()
   ActiveSheet.[D2:E2].FormulaR1C1 = "=RC[-2]"
   ActiveSheet.[D3].Resize(ActiveSheet.UsedRange.Rows.Count - 2, _
      2).FormulaR1C1 = "=IF(ROUND(RC1,0)=ROUND(R[-1]C1,0),"""",RC[-2])"
   End Sub
 
Dernière édition:

elleag

XLDnaute Nouveau
À moins que vous vous soyez trompé, et que la formule que vous disiez vouloir en D1 eusse dû être installée à partir de la D2 ? Voire à partir de la D3, comme ça ? :
Code:
Sub MacroX()
   ActiveSheet.[D2:E2].FormulaR1C1 = "=RC[-2]"
   ActiveSheet.[D3].Resize(ActiveSheet.UsedRange.Rows.Count - 2, _
      2).FormulaR1C1 = "=IF(ROUND(RC1,0)=ROUND(R[-1]C1,0),"""",RC[-2])"
   End Sub
Ah oui en effet je m'excuse, je voulais bien dire D2

Votre code et celui que j'avais fait entre temps fonctionnent bien sur les fichiers tests dont j'ai envoyé un exemple, mais pas sur les fichiers initiaux. J'ai finalement compris que cela venait des fichiers en eux-mêmes : ils sont au format csv, où les séparateurs sont des points et non des virgules. En effectuant le changement dans la macro cela ne fonctionnait pas sur toutes les données de temps, cela laissait un blanc entre les entiers et les décimales. La suite ne pouvait donc pas marcher.

En utilisant les fichiers initiaux de format .xls le problème est résolu
Merci pour votre patience et désolée du dérangement !
 

Discussions similaires

Statistiques des forums

Discussions
312 111
Messages
2 085 405
Membres
102 883
dernier inscrit
jameseyz