Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Récupérer les valeurs dans cellules

Electron24

XLDnaute Occasionnel
Bonsoir le Forum,

Je souhaite récupérer les valeurs des cellules dans une colonne pour les recopier dans un formulaire.
Le souci est que j'ai la formule pour récupérer les valeurs dans les lignes (Row)
VB:
If Target.Column = 2 And Target.Row > 10 And Target.Row < 1000 Then
'      If Target = "" Then
'      Exit Sub
'  Else
'    MsgBox ActiveCell.Offset(0, 6), , "Coureurs."
'End If
'    End If
Mais impossible de trouver la formule pour les colonnes.
Donc en résumé j'ai des valeurs dans les colonnes B (B3, B4, B5, B6, B7, B8, B9) - G(G3, G4, G5, G6, G7, G8, G9) - L(L3, L4, L5,L6, L7, L8, L9) etc jusqu'à FA
que je souhaite en sélectionnant la cellule ou se trouve l'année ouvrir un formulaire avec ces valeurs et l'image des étapes du tour de france correspondant à l'année sélectionnée. (pour l'image c'est fait)


Comment puis je procéder. Merci d'avance pour votr aide.
 
Solution
Bonjour tout le monde,
En PJ un essai avec :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("1:1")) Is Nothing Then
        If Target = "" Then Exit Sub                    ' si cellule vide on sort
        C = Target.Column - 1                           ' sinon récupération du N° colonne ( -1 car données en C-1 )
        With Frm_Image
            .Txt_An = Target                            ' collage année
            .Txt_Début = Cells(3, C)                    ' collage des données
            .Txt_Fin = Cells(4, C)
            .Txt_Etapes = Cells(5, C)
            .Txt_Coureurs = Cells(6, C)
            .Txt_Reste = Cells(7, C)...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Electron,
Row pour Ligne
Column pour colonne

VB:
If Target.Column = 2 And Target.Row > 10 And Target.Row < 1000 Then
Ici vous testez si on est en colonne B ( Target.Column = 2) et en lignes comprises entre 11 et 999.
Donc si on est dans la plage B11:B999.

pour trouver la bonne colonne vous pouvez passer par :
Code:
IndexW = Application.Match(Année, Range("1:1"), 0)
Il vous renverra le N° de colonne où il a trouver Année.
Vous pourrez ensuite accéder aux cellules par un cells(ligne, IndexW) suivant vos besoins.
 

Electron24

XLDnaute Occasionnel
Bonjour sylvanu

Tout d'abord un grand merci pour votre collaboration.
J'ai bien compris que le code que j'ai donné est celui pour trouver des données dans une ligne. Code que j'ai tiré d'un autre classeur et que je voulais transformer pour trouver les valeurs dans une colonne mais que je n'y arrive pas.
Je ne trouve pas la Fonction IndexW cela m'indique fonction non défini.
Si vous pourriez me donner le code réel correspondant à l'image de ma feuille affiché dans mon premier post cela me serait plus compréhensible.
Le but étant de pouvoir retrouver dans le formulaire les données en A3:A9 correspondantes à l'année recherchée. (Données en B3:B9, G3:G9, L3:L9, Q3:Q9, .......)
Merci
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
VB:
IndexW = Application.Match(Année, Range("1:1"), 0)
IndexW est une variable dont la valeur sera le N° de colonne.
Qu'avez vous fait pour que le VBA vous dise " fonction non définie" ?

Je ne code pas à partir d'une image, trop empirique. Donnez nous un fichier simplifié, ça évitera de multiples aller-retours. ( ainsi que le besoin exact )
 

soan

XLDnaute Barbatruc
Inactif
Bonjour à tous,

Je soupçonne Electron24 d'avoir essayé :

Match = Application.IndexW(Année, Range("1:1"), 0)

(c'est peut-être le copier/coller du presse-papiers
qui a déraillé ? )


@Electron24 : il est bien joli, ton cheval blanc !
avec des ailes, ça serait Pégase !


soan
 

Electron24

XLDnaute Occasionnel
Bonjour soan
j'ai utilisé la formule:
IndexW = Application.Match(Année, Range("1:1"), 0) en remplacant Année par la cellule comprenant l'année.

Voici feuille du classeur

PS: C'est un pulzze que j'ai fait.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour tout le monde,
En PJ un essai avec :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("1:1")) Is Nothing Then
        If Target = "" Then Exit Sub                    ' si cellule vide on sort
        C = Target.Column - 1                           ' sinon récupération du N° colonne ( -1 car données en C-1 )
        With Frm_Image
            .Txt_An = Target                            ' collage année
            .Txt_Début = Cells(3, C)                    ' collage des données
            .Txt_Fin = Cells(4, C)
            .Txt_Etapes = Cells(5, C)
            .Txt_Coureurs = Cells(6, C)
            .Txt_Reste = Cells(7, C)
            .Txt_Distance = Cells(8, C)
            .Txt_Moyenne = Cells(9, C)
        End With
        DerLig = Cells(Rows.Count, C).End(xlUp).Row     ' calcul dernière ligne
        Chaine = ""
        For i = 30 To DerLig
            If Left(Cells(i, C), 5) = "Etape" Then      ' on cherche les cellules qui commencent par Etape
                Chaine = Chaine & Cells(i, C) & vbCrLf  ' on l'ajoute à la chaine
            End If
        Next i
        Frm_Image.TextBox1 = Chaine                     ' on transfert la chaine dans la textbox
        Frm_Image.Show                                  ' on visualise l'userform
    End If
End Sub
j'ai invalidé votre code mais l'ai laissé en place. Je ne sais pas ce que vous voulez en faire.
 

Pièces jointes

  • Classeur1 (26).xlsm
    220.9 KB · Affichages: 4

Discussions similaires

Réponses
4
Affichages
451
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…