Recherche d'une valeur et en retour numero de colonne

cifren

XLDnaute Nouveau
Bonjour,

Je recherche une fonction tel que Match afin de trouver une valeur dans un tableau excel d'un fichier et que ce dernier me retourne le numéro de colonne.

Le problème avec la fonction Match, je ne peux faire la recherche que sur une seul ligne A1:A15 par exemple (je crois... :D ) or ma recherche doit se faire sur un range de A1:E118 et me donner le numéro relatif de la colonne.

Sinon j'ai penser a faire une boucle afin de regarder toute les lignes une par une et effectuer Match sur chaque mais la je bloque sur le passage de ligne a ligne...

C'est pas tres dur mais c'est long quand on connait pas toutes les fonctions sur le bout des doigts :p

Merci de votre aide ;)

Mon code ressemble a ca :
Code:
Chemin = ThisWorkbook.Path 'Définit le chemin des fichiers. Ici meme dossier que ce classseur (Masque.xls)
'Set MesChamps = Feuil1.[A1].CurrentRegion 'Définit MesChamps comme étant la zone contenant les noms de champs. Ici A1:AZ1


Set MonFichier = Workbooks.Open(Chemin & "\optimisation npeo.xls") 'fichier de recherche de l'expression
Set MesChamps = MonFichier.Sheets(1).[A1].CurrentRegion 'Définit MesChamps comme étant la zone contenant les noms de champs. Ici A1:AZ1

Set MonClass = Workbooks.Open(Chemin & "\" & Fichier.Name) 'On ouvre le classeur qu'on associe à "MonClass"
        Set MaZone = MonClass.Sheets(1).[A1].CurrentRegion 'Définit la zone de données du classeur qu'on vient d'ouvrir comme étant la totalité des données située dans le premier onglet
        LigDest = Feuil1.[A1].CurrentRegion.Rows.Count + 1 'Définit la derniere ligne remplie de la destination (Dans Masque.xls)
        For Each X In MaZone.Resize(1) 'On boucle sur les noms de champs du classeur qu'on vient d'ouvrir (Resize(1) => premiere ligne seulement de la MaZone)
            
            ColDest = Application.Match(X.Value, MesChamps.Resize(1)) 'Definit la colonne de destination (Recherche de X dans les champs de resultat) Recherche de X dans les champs de Masque.xls.
                
            If Not IsError(ColDest) Then
                X.Offset(1, 0).Resize(MaZone.Rows.Count - 1, 1).Copy Feuil1.Cells(LigDest, ColDest) 'En cas d'erreur de syntaxe de nom de champ, pas de collage. Si ColDest existe c'est la colonne dans laquelle coller les données => on copie/colle
                
            End If
        Next
    Workbooks(Fichier.Name).Close 'On ferme le classeur
Workbooks(MonFichier.Name).Close

Pour l'instant mon code n'effectue le traitement que sur la première ligne de "Monfichier"
 
Dernière édition:

CBernardT

XLDnaute Barbatruc
Re : Recherche d'une valeur et en retour numero de colonne

Bonjour cifren et le forum,

une solution :

Recherche index colonne de la valeur "LIGNE", valeur de cellule entière
Dim Col as integer
Col =Sheets("Feuil1").UsedRange.Find("Ligne", LookAt:=xlWhole).Column

Recherche index colonne de la valeur "LIGNE", valeur de cellule partielle
Dim Col as integer
Col =Sheets("Feuil1").UsedRange.Find("Ligne", LookAt:=xlPart).Column
 

cifren

XLDnaute Nouveau
Re : Recherche d'une valeur et en retour numero de colonne

Merci mon nouveau code est :
Code:
Chemin = ThisWorkbook.Path 'Définit le chemin des fichiers. Ici meme dossier que ce classseur (Masque.xls)
'Set MesChamps = Feuil1.[A1].CurrentRegion 'Définit MesChamps comme étant la zone contenant les noms de champs. Ici A1:AZ1


Set MonFichier = Workbooks.Open(Chemin & "\optimisation npeo.xls") 'fichier de recherche de l'expression
Set MesChamps = MonFichier.Sheets(1).[A1].CurrentRegion 'Définit MesChamps comme étant la zone contenant les noms de champs. Ici A1:AZ1

Set MonClass = Workbooks.Open(Chemin & "\" & Fichier.Name) 'On ouvre le classeur qu'on associe à "MonClass"
        Set MaZone = MonClass.Sheets(1).[A1].CurrentRegion 'Définit la zone de données du classeur qu'on vient d'ouvrir comme étant la totalité des données située dans le premier onglet
        LigDest = Feuil1.[A1].CurrentRegion.Rows.Count + 1 'Définit la derniere ligne remplie de la destination (Dans Masque.xls)
        For Each X In MaZone.Resize(1) 'On boucle sur les noms de champs du classeur qu'on vient d'ouvrir (Resize(1) => premiere ligne seulement de la MaZone)
            
            Set c = MonFichier.Sheets(1).UsedRange.Find(X.Value, LookAt:=xlWhole)
            If Not c Is Nothing And X.Value <> "" Then
                MsgBox c.Column & " " & X.Value
                ColDest = c.Column
            End If
            
            'ColDest = MonFichier.Sheets(1).UsedRange.Find("ee", LookAt:=xlWhole).Column
            'MsgBox ColDest & " " & X.Value

            
            If ColDest <> "" Then
                X.Offset(1, 0).Resize(MaZone.Rows.Count - 1, 1).Copy Feuil1.Cells(LigDest, ColDest) 'En cas d'erreur de syntaxe de nom de champ, pas de collage. Si ColDest existe c'est la colonne dans laquelle coller les données => on copie/colle
                
            End If
                
            End If
        Next
    Workbooks(Fichier.Name).Close 'On ferme le classeur
Workbooks(MonFichier.Name).Close

Merci beaucoup, c'est parfait !!
 

Discussions similaires

Statistiques des forums

Discussions
312 488
Messages
2 088 862
Membres
103 979
dernier inscrit
imed