Etendre formule vers le haut et le bas

Bonjour,

Je travaille sur Excel 2007.

Je souhaiterai pouvoir étendre une formule (en vba) vers le bas et vers le haut suivant une condition.

Voici un exemple:

J'ai une valeur par famille dans la colonne B et je souhaiterai l'étendre dans la colonne C pour toute la famille.

Par exemple, pour la famille A, la valeur est 10.

pour la famille B, la valeur est 20.

J'ai trouvé un code afin de pouvoir étendre la formule vers le bas mais pas vers le haut.

En effet, il peut arriver que la valeur dans la colonne B ne soit pas la première valeur de la famille (exemple en B8)

Si je ne suis pas assez clair, n'hésitez pas à me le dire.

Merci

Bonjour,

à tester

inconvenant de mon code VBA :

  • changement de format => changement du code vba
  • un peu long si y a beaucoup trop de ligne (>1000)

Fonctionne très bien merci,

Malheureusement j'ai 300000 lignes à traiter :/

avec sa , sa devrai diminuer le temps d'exécution :

Sub Etendre()

dim i as long

dim j as long

Dim lettre As Variant

l = 2

For i = 2 To Range("A" & Rows.Count).End(xlUp).Row

If Range("B" & i).Value <> "" Then

lettre = Range("A" & i).Value

For j = l To Range("A" & Rows.Count).End(xlUp).Row

If Range("A" & j).Value = lettre Then

Range("C" & j).Value = Range("B" & i).Value

l = j

End If

Next j

End If

Next i

End Sub

teste le sur le fichier que vous avez joint pour voir si elle fonction toujours aussi bien avant de le mettre sur le classeur en question


avec 300000ligne le tempsd'exécution reste long (3 à 5min je pense voire plus )

Parfait, fonctionne très bien sur le fichier test et sur mon fichier final.

Merci beaucoup pour ton aide (rapide, claire et efficace)

Bonjour,

Je remets sujet à jour car j'ai un petit problème sur le code trouvé par minanse (que je remercie)

Le code fonctionne parfaitement bien mais quand je veux le faire tourner sur 300 000 (ou même 100 000) impossible.

Sur 1 000 lignes, le code s'exécute en 3 secondes mais sur 100 000 lignes c'est extrêmement long.

Est-ce que quelqu'un aurait une idée pour réduire le temps d'exécution?

Merci

Bonjour,

Regarde ce que donne la procédure suivante en temps d'exécution...

Sub EtendreValeur()
    Dim n&, i&, j&, fam, v
    With ActiveSheet
        Application.ScreenUpdating = False
        n = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = 2 To n
            If .Cells(i, 1) <> "" Then
                fam = .Cells(i, 1)
                For j = i To n
                    If .Cells(j, 2) <> "" Then v = .Cells(j, 2)
                    If .Cells(j + 1, 1) <> fam Then Exit For
                Next j
                .Cells(i, 3).Resize(j - i + 1).Value = v
                i = j: fam = Empty: v = Empty
            End If
        Next i
        Application.ScreenUpdating = True
    End With
End Sub

Cordialement.

Bonjour MFerrand,

Super, fonctionne très bien et très rapide

Merci beaucoup

Parfait ! Bonne continuation.

Rechercher des sujets similaires à "etendre formule haut bas"