Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 Harmoniser valeur de cellules selon 2 variables

Thomas75

XLDnaute Nouveau
Bonjour à tous,

J'ai creusé un peu dans tous les sens pour me sortir de cette situation où je dois harmoniser les valeurs de plusieurs cellules selon 2 variables...

Dans ma feuille Excel, j'ai :
Colonne A : une numérotation qui s'incrémente selon une donnée récupérée et qui crée plusieurs lignes
Colonne B : la colonne à harmoniser selon la colonne C
Colonne C : ici, la variable qui va m'intéresser est le terme "sillon"

Dans l'idée de ma macro à 2 variables

je voudrais, pour toutes les données de la feuille que :
que toutes les lignes de la colonne A égales à *variable a* (incrémentation de 1 à 100 par loop de 1 pas)
toutes les lignes = à *variable a*
prennent la valeur de la ligne de la colonne B contenant "route" en colonne C


Petite illustration après ce long discours :



lignes 219 à 221 sont concernées par la valeur de colonne A =37
Pour toutes ces lignes où valeur A=37, il faudrait que la valeur des cellules de la colonne B soient nommées 4402/03 parce que c'est la valeur de la cellule en colonne B qui contient "Route" en colonne C sur la même ligne

autre formulation avec un exemple plus bas :

lignes 227 à 239 la valeur en A=40
pour toutes ces lignes où A=40 , j'ai "route" en colonne C sur la ligne 227
alors pour toutes les lignes 227 à 239, je voudrais que les cellules des lignes concernées prennent toutes la valeur 4502/03 (la valeur condition trouvée en ligne 227)

ça me permettrait d'automatiser l'harmonisation de mes données au lieu de devoir jouer constamment en manuel avec les filtres et de risquer l'erreur d'habitude au bout de la 300, 400 ou 500è ligne ^^

Merci d'avance pour les propositions ou aides à la réflexion !
 
Solution
Une proposition... à tester.

VB:
Sub Route()
'
Dim LigneRoute As Long, LigneGroupDeb As Long, LigneGroupFin As Long
Dim Group, Num As String

    Application.ScreenUpdating = False

    LigneRoute = 2
    While Cells(LigneRoute, 3).Value2 <> ""
        While Cells(LigneRoute, 3).Value2 <> "Route" And Cells(LigneRoute, 3).Value2 <> ""
            LigneRoute = LigneRoute + 1
        Wend
        Group = Cells(LigneRoute, 1).Value2
        Num = Cells(LigneRoute, 2).Value2
        LigneGroupDeb = Range("A:A").Find(Group).Row
        LigneGroupFin = LigneGroupDeb + 1
        While Cells(LigneGroupFin, 1).Value2 = Group And Cells(LigneGroupFin, 1).Value2 <> ""
            LigneGroupFin = LigneGroupFin + 1
        Wend
        LigneGroupFin...

TooFatBoy

XLDnaute Barbatruc
Une proposition... à tester.

VB:
Sub Route()
'
Dim LigneRoute As Long, LigneGroupDeb As Long, LigneGroupFin As Long
Dim Group, Num As String

    Application.ScreenUpdating = False

    LigneRoute = 2
    While Cells(LigneRoute, 3).Value2 <> ""
        While Cells(LigneRoute, 3).Value2 <> "Route" And Cells(LigneRoute, 3).Value2 <> ""
            LigneRoute = LigneRoute + 1
        Wend
        Group = Cells(LigneRoute, 1).Value2
        Num = Cells(LigneRoute, 2).Value2
        LigneGroupDeb = Range("A:A").Find(Group).Row
        LigneGroupFin = LigneGroupDeb + 1
        While Cells(LigneGroupFin, 1).Value2 = Group And Cells(LigneGroupFin, 1).Value2 <> ""
            LigneGroupFin = LigneGroupFin + 1
        Wend
        LigneGroupFin = LigneGroupFin - 1
        Range(Cells(LigneGroupDeb, 2), Cells(LigneGroupFin, 2)).Select
        Range(Cells(LigneGroupDeb, 2), Cells(LigneGroupFin, 2)).Value2 = Num
        LigneRoute = LigneGroupFin + 1
    Wend

End Sub
 

Pièces jointes

  • Export test.xls
    117 KB · Affichages: 2

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…