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 :

Selectionner une plage dans un autre fichier (fonction) [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2015
    Messages : 4
    Par défaut Selectionner une plage dans un autre fichier (fonction)
    Bonjour a tous! Je suis nouveau sur ce forum et pose donc ma première question.

    J'ai crée une fonction qui est essentiellement une recherchev avec plus de paramètres. C'est pour mon usage personnel, et je fais ça pour m'entrainer.

    Mon code fonctionne quand j'utilise la fonction dans le même fichier et même onglet que celui ou je vais chercher l'info.
    Lorque j'utilise la fonction dans un fichier différent, ça ne fonctionne pas.

    Les deux fichiers sont ouverts, ainsi que celui de la fonction (.xla)

    Je n'arrive donc pas à selectionner une plage dans un autre fichier...

    Merci d'avance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Function RECHERCHEDECALEE(ancre As String, fichier As String, ligne As Integer, colonne As Integer) As Double
     
    Dim position As Range
     
    Workbooks(fichier & ".xls").Worksheets(1).Activate
     
    Set position = ActiveWorkbook.ActiveSheet.Cells.Find(ancre)
     
    position.Select
     
    RECHERCHEDECALEE = position.Offset(ligne, colonne).value
     
    End Function

  2. #2
    Membre Expert Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 904
    Par défaut
    Bonjour,

    Et avec ceci :
    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
    Public Function RECHERCHEDECALEE(ancre As String, fichier As String, ligne As Integer, colonne As Integer) As Double
     
    Dim position As Range
    dim xlWkBook   as workbook
     
    set xlWkBook = Workbooks(fichier & ".xls")
     
    set position = nothing
    on error resume next
    Set position = xlWkBook.Worksheets(1).Cells.Find(ancre)
    on error goto 0
     
    if not position is nothing then
     
         RECHERCHEDECALEE = position.Offset(ligne, colonne).valuee
    else
         RECHERCHEDECALEE = -1
    end if
     
    End Function
    Tu n'as, cependant, pas pris en compte le fait que ton find ne renvoi aucun résultat (d'où le on error resume next).

    Cordialement

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Public Function RECHERCHEDECALEE(ancre As String, fichier as workbook
    Set position = fichier.Worksheets(1).Cells.Find(ancre)

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2015
    Messages : 4
    Par défaut
    la première solution marche! merci beaucoup! je vais étudier ça

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Une fonction ne peut que retourner une valeur ou un tableau de valeurs et ne peut en aucun cas effectuer des manipulations d'objets donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Workbooks(fichier & ".xls").Worksheets(1).Activate
    '...
    position.Select
    tu peux oublier, ça ne fonctionnera jamais !
    Il te faut faire de cette façon, ne pas utiliser d'extension (.xls ou autres) car si tu veux utiliser la fonction sur un classeur non encore enregistré, tu auras une erreur :
    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
     
    Public Function RECHERCHEDECALEE(Classeur As String, _
                                     IDFeuille As Integer, _
                                     Ancre As String, _
                                     Ligne As Integer, _
                                     Colonne As Integer) As Variant
     
        Dim Fe As Worksheet
        Dim position As Range
     
        Application.Volatile
     
        Set Fe = Workbooks(Classeur).Worksheets(IDFeuille)
     
        Set position = Fe.Cells.Find(Ancre)
     
        If Not position Is Nothing Then
            RECHERCHEDECALEE = position.Offset(Ligne, Colonne).Value
        Else
            RECHERCHEDECALEE = "ERREUR!"
        End If
     
    End Function
    Il est peut être préférable de typer la fonction Variant car tu ne peux être sûr de ce qu'elle va retourner. Tu l'utilise de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =RECHERCHEDECALEE("Classeur2";3;"Test";4;4)
    cherche la valeur "Test" dans les cellules du classeur non enregistré "Classeur2" dans la feuille n° 3 et si trouvée, retourne la valeur situé dans la cellule 4 lignes plus bas et 4 colonnes à droite. Attention au valeur qui peuvent sortir de la feuille !

  6. #6
    Invité
    Invité(e)
    Par défaut
    Personnellement j'opterai pour passer le workbook directement a ma fonction comme dit plus haut!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] Rechercher contenue cellule dans une plage d'un autre fichier
    Par jonathan29 dans le forum Excel
    Réponses: 2
    Dernier message: 27/04/2015, 14h40
  2. [VBA Excel] Copie d'une feuille dans un autre fichier
    Par nattyman dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/08/2006, 10h35
  3. Utilisation d'une classe dans un autre fichier
    Par melotron dans le forum Général Python
    Réponses: 1
    Dernier message: 09/07/2006, 13h11
  4. [VBA] Recherche d'une valeur dans un autre fichiers puis
    Par Nicos77 dans le forum Général VBA
    Réponses: 11
    Dernier message: 24/03/2006, 11h24
  5. Shell - Récupérer une variable dans un autre fichier
    Par claralavraie dans le forum Linux
    Réponses: 9
    Dernier message: 11/01/2006, 16h25

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