Boucle de recherche pour remplissage colonne

bonjour,

je suis à recherche d'une âme charitable qui pourra m'aider à résoudre mon problème.

Je cherche à completer automatiquement. J' ai commencé un bout de code. Il fonctionne partiellement. Une partie seulement des lignes est remplies. Je n'arrive pas à voir ce qui cloche.

Principe:

En partant de la premiere valeur de la colonne H j'aimerai pouvoir rechercher la prochaine valeur identique et reporter en colonne J la valeur de la colonne B correspondante.

image

mon fichier et mon bout de code

Comme vous pouvez- le voir mon code saute des lignes colonne VBA. Il ne remplie pas les cellules en bleue.

Pouriez-vous svp m'aider à regler mon pb.

Cordialement,

hM

Sub next_prod()

Dim a As Integer, i As Integer, j As Integer, p As Integer, b As Integer, db As Long

db = Range("H" & Rows.Count).End(xlUp).Row
For i = 2 To db
    a = 0
    p = 0
    For j = i + p To db
        If Range("H" & i) = Range("H" & j) Then
            a = a + p
            If a = p Then
                p = j
            End If
        End If
    Next j
    If a > 0 Then
        Range("J" & i).Value = Range("B" & p).Value
    Else
        Range("J" & i).Value = ""
    End If
    Next i

End Sub

Bonjour,

Voici un essai en utilisant les fonctions INDEX EQUIV et NB.SI (pour contrôler l'existence) :

Sub next_prod()

set wf = worksheetfunction

with activesheet
    dl = .Range("H" & .Rows.Count).End(xlUp).Row
    For i = 2 To dl
        if wf.countif(.range("H" & i + 1 & ":H" & dl), .cells(i, 8).value) > 0 then
            snom = wf.index(.range("B" & i + 1 & ":B" & dl), wf.match(.cells(i, 8).value, .range("H" & i + 1 & ":H" & dl),0))
            .Range("J" & i).Value = snom
        Else
            .Range("J" & i).Value = ""
        End If
    Next i
end with

End Sub

Cdlt,

Merci 3GB pour cette réponse rapide.

Je ne doute pas du fonctionnent de ton code, cependant j’obtiens exactement le meme résultat.

Les memes lignes restent vide.

C'est à n'y rien comprendre

hm

image

Merci de m'accorder ta confiance !

Je n'avais pas fait attention mais il y a des lignes fusionnées apparemment ?! Oulala, c'est très mal !

La meilleure solution consisterait à les défusionner.

Edit : A essayer quand même :

Sub next_prod()

set wf = worksheetfunction

with activesheet
    dl = .Range("H" & .Rows.Count).End(xlUp).Row
    For i = 2 To dl
        if wf.countif(.range("H" & i + 1 & ":H" & dl), .cells(i, 8).value) > 0 then
            lpos = wf.match(.cells(i, 8).value, .range("H" & i + 1 & ":H" & dl),0)
            snom = .cells(i + lpos, 2).mergearea(1).value
            .Range("J" & i).Value = snom
        Else
            .Range("J" & i).Value = ""
        End If
    Next i
end with

End Sub

Bien vu. Effectivement j'ai fait cette erreur.

Je viens de dé-fusionner toutes mes cellules.

Voici le resultat.

C’était mieux avant

image

Oui, mais si tu défusionnes, il faut que la valeur de B se trouve sur les 3 lignes.

En tout cas, j'ai l'impression de voir des résultats en J. Et pour ce qui s'est passé en I, je ne saurais pas dire, je n'ai pas vu le fichier

En colonne "I" = valeurs à trouver en colonne "J".

En théorie, il devrait y avoir une concordance parfaite entre ces deux colonnes.

Remplie a titre indicatif.

image

Apres vérif, pb avec Excel. Redémarrage, le code fonctionne.

Désolé pour tout ça.

Un grand merci à toi pour ton aide.

Cordialement.

HM

Edit :

Nickel alors ! Je suis content que ça marche.

Bonne continuation

Merci a toi.

bonne fin de journée

Rechercher des sujets similaires à "boucle recherche remplissage colonne"