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 :

VBA - RechercheV - Boucle [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Février 2016
    Messages : 17
    Par défaut VBA - RechercheV - Boucle
    Bonjour tout le monde,

    Je viens vers vous pour obtenir vos précieux conseils!

    Je souhaiterai réaliser une macro qui s'adapte, pour effectuer une rechercheV dans chaque cellule de ma colonne X de ma dernière feuille.
    La clé recherchée se situe dans la colonne H. (Pour X1 ->H1; X2->H2;...; Xi->Hi)
    La matrice se trouve dans la feuille avant, avec pour référence : (H2:Ti).
    Ma valeur a renvoyé se trouve en colonne 13 et ma rechercheV est Faux.

    Mon problème est que chaque mois je rajoute une feuille en dernière position dans ce classeur excel. (Chaque feuille comporte le même nombre de colonnes mais le nombre de lignes diffère d'un mois sur l'autre.)
    les références de ma fonction rechercheV changent donc!

    Je ne sais pas si j'ai étais très clair donc je mets en pj mon classeur sans données.

    Est ce que quelqu'un aurait une idée car je bloque la dessus depuis hier!!

    Merci d'avance pour votre aide!
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

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

    Qu'est-ce qui te bloque au juste ?

    Si les nouvelles feuilles sont toujours placées à la fin, la dernière feuille se nomme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(Sheets.Count).name
    La précédente est .Count - 1

    Par contre, si tes feuilles peuvent être déplacées et que tu doives trouver les 2 dernières créées, ça prendrait peut-être un code comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Dim I As Long
        Dim DerniereFeuille As String, AvantDerniere As String
     
        For I = 1 To Sheets.Count
            If Right(Sheets(I).CodeName, Len(Sheets(I).CodeName) - 5) = CStr(Sheets.Count) Then
                DerniereFeuille = Sheets(I).Name
            ElseIf Right(Sheets(I).CodeName, Len(Sheets(I).CodeName) - 5) = CStr(Sheets.Count - 1) Then
                AvantDerniere = Sheets(I).Name
            End If
        Next
        MsgBox DerniereFeuille & vbCrLf & AvantDerniere

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Février 2016
    Messages : 17
    Par défaut
    Merci Parmi pour ta réponse.
    Mes feuilles sont toujours les deux dernières et je suis ok avec .count et .count-1. Ce que je n'arrive pas à faire est le codage de ma fonction rechercheV avec Vlookup du style:
    cells(i,24).value = worksheetfunction.vlookup(.........) de manière à ce que cela fonctionne à chaque fois que je rajouterai une feuille!

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Tu préfères inscrire une valeur ou une formule ferait l'affaire ?

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Février 2016
    Messages : 17
    Par défaut
    une formule ferait l'affaire je pense!
    merci

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Si j'ai bien compris la formule, ceci devrait faire l'affaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Formule()
        Dim shSource As Worksheet, shDest As Worksheet
        Dim LigneSource As Long, LigneDest As Long
     
        Set shSource = Sheets(Sheets.Count - 1)
        Set shDest = Sheets(Sheets.Count)
     
        LigneSource = shSource.Cells(Rows.Count, "H").End(xlUp).Row
        LigneDest = shDest.Cells(Rows.Count, "H").End(xlUp).Row
     
        shDest.Range("X2:X" & LigneDest).Formula = "=VLOOKUP(H2," & shSource.Name & "!$H$1:$T$" & LigneSource & ",13,FALSE)"
     
    End Sub

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Février 2016
    Messages : 17
    Par défaut
    Je te remercie d'abord pour ta réponse rapide mais je rencontre un petit problème :
    - Pourquoi lorsque je lance le calcul, une boite de dialogue apparaît me demandant:" mettre à jour les valeurs : 15"
    - Pourquoi le résultat dans les cellules est "#Nom?"?

    je ne comprend pas car lorsque je sélectionne mes celulles, c'est la bonne formule qui apparaît!!

    Une idée?

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    #NOM! signifie que la formule n'est pas reconnue...
    As-tu changé quelque chose dans mon bout de code ?
    Tu pourrais réessayer en changeant cette partie et voir ce que ça donne (?)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shDest.Range("X2:X" & LigneDest).FormulaLocal = "=RECHERCHEV(H2;" & shSource.Name & "!$H$1:$T$" & LigneSource & ";13;FAUX)"
    Est-ce que ton séparateur par défaut (dans les formules) est le point-virgule ?

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Février 2016
    Messages : 17
    Par défaut
    Non je n'ai rien changé dans ton bout de code. oui pour le point virgule comme séparateur par défaut. On dirait qu'il ne reconnaît pas la table matrice de la fonction rechercheV. Dans mon fichier, la feuille source s'appelle DECEMBRE 15 et ma feuille dest JANVIER 16 et une boite de dialogue me demande :"Mettre à jour les valeurs : 15".

    J'ai essayé avec formula local mais ça ne change rien!

  10. #10
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Effectivement, avec des espaces dans le nom des feuilles, il faut ajouter des apostrophes
    Alors ceci devrait aller mieux...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shDest.Range("X2:X" & LigneDest).Formula = "=VLOOKUP(H2,'" & shSource.Name & "'!$H$1:$T$" & LigneSource & ",13,FALSE)"

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Février 2016
    Messages : 17
    Par défaut
    Parfait ça fonctionne!
    Merci beaucoup pour ton aide

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

Discussions similaires

  1. [VBA-E]boucle
    Par janus82 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 10/04/2006, 19h08
  2. [VBA-E] boucle lente !
    Par zenix dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/04/2006, 16h48
  3. [VBA-E]Boucle mise a jour label
    Par alex_95 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/03/2006, 15h32
  4. [VBA-E]Boucle pour addition?
    Par LouBoulpi dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/02/2006, 21h50
  5. [VBA-E] Boucle while!
    Par max2245 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/12/2005, 20h26

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