Microsoft 365 Macro recherche numéro de colonne avec numéro de ligne variable

chris6999

XLDnaute Impliqué
Bonjour à tous

J'essaye vainement de bricoler un code pour trouver un numéro de colonne sur lequel on trouve une valeur sur une ligne préalablement identifiée.
Je trouve la ligne mais pour la colonne pas moyen.
Je pense que c'est parce qu'il s'agit d'une date mais je ne suis pas sûre.

Quelqu'un peut-il me dire pourquoi cela ne fonctionne pas?
Je mets un fichier test en PJ
Merci par avance pour votre aide
Bonne soirée

Dim l As Range
Per = Range("C1").Value
Set l = ActiveSheet.Range("C:C").Find(Per, lookat:=xlWhole)
If Not l Is Nothing Then Lig = l.Row

Dim c As Range
Date_tx = Range("G1")
Set c = Range(Cells(Lig, "G"), Cells(Lig, "Q")).Find(Date_tx, lookat:=xlWhole)
If Not c Is Nothing Then col = c.Columns

MsgBox (col)
 

Pièces jointes

  • TEST VBA recherche numero de colonne.xlsm
    705.4 KB · Affichages: 7

Jacky67

XLDnaute Barbatruc
Bonjour à tous

J'essaye vainement de bricoler un code pour trouver un numéro de colonne sur lequel on trouve une valeur sur une ligne préalablement identifiée.
Je trouve la ligne mais pour la colonne pas moyen.
Je pense que c'est parce qu'il s'agit d'une date mais je ne suis pas sûre.

Quelqu'un peut-il me dire pourquoi cela ne fonctionne pas?
Je mets un fichier test en PJ
Merci par avance pour votre aide
Bonne soirée

Dim l As Range
Per = Range("C1").Value
Set l = ActiveSheet.Range("C:C").Find(Per, lookat:=xlWhole)
If Not l Is Nothing Then Lig = l.Row

Dim c As Range
Date_tx = Range("G1")
Set c = Range(Cells(Lig, "G"), Cells(Lig, "Q")).Find(Date_tx, lookat:=xlWhole)
If Not c Is Nothing Then col = c.Columns

MsgBox (col)
Bonjour à tous,
Une autre façon ;)
Plus des MFC
VB:
Sub TEST()
    Dim Derlg&, Col&, Lig&, Plage As Object, Lettre$
    On Error Resume Next
    Derlg = Cells.Find("*", , , , xlByRows, xlPrevious).Row
    Set Plage = Range("A7:q" & Derlg)
    Lig = Application.Match([c1], Plage.Columns(3).Rows, 0)
    Col = Application.Match([g1], Plage.Rows(Lig), 0)
    Lettre = Split(Columns(Col).Address(ColumnAbsolute:=False), ":")(1)    ' facultatif
    MsgBox "La date :" & Application.Index(Plage, Lig, Col) & " se trouve en " & vbLf & "Ligne: " & Lig + 6 & vbLf & "Colonne: " & Col & " (" & Lettre & ")", , "Information"
    If Err Then MsgBox "Il n'y a pas cette date en ligne " & Lig + 6, , "Information"
End Sub
 

Pièces jointes

  • TEST VBA recherche numero de colonne .xlsm
    750.2 KB · Affichages: 5
Dernière édition:

chris6999

XLDnaute Impliqué
Bonjour à tous,
Une autre façon ;)
Plus des MFC
VB:
Sub TEST()
    Dim Derlg&, Col&, Lig&, Plage As Object, Lettre$
    On Error Resume Next
    Derlg = Cells.Find("*", , , , xlByRows, xlPrevious).Row
    Set Plage = Range("A7:q" & Derlg)
    Lig = Application.Match([c1], Plage.Columns(3).Rows, 0)
    Col = Application.Match([g1], Plage.Rows(Lig), 0)
    Lettre = Split(Columns(Col).Address(ColumnAbsolute:=False), ":")(1)    ' facultatif
    MsgBox "La date :" & Application.Index(Plage, Lig, Col) & " se trouve en " & vbLf & "Ligne: " & Lig + 6 & vbLf & "Colonne: " & Col & " (" & Lettre & ")", , "Information"
    If Err Then MsgBox "Il n'y a pas cette date en ligne " & Lig + 6, , "Information"
End Sub
Bonjour et merci Jacky mais mon fichier test simplifie mon projet car mes informations sont sur des feuilles différentes et les valeurs recherchées sont sur des lignes variables donc ta proposition avec une plage unique ne correspond pas à mes besoins.
Je cherchais juste à comprendre pourquoi mon code initial ne fonctionnait pas.
Merci quand même pour ton aide et bonne journée
 

Discussions similaires

Réponses
2
Affichages
147

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16