IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

.find vers un autre classeur ??


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 12
    Par défaut .find vers un autre classeur ??
    Voila mon probleme:
    Comment faire une recherche sous VB (.find) dans un classeur différent de celui dans lequel je crée ma macro ??

    ( c'est la premiere fois que je programme sous VB donc soyez indulgent par rapport au code inutile... )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    Dim C As Range
    Set C = Intersect(Target, Range("G13:AD29"))
    If C Is Nothing Then Exit Sub
    
    Dim ColonneInfo1 As Range
    Dim ColonneInfo2 As Range
    Dim Parametre As Range
    Dim Identifiant As Range
    
    Set ColonneInfo1 = Range("F:F")
    Set ColonneInfo2 = Range("AE:AE")
    ColonneInfo1.Clear: ColonneInfo2.Clear
    Cells(9, 6).Value = "Colonne Info": Cells(9, 31).Value = "Colonne Info"
    
    Colonne = ActiveCell.Column
    Ligne = ActiveCell.Row
    
    Set Parametre = Cells(11, Colonne)
    Set Identifiant = Cells(Ligne, 1)
    If Parametre Is Nothing Or Identifiant Is Nothing Then Exit Sub
    
    Param = Parametre.Value
    
    ' Je veux rechercher la case contenant Param dans la 1ere colonne
    ' d'un autre classeur que celui sous lequel je crée la macro
    
    MsgBox Param
    MsgBox "ok"
    
    End Sub



    J'ai essayé avec un code du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveCell.FormulaR1C1 = _
            "=VLOOKUP(Param,'[Tables.xls]Tables'!R12C1:R905C2,2,FALSE)"
    mais bien sur ca ne fonctionne pas (cf Param)

    Merci d'avance!


    Si vous voulez plus de précisions:

    Sous Excel j'ai créé un tableau, dont la premiere ligne est une liste de paramètres et la premiere colonne une liste d'indentifiant.
    Chaque case du tableau (rempli à chaque utilisation) doit correspondre à la valeur du paramètre pour l'identifiant. Ce remplissage du tableau se fait manuellement, mais il y a beaucoup de valeurs différentes possibles pour les parametres, et qui ne sont pas les memes selon chaque identifiant.

    J'ai donc commencé à créer sous VB une fonction qui affiche dans des "colonnes info" les différents parametres possibles pour la case sélectionnée.

  2. #2
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 12
    Par défaut [VB Excel] recherche d'une valeur
    Bonjour!
    Malgré mes recherches je n'arrive pas à résoudre mon problème...

    Je n'arrive pas à utiliser la fonction find...
    Je voudrais faire une recherche d'une valeur dans une colonne particulière d'une feuille, et que ca me renvoie le Range des cellules qui ont cette valeur.

    Voila mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim Result As Range
    ActiveWorkbook.Sheets("Tables").Select
    Set Result = Cells.Find(What:=Param)
    Result.Select
    MsgBox ActiveCell.Column             (pour vérifier que ca marche)
    J'obtiens l'erreur "La methode Select de la classe Range a échoué"

    Pouvez vous m'éclairer?

  3. #3
    Membre expérimenté Avatar de conconbrr
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Par défaut
    Tu pourrais essayer ça :

    Option Explicit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
        Dim j As Integer
        Dim NbLignes As Integer
     
        NbLignes = Worksheets("Feuil1").Range(Worksheets("Feuil1").Range("a1").Address & ":" & Worksheets("Feuil1").Range("a1").End(xlDown).Address).Rows.Count
     
        For j = 1 To NbLignes
            If Worksheets("Feuil1").Range("a1").Offset(j, 0).Value = "param" Then
                MsgBox Worksheets("Feuil1").Range("a1").Offset(j, 0).Address
            End If
        Next j
     
    End Sub
    La recherche se fait donc ds la colonne A en partant de A1 (à adapter selon tes besoins). Dès que le code trouve "param" dans une cellule, il en renvoie l'adresse (tu peux la stocker ds un tableau par exemple ).

    Le code marche bien s'il n'y a pas de case vide dans la colonne A. ds le cas contraire la boucle for sera trop courte (il faudra juste mettre une valeur à la main pour le nombre de lignes)

  4. #4
    Membre expérimenté Avatar de conconbrr
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Par défaut
    Juste pour savoir ouskel'n'or, si tu exécutes le code que tu donnes ça va te renvoyer seulement la première occurence trouvée, je me trompe?

  5. #5
    Membre expérimenté Avatar de conconbrr
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Par défaut
    oki pr la boucle.
    Euh ben j'ai relu son msg et il marque :
    Je voudrais faire une recherche d'une valeur dans une colonne particulière d'une feuille
    même si je te l'accorde son code semble dire le contraire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells.Find(What:=Param)

  6. #6
    Membre expérimenté Avatar de conconbrr
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Par défaut
    Je suis bien d'accord avec toi

  7. #7
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 12
    Par défaut
    Pour le multi post, toutes mes excuses ce n'est pas fait dans un mauvais esprit.. Je ne recommencerai plus.

    A propos de la recherche : Je souhaite effectivement la faire dans une colonne particulière. Je n'avais pas mentionnél a possibilité d'occurences multiples car je ne pensais pas en avoir besoin (c'est moi qui rentre les paramètres dans la colonne) mais ca me sera peut etre utile pour arriver à mes fins.

    Je m'en vais tester vos réponses et je vous dis si ca marche ou pas!

    Dans tout les cas MERCI

  8. #8
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 12
    Par défaut
    ps: Mais les occurences multiples je peut sans doute me débrouiller sans en travaillant le tableau et ce qu'il me reste à faire apres ca.

  9. #9
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 12
    Par défaut
    Pour l'histoire de récupération de la colonne: effectivement ca peut paraitre idiot mais en fait j'avais écrit un code qui ne me renvoyait pas d'erreur mais qui me donnait un le numéro de la colonne de "Parametre" (comme si il n'allait pas sur la bonne feuille). Voila la raison. Si mon code m'affichait 1 pour la colonne ( je demandais la recherche sur A tout de meme ) ma fonction aurait peut-etre pu etre correcte.

    J'ai essayé le code de ouskel'n'or:
    Voici le code que j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    Dim C As Range
    Set C = Intersect(Target, Range("G13:AD29"))
    If C Is Nothing Then Exit Sub
    
    Dim ColonneInfo1 As Range
    Dim ColonneInfo2 As Range
    Dim Parametre As Range
    Dim Identifiant As Range
    
    Set ColonneInfo1 = Range("F:F")
    Set ColonneInfo2 = Range("AK:AK")
    ColonneInfo1.Clear: ColonneInfo2.Clear
    Cells(9, 6).Value = "Colonne Info": Cells(9, 31).Value = "Colonne Info"
    
    Colonne = ActiveCell.Column
    Ligne = ActiveCell.Row
    
    Set Parametre = Cells(11, Colonne)
    Set Identifiant = Cells(Ligne, 1)
    If Parametre Is Nothing Or Identifiant Is Nothing Then Exit Sub
    
    Param = Parametre.Value
    MsgBox Param
    
    Dim Colon As Range                  (rajouté suite à l'erreur dite apres)
    Dim Result As Range
    With ActiveWorkbook.Sheets("Tables")
    Set Result = Range("A:A").Find(What:=Param)
    Set Colon = Range(Result.Address).Column
    End With
    MsgBox Colon
    
    End Sub
    Tables est le nom d'une feuille de mon classeur actif
    A est la colonne dans laquelle je veux faire la recherche


    J'obtiens une erreu au niveau de Set Colon = Range(Result.address).Column pour .Column :incompabilité de type

    ( Sans le Set Colon = Range... j'obtenais le message d'erreur suivant pour la ligne Colon = Range(Result.Address...: Variable objet ou variable de bloc With non définie. C'est pourquoi j'ai rajouté Dim Colon As Range, mais ca me renvoiyait quand meme la meme erreur. )

    J'essaye le code de conconbrr maintenant ^^

  10. #10
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 12
    Par défaut
    Avec NoLigne ca fait exactement pareil qu'avec Colon ( j'ai essayé les memes modifs). J'obtiens les memes erreurs.

  11. #11
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 12
    Par défaut
    Je viens d'essayer avec le code de conconbrr et ca a l'air de marcher !!! Youpi!! Je vais maintenant essayer de l'intégrer correctement pour pouvoir continuer ma fonction.

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Je confirme, cette syntaxe fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub ChercherParam2()    'Paintpicture
    Dim Result As Range
    Dim Cellule as variant
    Param = "toto"
    With ActiveWorkbook.Sheets("feuil1")
        Set Result = Range("I:I").Find(What:=Param)
        Cellule = Range(Result.Address).Row
    End With
    MsgBox Cellule
    End Sub
    Tu as déclaré Cellule as range, déclare-le as variant
    Je n'avais pas mis option explicit et n'avais donc pas d'erreur

  13. #13
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    tu peu auss ecrire : ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     cellule =  Range(Range(Range(Result.Address).Address).Address).Row
    ou

  14. #14
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 12
    Par défaut
    Euh... Chez moi ca marche pas... !?
    J'ai une erreur au niveau de Cellule = Range(Result.Adress).Row
    (erreur aussi avec Result.Row ! )
    Variable objet ou de bloc With non définie...
    (Avec Set devant ca me dit objet requis en surlignant le .Row )

  15. #15
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    le set c'est pour les objets.. alors soit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Cellule as Range
    ...
    ..
    set Cellule = Result
    ..
    msgBox Cellule.row
    et la tu n'as pas besoin de cellule et tu peu directement utiliser Result..



    ou l'autre cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Cellule as Variant ' ou Integer
    ...
    ..
    Cellule = Result.row
    ..
    msgBox Cellule
    voila ... tu mélange pas les deux...

  16. #16
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 12
    Par défaut
    Je note pour les set (j'ai pas l'aide Windows qui bug), mais je l'ai fait sans le set et ca marche pas!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim Result As Range
    Dim Cellule As Variant
    With ActiveWorkbook.Sheets("Tables")
        Set Result = Range("A:A").Find(What:=Param)
        Cellule = Result.Row  ' erreur:variable objet ou de bloc with non définie
    End With
    MsgBox Cellule
    Pour l'instant j'essaye la suite de ma fonction avec la solution de conconbrr, qui je vous l'accorde, est un moins concise que celle que vous proposez !

  17. #17
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    en fait j'ai pas tout lu... mais rien qu'au dernier message à quoi sert ton with...?

    doit manquer un .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         Set Result = .Range("A:A").Find(What:=Param)
    ensuite c'est quoi l'erreur .. un message... ?
    utilise un type integer .. pour ta variable Cellule...tu n'as pas besoin de variant..

  18. #18
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 12
    Par défaut
    Effectivement avec un point ca marche !

    Merci ! J'adopte ce code tout de suite

    Quant au With il vient du code de ouskel'n'or. Moi je suis débutant (1ere programmation sous VB) donc je connaissai pas le With avant ca, et he suis pas encore sur d'avoir bien tout pigé dessus d'ailleurs mais c'est pas mon souci pour l'instant.

  19. #19
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    en fait le with tu n'en as pas vraiment besoin la ... tu aurai pu écrire
    directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set Result=ActiveWorkbook.Sheets("Tables").Range("A:A").Find(What:=Param)
    le with (avec) .. permet d'éviter de répeter le début du code.. ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    With MonPrefixe
       .MaFonction
       .MaPropriete
       .Mafonction2 .Mapropriete2
    end with
    equivaut à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    MonPrefixe.MaFonction
    MonPrefixe.MaPropriete
    MonPrefixe.Mafonction2 MonPrefixe.Mapropriete2

  20. #20
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 12
    Par défaut
    Ah d'accord c'est sympa ! C'est pour ca qu'on avait que .Find juste avant ! Je supprime ca des que j'ai le temps.
    Bin franchement merci beaucoup. Pour l'instant je me débrouille tant bien que mal pour la suite de ma fonction
    J'essaie de réflechir un peu plutôt que de foncer tête baissée sur le forum. Sinon y'aurait qu'à vous envoyer le boulot et on en parle plus lol !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Supprimer un lien vers un autre classeur
    Par BiM dans le forum Excel
    Réponses: 3
    Dernier message: 14/03/2008, 21h47
  2. Copie de colonnes vers un autre classeur
    Par Jeyjey1 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/02/2008, 11h14
  3. Exporter des feuilles Excel vers un autre classeur
    Par Smogling dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 28/09/2007, 12h25
  4. [VBA]comment copier une ligne vers un autre classeur
    Par iboulaye1980 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/05/2007, 18h22
  5. [VBA-Excel]Copier des cellules vers un autre classeur
    Par Tartenpion dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/10/2006, 18h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo