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 :

probleme index+equiv en vba


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 174
    Points : 144
    Points
    144
    Par défaut probleme index+equiv en vba
    Bonjour le forum

    j'ai créé grace à votre aide un programme permettant de mettre un code en face de nom. Mon probleme est que par la fonction recherche v, il me met le meme code alors que les noms changent. Une solution en excel est la fonction index+equiv. Mais j'avoue ne pas trop connaitre la similaire en vba.

    Pouvez vous m'aider?
    Cordialement

    mon code sous vba pour la recherche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ThisWorkbook.Worksheets("Feuil1")
    'recherche du code de l'essence
            .Cells(j, 2) = Application.WorksheetFunction.VLookup(Sh.Cells(i, 2).Value, ThisWorkbook.Worksheets("qualite").Range("$D$2:$E$28"), 1)

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 587
    Points : 34 258
    Points
    34 258
    Par défaut
    salut,

    que souhaites-tu faire ici ? mettre dans les cellules une formule ou bien directement le résultat ?

    Dans ton code, on voit des variables i et j à quoi correpondent-elles ?

    Ca reste un peu flou à mon niveau pour pouvoir te proposer d'emblée une méthode de résolution.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 174
    Points : 144
    Points
    144
    Par défaut
    Bonjour

    Je ne veux mettre que le résultat.
    La ligne i correspond à la ligne de ou vient les données. La ligne j celle de la feuille où sont traitée les données.

    Cordialement

    si utile

    ci jint le code complet (un peu long)

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    Private Sub Transfert(ByVal Wb As Workbook)
    Dim i As Long, j As Long
    Dim Sh As Worksheet
     
    Application.ScreenUpdating = False
    i = 2
    Set Sh = Wb.Worksheets(1)
    With ThisWorkbook.Worksheets("Feuil1")
        j = .Cells(.Rows.Count, 1).End(xlUp).Row     'Ligne de dernière cellule remplie de colonne A
        While Sh.Cells(i, 1) <> ""
            j = j + 1
            .Cells(j, 4).Value = Sh.Cells(i, 1).Value
            .Cells(j, 4).TextToColumns Destination:=.Cells(j, 4), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, Other:=True, OtherChar:="-", FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
     
            'copie de l'essence
            .Cells(j, 3).Value = Sh.Cells(i, 2).Value
     
            'numerotation ordre
            .Cells(j, 1).Value = j - 1
     
            'recherche du code de l'essence
            .Cells(j, 2) = Application.WorksheetFunction.VLookup(Sh.Cells(i, 2).Value, ThisWorkbook.Worksheets("qualite").Range("$D$2:$E$28"), 1)
     
            'import longueur
            .Cells(j, 7).Value = Sh.Cells(i, 3).Value
     
            'Operation sur diametre en m
            .Cells(j, 8).Value = Sh.Cells(i, 5).Value / 100
     
            'Conditions pour ID IT
            .Cells(j, 6).Value = IIf(.Cells(j, 5).Value <> "", IIf(.Cells(j, 5).Value < 90, "ID", "IT"), "")
     
            'reduction longueur en m
            .Cells(j, 9).Value = IIf(Sh.Cells(i, 4).Value = 0, 0, Sh.Cells(i, 4).Value / 100)
     
            'Qualité
            .Cells(j, 10).Value = Application.WorksheetFunction.VLookup(Sh.Cells(i, 7).Value, ThisWorkbook.Worksheets("qualite").Range("$A$2:$B$12"), 2)
     
            'calcul pieces
            .Cells(j, 11).Value = IIf(.Cells(j, 6).Value = "ID", 0, 1)
     
            'Calcul mesures
            .Cells(j, 12).Value = IIf(.Cells(j, 8).Value <> 0, 1, 0)
     
            'Calcul grumes
            .Cells(j, 13).Value = IIf(.Cells(j, 6).Value = "", 1, 0)
     
            'Calcul volume net
            .Cells(j, 14).FormulaR1C1 = "=ROUND((RC[-7]-RC[-5])*RC[-6]*RC[-6]*PI()/4,3)"
     
            'Calcul volume brut
            .Cells(j, 15).FormulaR1C1 = "=ROUND(RC[-8]*RC[-7]*RC[-7]*PI()/4,3)"
     
            'Nom propriétaire
            .Cells(j, 17).Value = Sh.Range("A1").Value
     
            'Parcelle
            .Cells(j, 18).Value = Sh.Range("B1").Value
     
            'Lieu
            .Cells(j, 19).Value = Sh.Range("F1").Value
     
            'Date
            Sh.Range("C1").Copy
            With .Cells(j, 20)
                .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
                .PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone
            End With
            Application.CutCopyMode = False
            i = i + 1
        Wend
    End With
    Set Sh = Nothing
     
    End Sub

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 587
    Points : 34 258
    Points
    34 258
    Par défaut
    Hum, OK,

    peux-tu nous donner la formule à "répliquer" en VBA stp ? voir quelle partie poserait problème entre ton objectif et ton code
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 174
    Points : 144
    Points
    144
    Par défaut
    bonjour, ce pourrait être une formule de cette façon a adpter à chaque ligne de la colonne B)pour chaque valeur de C (Remarque: il semble y avoir un probleme aussi sur la feuille car il apparait "N/A"

    pourtant quand je fais de cette facon sur une autre feuille en entrant mes données "manuellement" ca marche????

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDEX(qualite!$D$2:$D$28;EQUIV(Feuil1!C2;qualite!$E$2:$E$28;0))

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 587
    Points : 34 258
    Points
    34 258
    Par défaut
    L'utilisation de fonction pour si peu de chose me parait un peu superflu.
    Tu peux très bien faire une simple boucle for avec un test if et mettre la valeur lors du test positif.

    Les fonctions INDEX+EQUIV sont en fait index+match en VBA sinon
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 174
    Points : 144
    Points
    144
    Par défaut
    Merci pour ta réponse;

    Le probleme est que ma liste est importante mais je vais suivre ton avis

    A plus
    lps02

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

Discussions similaires

  1. [XL-2007] Fonction INDEX + EQUIV sous VBA
    Par ti_mouton dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 15/07/2015, 10h18
  2. Transformer et adapter INDEX/EQUIV en boucle vba
    Par Akhlan dans le forum Macros et VBA Excel
    Réponses: 31
    Dernier message: 26/02/2013, 12h42
  3. Réponses: 7
    Dernier message: 11/08/2012, 18h49
  4. probleme avec index + equiv
    Par lps02 dans le forum Excel
    Réponses: 10
    Dernier message: 03/05/2012, 19h24
  5. Index - Equiv en VBA
    Par JudRos dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/10/2011, 09h53

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