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 :

Plage évolutive et fonction vlookup


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2018
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Plage évolutive et fonction vlookup
    Bonjour à tous,
    j'essaie d'exécuter une macro sur laquelle je traine depuis ce matin. je m'explique, sur la feuille 3 je souhaite ramener des valeurs qui sont sur la feuille 2 dans le tableau suivant: s3.range("BC2:BO12") à l'aide d'un vlookup en sautant à chaque fois une ligne sorte à ce que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    s3.range ("BC2:BO2").value=Application.VLookup(S3.Cells(1, j), S2.Range(S2.Cells(3, 57), S2.Cells(15, 61)), a, False)
    s3.range ("BC4:BO4").value=Application.VLookup(S3.Cells(1, j), S2.Range(S2.Cells(16, 57), S2.Cells(28, 61)), a, False)
    s3.range ("BC6:BO6").value=Application.VLookup(S3.Cells(1, j), S2.Range(S2.Cells(29, 57), S2.Cells(41, 61)), a, False)
    etc jusqu'à 12
    pour plus de précision
    a = numero de colonne
    S3.Cells(1, j)= lookup value qui varie en fonction de j


    ce qui varie c'est ma plage de sélection, il y a de 13 entre le numero de ligne de début et également celui de fin lorsqu'on change de plage
    voici ce que j'ai fait jusque la mais je n'obtient pas les résultats souhaités. je vous remercie par avance pour vos réponses et éclairages.

    https://www.cjoint.com/c/HHpwfVVWXMx





    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
    Sub Tableaux()
     
    Dim S1 As Worksheet
    Dim S2 As Worksheet
    Dim S3 As Worksheet
     
     
    Set S1 = Worksheets("List")
    Set S2 = Worksheets("Temp")
    Set S3 = Worksheets("Calcul")
     
    Dim i, j, a, k As Long
    For i = 2 To 15
        For j = 55 To 67
            a = 2
                 If Application.WorksheetFunction.IsEven(i) Then
                        S3.Cells(i, j) = Application.VLookup(S3.Cells(1, j), S2.Range(S2.Cells(3, 57), S2.Cells(15, 61)).Offset(13, 0), a, False)
                End If
     
               Next j
               next i
      end sub
    excellent après midi

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par laetityao Voir le message
    Bonjour,

    Vous ne pointez pas sur la bonne aire pour votre sélection dans l'onglet temp.
    Si j'ai bien compris, votre décalage de ligne dans Calcul correspond à chacun des tableaux dans temp.

    Regardez si ce code correspond à ce que vous souhaitez réaliser :
    Dans le fichier joint, chacun des tableaux correspond à une zone nommée Annee2018, Annee2017 dans un ordre décroissant.

    Le code modifié donne cela :
    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
     
    Option Explicit
     
    Sub Tableaux(ByVal FeuilleTemp As Worksheet, ByVal FeuilleCalcul As Worksheet, ByVal ColonneDevise As Long)
     
    Dim MonTableauDAnnees As Variant
    Dim I As Long, J As Long
    Dim IndexAnnee As Integer
    Dim AireDonneesAnnuelles As Range
     
        MonTableauDAnnees = Array("Annee2018", "Annee2017", "Annee2016", "Annee2015", "Annee2014")
        IndexAnnee = 0
     
        FeuilleCalcul.Range("AireCalcul").ClearContents
     
        For I = 2 To 10 Step 2
            Set AireDonneesAnnuelles = FeuilleTemp.Range(MonTableauDAnnees(IndexAnnee))
            'Debug.Print AireDonneesAnnuelles.Address
     
            For J = 55 To 67
                FeuilleCalcul.Cells(I, J) = Application.VLookup(FeuilleCalcul.Cells(1, J), AireDonneesAnnuelles, ColonneDevise, False)
            Next J
     
            IndexAnnee = IndexAnnee + 1
            Set AireDonneesAnnuelles = Nothing
        Next I
     
      End Sub
     
    Sub RemplirTableauCalcul()
     
        Tableaux Sheets("temp"), Sheets("Calcul"), 2
     
    End Sub

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2018
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Bonjour,
    Merci infiniment, effectivement je ne fesais pas les bons choix de plage dans ma feuille temp.Cependant apres avoir éssayer toute la journée d'adapter le code à un fichier similaire, mon manque d'experience m'a vite rattrapé. je n'ai pas bien compris le code, pourrais- tu me l'expliquer stp? à partir de cette ligne?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonTableauDAnnees = Array("Annee2018", "Annee2017", "Annee2016", "Annee2015", "Annee2014")

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par laetityao Voir le message
    Désolé...

    Les noms que tu vois dans le tableau Array(....) correspondent aux noms des zones que j'ai définies.

    Pièce jointe 405135

    Le principe est de travailler sur chacune de ces zones l'une après l'autre.

    On change de zone avec cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Set AireDonneesAnnuelles = FeuilleTemp.Range(MonTableauDAnnees(IndexAnnee))
    Est-ce suffisant comme explication ?

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2018
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message



    Est-ce suffisant comme explication ?
    Merci, je comprend beaucoup mieux mais excuse moi, j'ai d' autres questions:
    - J'aimerais comprendre comment jouer sur colonnedevise par exemple si j'avais voulu obtenir des données pour B,C,D? (avoir des donnees d'une autres colonnes)

    - Je veux comprendre cette ligne de la deuxième partie du code?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Tableaux Sheets("temp"), Sheets("Calcul"), 2

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par laetityao Voir le message
    Chaque tableau fait 5 colonnes. Comme tu peux le voir, la procédure Tableaux est paramétrique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub Tableaux(ByVal FeuilleTemp As Worksheet, ByVal FeuilleCalcul As Worksheet, ByVal ColonneDevise As Long)
    Cela permet d'appliquer ton code sur d'autres onglets s'ils doivent changer (année, ....) et également sur la devise étudiée. Dans la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tableaux Sheets("temp"), Sheets("Calcul"), 2
    2 est la deuxième colonne de chaque tableau. Tu peux indiquer 3, 4, 5 si tu veux récupérer les autres devises. Il te suffit de faire l'essai.

  7. #7
    Invité
    Invité(e)
    Par défaut Une suggestion pour améliorer l'évolutivité du code.
    Citation Envoyé par laetityao Voir le message
    J'aurais dû nommer mes zones ("AnneeN","AnneNMoins1", "AnneeNMoins2",....) au lieu de définir les années "en dur" dans l'onglet temp.
    Il te faut préalablement une autre procédure pour alimenter ces zones en fonction des exercices choisis, mais je suppose que c'est déjà fait.

  8. #8
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2018
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Bonjour,
    Merci pour tout j'ai appliqué toutes tes consignes à mon fichier et j'ai réussi

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

Discussions similaires

  1. Fonction Min pour une plage évolutive
    Par MelkInarian dans le forum Excel
    Réponses: 2
    Dernier message: 07/06/2010, 12h19
  2. fonction VLookup
    Par ouioui_cmoi dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/04/2008, 19h42
  3. Option « Matchcase » dans la fonction VLookup
    Par RéviAT dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/03/2008, 07h14
  4. petit probleme de fonction vlookup
    Par nicoroth dans le forum Excel
    Réponses: 3
    Dernier message: 02/08/2007, 15h47
  5. [VBA-E]Fonction vlookup et chemin d'accès fichier
    Par rustic51 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/06/2006, 23h01

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