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 :

[Créer une VBA pour chercher des valeurs] [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 53
    Points : 38
    Points
    38
    Par défaut [Créer une VBA pour chercher des valeurs]
    Bonjour,
    Je suis actuellement face à un problème que je n'arrive pas à résoudre :
    J'ai dans une feuille de mon classeur des identifications de tronçons (dans l'exemple en PJ : Tron_01 jusqu'à 03) et dans une autre feuille des points composant ces tronçons avec leurs coordonnées x,y. Donc il y a plusieurs points par tronçons.
    J'ai fais la moyenne des points par tronçon (qui correspond à la moyenne de chaque tronçon). Sauf que comme vous pouvez le voir dans l'exemple, il y a des fois où la moyenne se situe en début de tronçon et d'autre fois en fin de tronçon.

    Ce que je souhaiterais faire, c'est, lorsque je suis dans la feuille 1, récupérer les moyennes qui sont dans la feuille 2 pour les mettre en face des bons tronçons.

    Par exemple, dans le fichier joint, je veux en face du Tron_01 la moyenne x=1.26666 etc.

    J'ai essayé de faire un simple RECHERCHEV, mais ça ne marche que quand la moyenne se situe en début de tronçon. Je pourrais manuellement remonter mes moyennes à chaque fois mais j'en ai plus de 1000 ce qui rend compliqué cette procédure.

    J'ai donc essayé de créer une VBA de cette manière (en gros):

    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
    Function Coordonne(texte As String) As Single
     
    i = 1
    j= 2
    Sheet("Feuil2").Select
     
    While Cells(i,j)<>texte
    i=i+1
    Wend
    While Cells(i,j+3)=""
    i=i+1
    Wend
     
    Coordonne = Cells(i,j+3)
     
    End Function
    En gros : je clique sur le tronçon qui m'interesse dans la feuille 1, je lui dis de chercher dans la feuille 2 cet identifiant, et si la colonne des Xmoyen est vide, de descendre jusqu'à trouver la valeur et de l'écrire dans la case X de la feuille 1

    Est ce compréhensible ?

    Si quelqu'un peut m'aider ça serait top !
    Fichiers attachés Fichiers attachés

  2. #2
    Membre du Club Avatar de shynen
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2016
    Messages : 35
    Points : 41
    Points
    41
    Par défaut
    Bonjour !

    As-tu déjà essayé de laisser ta formule dans la cellule de ta première feuille et de faire un =range(cellule) de ta feuille 2 ?

    Du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Worksheets("Feuil1").Range("A1").Value = Worksheets("Feuil2").Range("B10").Value
    En espèrant t'avoir aidé

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 53
    Points : 38
    Points
    38
    Par défaut
    Ahah désolé mais j'ai pas trop compris où je place cette ligne ? Directement dans la cellule des X de la feuille 1 ? Dans ma fonction ?

  4. #4
    Membre du Club Avatar de shynen
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2016
    Messages : 35
    Points : 41
    Points
    41
    Par défaut
    Le code ci-dessus est à écrire en mode VBA et non dans une cellule

    Dans mon code :

    A1 = cellule de départ => C'est à dire celle où tu dois avoir ta fonction moyenne si je ne m'abuses
    B10 = Cellule d'arrivé => C'est à dire à coté de tes tronçons comme tu le souhaites

    Mis à part que A1 et B10 ne sont que des exemples que tu peut changer bien sur tout comme le nom de chaque feuil ne sachant pas comment tu les as nommées .

    Je te remet le code pour t'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Feuil1").Range("A1").Value = Worksheets("Feuil2").Range("B10").Value
    Après si c'est une plage de données et non pas une seule cellule tu devras remplacer le code par : .Range("A1:E1") par exemple

    Je sais pas si c'est compréhensible pour toi j'ai essayé de faire au mieux

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 53
    Points : 38
    Points
    38
    Par défaut
    Ok j'ai compris le principe je pense mais je vois pas comment je l'introduis dans le module VBA. Est ce que je met juste la ligne comme ça ou je met aussi l'entête ? (Function = ... et dans ce cas avec quelle variable ? ).

    Merci !

    Et désolé c'est la première fois que je fais du VBA

  6. #6
    Membre du Club Avatar de shynen
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2016
    Messages : 35
    Points : 41
    Points
    41
    Par défaut
    Pas de problème

    Pas besoin de l'introduire ta fonction vu que le code ne prends en compte que la valeur de ta cellule ce qui revient donc a dire que la valeur de ta cellule sera copié en destination de l'autre cellule

    Tu peut directement copié le code en modifiant le nom des cellules et des feuilles

    Une méthode plus simple que le VBA aurait été d'écrire dans la cellule où tu veux ta moyenne :

    =nomdetafeuil!nomdetacellule et d'appuyer sur entrer

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 53
    Points : 38
    Points
    38
    Par défaut
    Ok je vois,
    bon j'ai essayé mais ça ne marche pas (m'affiche "Valeurs"), et puis j'ai l'impression que de toute façon ça ne répond pas totalement à mon problème. Dans l'exemple que j'ai mis, il y a des cases blanches et donc le but c'est de lui faire chercher dans le tronçon correspondant. Par exemple si j'ai choisi Tron_01 dans la feuille 1, je veux que dans la feuille 2 il trouve la valeur moyenne (un balayage par exemple) afin de la recopier dans la feuille 1. (comme dans la PJ).

    Je vais essayer de chercher à nouveau, merci quand même !

  8. #8
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour.

    En m'inspirant de ton code :

    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
    Sub tt()
     Dim troncon As String
     Set f = Feuil1
     Set f2 = Feuil2
     
     ligne = 2: col = 1
     Set c = f.Cells(ligne, col)
     
    While c.Value <> ""
     
     troncon = c.Value
     'c.Parent.Activate
     'c.Select
     result = Coordonne(f2, troncon, CoordonneMoyenneX, CoordonneMoyenneY)
     
     formuleB = "=MOYENNE(" & f2.CodeName & "!" & CoordonneMoyenneX & ")"
     formuleC = "=MOYENNE(" & f2.CodeName & "!" & CoordonneMoyenneY & ")"
     
     c.Offset(, 1).FormulaLocal = formuleB
     c.Offset(, 2).FormulaLocal = formuleC
     
     ligne = ligne + 1
     Set c = f.Cells(ligne, col)
     
    Wend
    f.Activate
    End Sub
     
    Function Coordonne(f2, texte As String, CoordonneMoyenneX, CoordonneMoyenneY)
     
    i = 2
    j = 2
    'f2.Activate
    Set c = f2.Cells(i, j)
     
    While f2.Cells(i, j) <> texte
    Set c = f2.Cells(i, j)
    i = i + 1
    Wend
    debut = i
    fin = i
     
    While f2.Cells(i, j) = texte
    Set c = f2.Cells(i, j)
    fin = i
    i = i + 1
    Wend
    Set r = f2.Range("B" & debut & ":B" & fin)
     
    CoordonneMoyenneX = r.Offset(, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False)
    CoordonneMoyenneY = r.Offset(, 2).Address(RowAbsolute:=False, ColumnAbsolute:=False)
     
    End Function

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 53
    Points : 38
    Points
    38
    Par défaut
    ça marche nickel merci beaucoup !!!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/10/2015, 15h31
  2. Créer une fonction pour ajouter des clés/valeurs dans ma hashmap
    Par khalous91 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 05/05/2015, 13h40
  3. Réponses: 21
    Dernier message: 23/05/2007, 16h16
  4. [VB6]créer une requete pour chercher une partie d'un mot
    Par aibar dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 11/06/2006, 21h38
  5. Boucler sur une table pour renommer des valeurs
    Par webwhisky dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 03/01/2006, 14h19

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