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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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

Dernière édition:
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
461
Réponses
2
Affichages
153
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
479
Réponses
16
Affichages
1 K
Retour