rechercher l'adresse d'une cellule, puis importé la ligne dans un userform

scaleo

XLDnaute Nouveau
Bonjour à tous,

Je souhaiterai rechercher l'adresse d'une cellule, puis à partir de ses coordonnées, importer les données que comporte la ligne dans un userform.

J'ai tenté ça pour la recherche :

With Sheets("note").Range("A:A")
.Cells.Find(What:=numero_box.Value, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
End With

Mais avec ce code , la recherche ne s'effectue que si j'ai une cellule sélectionnée dans la colonne de recherche, et que cette valeur existe bien entendu .
Ensuite la cellule correspondante à la valeur recherchée est sélectionnée dans la feuille, et je n'arrive pas a obtenir ses coordonnées.


J'ai pensé faire une truc du genre :

dim x = ligne as integer , y = colonne as integer

Pour pouvoir réutilisé les valeurs x et y , mais je ne sais pas comment y arriver.


Ma seconde question est comment importer le contenu ( texte ou nombre ) d'une cellule dans une textbox de l'userform ?

avec un code de ce type peut-être: nom_box.Value = Cells(x,y) ?

Pour l'exemple , j'ai pris un carnet de notes :D

le but de ce formulaire est de modifier les données d'une ligne en particulier dans un grand tableau, sans risque de ce tromper cellule .
 

Pièces jointes

  • note eleve.xlsm
    24.4 KB · Affichages: 73
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : rechercher l'adresse d'une cellule, puis importé la ligne dans un userform

Bonjour scaleo,

Essaye un truc comme ça

Code:
Dim Cellule as Range, NumLigne as Long
NumLigne = 0
With Sheets("note").Range("A:A")
   Set Cellule = .Cells.Find(What:=numero_box.Value, After:=.range("A1"), LookIn:=xlFormulas, _
       LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
   End With
If Not Cellule is Nothing then NumLigne = Cellule.row

Edit : pour la suite, oui,

Code:
nom_box.Value = Cells(x,y)

devrait fonctionner
 
Dernière édition:

scaleo

XLDnaute Nouveau
Re : rechercher l'adresse d'une cellule, puis importé la ligne dans un userform

merci pour ta réponse :)

entre-temps, j'ai réussi à choper les coordonnées mais c'est toujours avec la cellule activée :/

Code:
 Dim x As Integer, y As Integer
   
     x = ActiveCell.Row
     y = ActiveCell.Column
j'ai aussi réussi à importé les données :

Code:
 nom_box.Value = Cells(x, 2)

j'ai 3 questions dans ton code :

-
Code:
 NumLigne as Long
, long ça veut dire quoi ? et Numligne est une variable en gros,c'est pas une fonction de VBA ?

-tu commences par "Set Cellule = " et moi pas, ça change quoi ?

- à quoi sert cette ligne ?
Code:
If Not Cellule is Nothing then NumLigne = Cellule.row

en attendant tes réponses , je vais tester ton code ;)



edit : bon bah ça marche dans l'exemple, mais dans mon autre tableau non...

j'ai a peine modifier ton code :

Code:
Dim Cellule As Range, Numligne As Long
Numligne = 6
With Sheets("tableau").Range("C:C")
   Set Cellule = .Cells.Find(What:=numero_box.Value, After:=.Range("C6"), LookIn:=xlFormulas, _
       LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
   End With
  If Not Cellule Is Nothing Then Numligne = Cellule.Row

et ça me marque " erreur 13, incompatibilité de type "...

j'ai trouvé !

dans
Code:
With Sheets("tableau").Range("C:C")
c'est Range("C:C") qui fais planter, je l'ai viré du coup ça marche .

c’était important ?
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : rechercher l'adresse d'une cellule, puis importé la ligne dans un userform

Re,

long ça veut dire quoi ? et Numligne est une variable en gros,c'est pas une fonction de VBA ?

Numligne est bien une variable, pas une fonction
Long est un type de variable qui signifie Entier long, des entiers de - 2 milliards à + 2 milliards environ

-tu commences par "Set Cellule = " et moi pas, ça change quoi ?

Cellule est aussi une variable, mais une variable objet de type Range (plage de cellules)
pour affecter une variable Objet, il faut utiliser l'instruction Set
ça signifie que je met la cellule trouvée par Find dans la variable Cellule
ça change que toi tu active la cellule trouvée (avec .Activate) mais s'il ne trouve rien ton code plantera sur la ligne, moi pas, je met la cellule trouvée dans la variable Cellule et après je teste si elle contient quelque chose avec le Nothing

à quoi sert cette ligne ?

Je vérifie si Cellule est "Nothing", c'est à dire rien
Cellule sera Nothing si le code recherché n'a pas été trouvé par Find, dans ce cas là pas de numéro de ligne à retourner, Numligne reste égal à 0

j'ai a peine modifier ton code

Oui mais tu as ajouté un .Activate à la fin de la ligne Set Cellule = ... et tu ne dois pas le mettre
 

scaleo

XLDnaute Nouveau
Re : rechercher l'adresse d'une cellule, puis importé la ligne dans un userform

merci pour ces infos ;)

en effet il c'est glisser là par hasard mais même en le supprimant j'ai la même erreur. par contre si je supprime .Range ("C:C") dans
With Sheets("tableau").Range("C:C"), là ca fonctionne .


cas où ça plante :
Code:
Dim Cellule As Range, NumLigne As Long
With Sheets("tableau").Range("C:C")
   Set Cellule = .Cells.Find(What:=numero_box.Value, After:=.Range("C6"), LookIn:=xlFormulas, _
       LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
   End With
If Not Cellule Is Nothing Then NumLigne = Cellule.Row

cas où ça marche :

Code:
Dim Cellule As Range, NumLigne As Long
With Sheets("tableau")
   Set Cellule = .Cells.Find(What:=numero_box.Value, After:=.Range("C6"), LookIn:=xlFormulas, _
       LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
   End With
If Not Cellule Is Nothing Then NumLigne = Cellule.Row

bizarre... alors que dans l'exemple ça fonctionne bien ...


et apparemment ,
Code:
Dim Cellule As Range, NumLigne As Long
NumLigne = 6
With Sheets("tableau")

ou
Code:
Dim Cellule As Range, NumLigne As Long

With Sheets("tableau")

ne change rien.
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : rechercher l'adresse d'une cellule, puis importé la ligne dans un userform

Re,

Essaye comme ça

Code:
Dim Cellule As Range, NumLigne As Long
With Sheets("tableau").Range("C:C")
   Set Cellule = .Cells.Find(What:=numero_box.Value, After:=.Range("A1"), LookIn:=xlFormulas, _
       LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
   End With
If Not Cellule Is Nothing Then NumLigne = Cellule.Row

le ".Range("A1")" signifie la cellule 1ère ligne et première colonne de la plage spécifiée dans le With
Je lui dis donc de commencer à chercher à la 1ère ligne et 1ère colonne de la colonne C

en mettant ".range("C6")", tu lui dit de commencer à chercher à la 6ème ligne et la 3ème colonne de la colonne C
mais la colonne C n'a qu'une colonne alors il ne comprend pas
 
Dernière édition:

scaleo

XLDnaute Nouveau
Re : rechercher l'adresse d'une cellule, puis importé la ligne dans un userform

ça marche ! en faite, c'est la fonction " After:=Range ( "C6") " au lieu " After:=Range ( "C6") " de qui faisait planté...

en mettant ".range("C6")", tu lui dit de commencer à chercher à la 6ème ligne et la 3ème colonne de la colonne C
mais la colonne C n'a qu'une colonne alors il ne comprend pas

AAAaaaah ok, ça va cherché loin quand même... en gros il fait un décalage d’origine ... j'en vois pas l'utilité mais bon, ça marche c'est le principal :)


merci beaucoup TOTOTITI ;)
 
Dernière édition:

scaleo

XLDnaute Nouveau
Re : rechercher l'adresse d'une cellule, puis importé la ligne dans un userform

J'ai une autre question :

Comment créer 2 "parcours" possible pour la recherche ?

Soit elle trouve l'élève et elle importe les données dans l'userform
Soit elle trouve rien, elle me le dit ( MsgBox) s’arrête là.

Voici mon code :

Code:
Dim Cellule As Range, X As Long
X = 6
With Sheets("tableau").Range("C:C")
   Set Cellule = .Cells.Find(What:=numero_box.Value, After:=.Range("A1"), LookIn:=xlFormulas, _
       LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
   End With
   
If Not Cellule Is Nothing Then X = Cellule.Row

If Cellule Is Nothing Then MsgBox "aucun élève trouvé"

Avec ce code, la recherche qui ne trouve pas d'élève va me le signaler, mais le programme va continuer et va importer les données de la 1er ligne.
Dans le cas où elle trouve un élève, aucun soucie, tout ce passe bien.
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : rechercher l'adresse d'une cellule, puis importé la ligne dans un userform

Re,

Code:
Dim Cellule As Range, X As Long
X = 0
With Sheets("tableau").Range("C:C")
   Set Cellule = .Cells.Find(What:=numero_box.Value, After:=.Range("A1"), LookIn:=xlFormulas, _
       LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
   End With
   
If Not Cellule Is Nothing Then 
X = Cellule.Row
else
MsgBox "aucun élève trouvé"
Exit Sub
End if
 

scaleo

XLDnaute Nouveau
Re : rechercher l'adresse d'une cellule, puis importé la ligne dans un userform

punaise, c'est aussi simple que ça ?! effectivement , ça marche ....
moi qui cherchais avec des truc pas possible....

encore merci tototiti ;)

autre question ( tu dois en avoir marre et je te comprends )
mon tableau ce présente comme ça :
numéro de l'élèvenom
1Jean
2
3


donc quand je vais chercher le numéro 2, le programme va trouver la ligne, et m'importer les valeurs de la ligne.
est ce possible d'inséré une condition en plus ?

en gros:
soit le numéro d'élève n'existe pas et on stop le programme
soit le numéro d'élève existe, et si et seulement si il a un "nom" on importe la ligne.
 
Dernière édition:

scaleo

XLDnaute Nouveau
Re : rechercher l'adresse d'une cellule, puis importé la ligne dans un userform

Bonjour à tous,

j'ai trouvé !

Code:
Dim Cellule As Range, X As Long
X = 2
With Sheets("tableau").Range("C:C")
   Set Cellule = .Cells.Find(What:=numero_box.Value, After:=.Range("A1"), LookIn:=xlFormulas, _
       LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
   End With
   
   
    If Cellule Is Nothing Then
    MsgBox "aucun élève trouvé"
    Exit Sub
    
    Else
    X = Cellule.Row
    If Cells(X, 2) = "" Then
    MsgBox "aucun élève trouvé"
    Exit Sub
    Else
   
    End If
    End If

voila si ça peut aider ;)
 

Discussions similaires