un debut dans VBA un peu hasardeux

A

arno

Guest
Sub Tri()
bonjour,
je me suis mis au langage VBA, car je vais avoir beaucoup de données à extraire et analyser. Mais voilà j'ai un souci de compréhension dans les boucles d'incrémentation.
voici une macro (lié avec essais.xls) qui devrait ajouter une case lorsque la valeur de référence n'est pas identique à la valeur souhaité. C'est à dire que la colonne A possède est une échelle de temps sur laquelle je voudrais placer les valeurs correspondante de chaque colonne b, d, f... qui ont une échelle respectif en c, e, g......
Mais voilà je comprends pas, il me semble que ma macro est correcte et ca marche pas. Pourtant quand je ne fait pas de boucle ca marche nickel sur des cases définies

sub tri()
Dim i As Integer, j As Integer, ref As Single
For i = 3 To 56 'pour les lignes de 3 à 56
ref = Range("A3").Offset(i).Value 'la valeur de référence est la cellule Ai
For j = 3 To 48 Step 2 'pour les colonnes 3 à 48
If Range("C3").Offset(i, j).Value <> ref Then
'comparer la valeur des cellules à la ref
Range("B3:C3").Offset(i, j).Insert 'si different de la valeur de
référence selectionner
End If 'la cellule ainsi que celle de gauche et
insérer une case
Next j
Next i

End Sub

Peut pêtre que quelqu'un pourra m'aiguiller
merci
 

Pièces jointes

  • Essais.xls.zip
    23.5 KB · Affichages: 14
  • Essais.xls.zip
    23.5 KB · Affichages: 13
  • Essais.xls.zip
    23.5 KB · Affichages: 15
R

Robert

Guest
Salut Arno, Georges, le forum,

J'ai eu du mal moi aussi a comprendre...

avec ta 1ère boucle For 1=3 To 56 et ref = Range("A3").Offset(i).Value, tu ne fait pas du tout référence à la cellule Ai mais à A(3+i). Pour faire référence à la cellule Ai il te faudrait :
ref = Range("A" & i).Value ou ref=Cells(i,1).value.

De la même manière, ta condition If Range("C3").Offset(i, j).Value <> ref Then fait référence à F(i+3), H(i+3), etc... Si j'ai compris ton problème, ce serait plutôt If Cells(i, j).Value <> ref Thenqui comparerait la première fois Ai à Ci, puis Ei, puis Gi etc...

Pour terminer il faudrait que tu revois aussi Range("B3:C3").Offset(i, j).Insert mais là j'ai pas saisi ce que tu voulais exactement... Si tu veux insérer un cellule (et décaler tout le tableau) à droite de la valeur différente de Ai il faidrait Cells(i, j).Insert Shift:=xlToRight.

À plus,

Robert
 
A

arno

Guest
merci, beaucoup
j'ai changé l'allocation des cellules à incrémenter avec votre aide, et un peu modifier les lignes.

Public Sub Tri()
Dim i As Integer, j As Integer, ref As Single
For j = 3 To 5 Step 2
For i = 3 To 20
ref = Range("a" & i).Value
If Cells(i, j).Value = ref Then
Cells(i, j).Font.FontStyle = "gras"
Else: Cells(i, j).Insert
End If
Next i
Next j
End Sub

toutefois 2 problèmes subsistent:
(1) je veux insérer une case avant les cellules de la colonnes b et c et pas uniquement avant la cellule incrémentée
(2) la valeur des cellules à comparer présentées dans le tableau sont arrondies à 2 chiffres après la virgule; Par conséquent elles sont toujours différentes. Je voudrais prendre la valeur arrondie et non celle entière. Et même.... dans mon fichier orginal les cellules sont des formules.............. faut il alors que je copie tous mes fichiers dans d'autres tableurs avec uniquement les valeurs?

le fichier joint est un exemple de ce que je voudrais faire
Encore merci
 

Pièces jointes

  • Essais2.xls.zip
    25 KB · Affichages: 14

Discussions similaires