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 :

Table de correpondance


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 85
    Par défaut Table de correpondance
    Bon je vai encore vous embeter!

    Je dois faire une table de correspondance en utilisant VB (chose que je n'ai jamais faite). Le mieux pour vous expliquer est de vous envoyer un exemple sur excel.

    Je ne sais pas si il faut utiliser une formule (comme equiv & index) ou bien integrer un code dans mes procedures.
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par derech Voir le message
    ...Je dois faire une table de correspondance en utilisant VB (chose que je n'ai jamais faite). Le mieux pour vous expliquer est de vous envoyer un exemple sur excel.

    Je ne sais pas si il faut utiliser une formule (comme equiv & index) ou bien integrer un code dans mes procedures.
    Tu dois utiliser VB?? ou bien tu peux utiliser Index/Equiv??.

    Car si tu peux utiliser index/equiv, fais-le. C'est plus simple que du VBA.

    Ok?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 85
    Par défaut
    J'ai un problème, rien ne s'affiche.
    Mes clients sont répertoriés dans la feuille "Inputs"(feuil1) la colonne B correspond à mes clients et la colonne C correspond aux pays qui s'y rapportent (matricequicommence en b2 et fini en c38).
    En parallèle dans la feuille "SC-country" (feuil2), le nom du premier client est écrit en "b8" et je veux indiquer le premier pays en "a8", ainsi de suite.

    voici le code que j'utilise:
    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
     
    Sub tablecorres()
     
    ' si les tables changent alors modifier n 
     
    Dim BTN As String, country As String
    Dim i As Long 
     
     
    BTN = Sheets("SC-country").Cells(8, 2).Value
    Do
    i = 0
      i = i + 1
        If Sheets("Inputs").Cells(i, 2).Value = BTN Then
            country = Sheets("Inputs").Cells(i, 2).Offset(0, -1).Value
            Exit Do
        End If
     
    Loop
    Sheets("SC-country").Cells(8, 2).Offset(0, -1).Value = country 
     
     
    End Sub
    Pouvez-vous me dire ce qui ne va pas s'il vous plait? Le code fonctionne mais ne s'arrete pas (il ny a pas de beug) et rien ne s'affiche dans ma colonne A de la feuille SC-country (colonne ou je veux que mes pays apparaissent). Merci


    PS: Devrais-je donner une limite à i (avec un "for" peut etre, en donnant la valeur 40 à n ) Si c'est le cas comment intégrer le "for" dans ce code. J'ai essayé plusieurs choses mais sans résultat

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Je ne sais pas si tu dois faire cela pour un cours,... et donc, je ne connais pas ton niveau et vais peut-être te proposer une solution utilisant des notions non encore apprises...

    A toi de voir.

    Il faut découper le processus:
    Définir la plage des BTN de la feuille "sc-country"
    Définir la plage des BTN de la feuille "inputs"

    Parcourir la plage des BTN sc-country, rechercher la correspondance dans la plage des BTN inputs, et attribuer à la cellule à gauche du btn sc-contry la valeur de la cellule de droite du btn inputs

    En utilisant des objets, tu as un code clair et lisible. De plus, la manière utilisée pour déterminer les plages permet au code de fonctionner même si tu ajoutes des BTN.

    Examine ce code et reviens poser des questions si pb...

    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
     
    Sub RechercherPays()
        Dim PlageSource As Range
        Dim PlageRecherche As Range
        Dim CelSource As Range
        Dim CelTrouvee As Range
     
        Set PlageSource = Worksheets("sc-country").Range("b8:b" & Worksheets("sc-country").Range("b8").End(xlDown).Row)
        Set PlageRecherche = Worksheets("inputs").Range("b2:b" & Worksheets("inputs").Range("b2").End(xlDown).Row)
     
        For Each CelSource In PlageSource
            Set CelTrouvee = PlageRecherche.Find(what:=CelSource.Value, LookIn:=xlValues, lookat:=xlWhole)
            If Not CelTrouvee Is Nothing Then CelSource(1, 0).Value = CelTrouvee(1, 2).Value
        Next CelSource
     
        Set PlageSource = Nothing
        Set PlageRecherche = Nothing
        Set CelSource = Nothing
        Set CelTrouvee = Nothing
    End Sub
    Ok?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 85
    Par défaut
    Je suis débutant en VB. Je l'utilise pour le travail.

    J'ai examiné le code et je le comprends. Je l'ai donc coller dans une procédure mais lorsque je l'execute rien ne s'affiche dans ma col A feuille SC-country ( la ou je veux que les pays apparaissent).

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Il est possible qu'il faille adapter à ta situation (notamment les noms des feuilles) car n'ayant eu que ton premier classeur, je n'ai pu travailler que sur celui-là. Dans ton deuxième message, tu parles de feuille "inputs" notamment, alors que dans le classeur que tu as mis sur le forum, tes feuilles s'appellent feuil1 et feuil2.

    Si tu comprends le code, tu devrais être à même de l'adapter pour qu'il fonctionne chez toi.

    Voici le fichier excel sur lequel mon code fonctionne
    Fichiers attachés Fichiers attachés
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 85
    Par défaut
    Ok j'ai bien tout vérifier et c'est en fait mon tableau feuille Inputs qui démarre ligne 3 au lieu de ligne 2!

    Ca fonctionne parfaitement maintenant,merci!

  8. #8
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 85
    Par défaut
    Je voudrais ajouter une condition à votre code.

    Dans la feuille Inputs colonne C (country) j'ai parfois le nom "reserve". Je voudrais associer ce "reserve" à "Europe". Donc lorsque je tombe sur ce mot "reserve" je veux que le mot "europe" soit copié dans la feuille SC-country colonne A.

    Etant donné que mes codes perso sont basiques normalement, je ne sais pas commment ajouter cette condition sur votre code.

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Tu dois alors tester la valeur de la cellule.

    Pour cela, j'agirais comme suit:

    Ajout de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim ValeurTrouvee as variant
    juste après les lignes Dim en début de procédure, comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        Dim PlageSource As Range
        Dim PlageRecherche As Range
        Dim CelSource As Range
        Dim CelTrouvee As Range
        Dim ValeurTrouvee As Variant
    Je passerais systématiquement la valeur de la cellule du pays pour le BTN trouvé à cette variable.
    Puis je testerais la valeur au sein d'une boucle If... End If pour renvoyer la valeur adéquate.

    Il faut donc adapter le code de la boucle, comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
           If Not CelTrouvee Is Nothing Then
               ValeurTrouvee = celtrouvee(1,2)
               If ValeurTrouvee = "RESERVE" Then
                    CelSource(1,0).Value = "EUROPE"
                    Else
                    CelSource(1, 0).Value = CelTrouvee(1, 2).Value
               End If
           End If
    Ok?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 85
    Par défaut
    c'est parfait, et surtout mon code est très propre, merci beaucoup!

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

Discussions similaires

  1. Probleme requete non correpondance entre 2 tables
    Par amne26 dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 27/01/2009, 16h23
  2. Réparation table/entête endommagée
    Par tbesrour dans le forum Paradox
    Réponses: 15
    Dernier message: 27/11/2007, 10h42
  3. Réponses: 5
    Dernier message: 06/11/2007, 13h58
  4. Newbie......compilateur et table de caractères
    Par Cyberf dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 21/08/2002, 14h29
  5. [Comparatifs] Limites nombres tables et quantité de données
    Par benj63 dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 13/06/2002, 21h31

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