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 :

Récupération de données en fonction d'une référence [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 25
    Par défaut Récupération de données en fonction d'une référence
    Bonjour,

    J'ai créé un fichier excel permettant de récupérer un besoin annuel correspondant à une référence.
    Lorsque une référence qui est présente sur ma page récapitulative se trouve également sur une autre page, il récupère les données sur cette autre page une case à droite de la référence et les place sur ma feuille récapitulative.

    Voici le programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Ch()
    Dim Ws As Worksheet
    Dim C As Range
    Dim R As String
    For x = 3 To Range("A" & Rows.Count).End(xlUp).Row
        R = Cells(x, 2)
        If Left(Cells(x, 1), 1) = "0" Then R = Right(Cells(x, 1), Len(Cells(x, 1) - 1))
        For Each Ws In Worksheets
            If Ws.Name <> ActiveSheet.Name Then Set C = Ws.Cells.Find(R)
            If Not C Is Nothing Then Cells(x, 2) = Ws.Cells(C.Row, C.Column + 1)
        Next Ws
    Next
    End Sub
    Référence Besoin annuel
    89792114
    14608
    853048
    89584714

    Mon problème est le suivant :


    J'arrive à faire la récupération de données si le besoin annuel est présent 1 case à droite de ma référence, mais je n'arrive pas à adapter mon programme pour les récupérer si le besoin annuel est à 12 cases de la référence (c'est le but que je cherche atteindre).

    Pourriez-vous m'aider sur la modification de mon programme, pour qu'il cherche les besoins annuels 12 cases à droite de ma référence au lieu d'une seule case ?

    Merci !

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Sachant que C est un objet Range, il suffit de considérer un décalage de 12 colonnes par la méthode Offset.

    Si je peux me permettre quelques remarques.
    - Attacher les objets à la feuille parent. Pour ce faire, utiliser le bloc With
    - Même si la propriété est tacite, mentionner .Value
    - En fin de procédure, libérer toujours une variable affectée à un objet (Set C = Nothing)

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 25
    Par défaut
    Bonjour Marcel,

    Merci de ta réponse. J'avais également pensé utiliser la fonction Offset, mais je ne vois pas comment l'intégrer dans mon programme. Les exemples que j'ai pu trouver utilisant cette fonction étaient précédés de ActiveCell par exemple, je ne vois pas trop comment adapter cela à mon cas :

    J'ai essayé d'ajouter la ligne suivante à différentes positions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.Offset(0, 2).Select
    Mais pas moyen de la faire fonctionner

    Pour ton autre proposition concernant l'utilisation de la fonction With, quel est l'utilité de l'utiliser ici ?

    Merci !

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    Regarde la propriété Offset dans cette documentation

    Pour ton autre proposition concernant l'utilisation de la fonction With, quel est l'utilité de l'utiliser ici
    Le bloc With permet un rattachement des objets Range à leur parent Worksheet tout en allégeant le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Worksheets("s").Range("A1").Value = 2
    Worksheets("s").Range("A3").Value = 3
    sera ainsi remplacé par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Worksheets("s")
      .Range("A1").Value = 2
      .Range("A3").Value = 3
    End With
    Dans ton cas, tous les objets Range (ou Cells) peuvent ainsi être rattachés.

    En règle générale, le bloc With est utilisé dès la répétition d'un objet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Application
      .DisplayAlerts = False
      .ScreenUpdating = False
    End With

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 25
    Par défaut
    RE:

    Après cette heure de cogitation je reste coincé
    J'ai lu la page que tu m'as fourni ainsi qu'une page Offset, mais je ne comprends pas comment l'adapter.
    Dans les exemples une plage est définie puis utilisée pour faire l'offset, mais je ne possède pas cette dernière comme je vais chercher les données un peu partout dans les différentes pages de mon classeur. Je ne peux donc pas définir par exemple Range("A1:A50") puis l'exploité comme les données de cette plage sont prises dans mes différents classeurs.

  6. #6
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    Excuse-moi. Je ne comprends pas.
    Dans la feuille active, pour chaque valeur de la colonne B, à partir de la 3ème ligne, une recherche est effectuée dans toutes les autres feuilles du classeur.
    Questions / Confirmations :
    Dans quelle colonne serait trouvée cette valeur?
    Dans quelle colonne (décalée par rapport à la précédente) se trouve la valeur que tu souhaites voir reportée dans la feuille initiale?

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

Discussions similaires

  1. affihage automatique d'une donnée en fonction d'une autre
    Par leclone dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 26/08/2008, 15h20
  2. Réponses: 2
    Dernier message: 22/01/2008, 11h46
  3. Récupération de données de formulaire dans une fenetre fille
    Par xave dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 03/01/2008, 17h22
  4. [SQL] Récupération de données et Insert dans une table
    Par heteroclite dans le forum PHP & Base de données
    Réponses: 32
    Dernier message: 12/07/2006, 17h17
  5. Réponses: 2
    Dernier message: 04/06/2006, 21h11

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