Recherche de cellule puis décalage d'une lign

Dodhuu -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je suis actuellement bloqué sur cette macro VBA faite un peu de bricolage :
...................................................................................................
Sub egalité()
Dim colonne As Integer
Dim c As Range, plage As Range
Set plage = ([C6:CB6])

For Each c In plage
If c.Value <> "" Then
colonne = c.Column
Cells(colonne & 3).Select
ActiveCell.Formula = "=R[2]C"
Else
Cells(colonne & 3).Select
ActiveCell.Formula = "=R[3]C"
End If
Next c
End Sub
....................................................................................................
Alors pour moi elle est censée lui dire de chercher si les cellules de la ligne 6 sont vides.

Si la cellule en ligne 6 est vide, alors la cellule (de la même colonne) ligne 3 est censée être égale à la cellule (de la même colonne) ligne 5.

Si elle n'est pas vide alors la cellule ligne 3 = la cellule ligne 6.

Exemple :

AVANT
A........................B.......................C
1.................l.....................l.............

2.................l.....................l.............

3.................l.....................l.............

4.................l.....................l.............

5.......12......l.....................l......9.......

6.................l..........15.......l.............

APRES
A.............................B......................C
1.................l.........................l.............

2.................l.........................l.............

3.......12......l.........15............l.......9......

4.................l.........................l.............

5.......12......l.........................l......9.......

6.................l..........15...........l.............

Alors il n'y a pas de message d'erreur mais il me fait n'importe quoi :
Il me remplie la ligne 1 avec la ligne 4 une fois toutes les 20 colonnes jusqu'à la colonne PG (pourquoi ? je ne sais pas )

exemple : En C1 = C4 puis en AQ1 = AQ4 etc ...

(Je sais que c'est possible sans macro, mais j'ai besoin d'une macro :) )

Thanks for help

2 réponses

Paf
 
Bonjour,

l'anomalie provient de Cells(colonne & 3).Select si vous voulez selectionner la ligne 3 la syntaxe est la suivante:cells(3, colonne)

n'étant pas familier des coordonnées relatives, ci dessous ce que ça pourrait donner en supprimant le passage par des "select":

Dim colonne As Integer 
Dim c As Range, plage As Range 
Set plage = ([C6:CB6]) 
For Each c In plage 
    colonne = c.Column 
    If c.Value <> "" Then 
        Cells(3, colonne).Value = Cells(5, colonne).Value 
    Else 
        Cells(3, colonne).Value = Cells(6, colonne).Value 
    End If 
Next c


Bonne suite
0
Dodhuu
 
Hi,
Thanks mais ca ne marche pas, cette fois rien ne se passe :(

Est ce parce que les lignes 5 et 6 viennent d'un tableau dynamique ?
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
bonjour

il aurait été plus qu'utile de préciser le coup de la provenance des 2 lignes !!!

sans boule de cristal (bossé avant l'annonce tardive)

d'autre part dans ta macro, si la cellule ligne 6 est vide , pourquoi demande tu sa valeur en ligne 3?

en considérant que c'est linverse

Sub egalité()
Dim colonne As Integer
Dim c As Range

Application.ScreenUpdating = False
Range("C3:CB3") = ClearContents


For Each c In Range("C6:CB6")
      colonne = c.Column
     If c.Value <> "" Then
          Cells(colonne, 3) = c.Value
     Else
          Cells(colonne, 3) = c.Offset(-1, 0)
     End If
Next
End Sub


0
Dodhuu
 
Bonjour, désolé pour le manque de precision, j'ai pourtant essayé d'etre clair.

Et non si la cellule 6 est vide je demande la cellule 5, ce n'est seulement si elle n'est pas vide que je demande la 6
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
Bonjour,

a moins d'^tre devenu dyslexique, il me semble bien que c'est ce que je t'ai proposé :o)

If c.Value <> "" Then
'si la cellule ligne n'est pas vide alors
Cells(colonne, 3) = c.Value
' la cellule ligne 3 est égale à la cellule ligne 6

Else
'sinon (la cellule est vide)
Cells(colonne, 3) = c.Offset(-1, 0)
'la cellule ligne 3 est égale à la cellule au dessus de la ligne 6 (ligne,5)
End If
0