Microsoft 365 recherche d'un élément dans une plage

Maxou60

XLDnaute Nouveau
J'ai une base de données....Je souhaite faire correspondre la colonne cat au reste du document. En Sachant que chaque catégorie dans la colonne xxx correspond à un élément de la colonne xxx.

En bref je souhaite compléter la colonne cat avec l’élément correspondant dans tout le document

Je vous remercie

Amicalement
 

Pièces jointes

  • Classeur1.xlsx
    101.2 KB · Affichages: 9

cp4

XLDnaute Barbatruc
J'ai une base de données....Je souhaite faire correspondre la colonne cat au reste du document. En Sachant que chaque catégorie dans la colonne xxx correspond à un élément de la colonne xxx.

En bref je souhaite compléter la colonne cat avec l’élément correspondant dans tout le document

Je vous remercie

Amicalement
Bonjour @Maxou60 , @Staple1600 , @alain.pierrephie

@Maxou60 : Bien que nouveau, tu as 22 messages à ton actif. Tu devrais donc connaitre un minimum de bonne pratique de ce forum, à savoir un petit "Bonjour/Bonsoir" en liminaire de tes messages. Je partage l'avis de nos 2 amis.

Je ne sais pas si j'ai bien compris ton problème. Je te propose le code ci-dessous à copier/coller dans un module standard et enregistrer le fichier au format xlsm, puis exécuter le code.
VB:
Option Explicit

Sub completer_Cat()
    Dim dl As Long, d As Object, i As Long, cle, Rng As Range, c As Range
    Set d = CreateObject("scripting.dictionary")
    With Feuil1    'à adapter
        If Feuil1.AutoFilterMode = True Then Feuil1.AutoFilter.ShowAllData
        dl = .Range("A" & Rows.Count).End(xlUp).Row
        Set Rng = .Range("A2:D" & dl)

        For i = 2 To dl
            If .Range("B" & i).Offset(0, 2) <> "" Then
                d(.Range("B" & i)) = .Range("B" & i).Offset(0, 2)
            End If
        Next i

        If d.Count > 0 Then
            For Each cle In d.keys
                Rng.AutoFilter Field:=2, Criteria1:=cle
                For Each c In Rng.SpecialCells(xlCellTypeVisible)
                    If Cells(c.Row, 4) = "" Then Cells(c.Row, 4).Value = d.Item(cle)
                Next c
            Next cle
        End If
        Rng.AutoFilter Field:=2
    End With

    MsgBox "Traitement terminé!", vbInformation + vbOKOnly, "FIN TRAITEMENT"
    Set Rng = Nothing: Set d = Nothing
End Sub

Bon week-end.
 

Discussions similaires

Réponses
15
Affichages
910
Compte Supprimé 979
C

Membres actuellement en ligne

Statistiques des forums

Discussions
312 913
Messages
2 093 535
Membres
105 752
dernier inscrit
fred13340