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 :

Recherche d'une cellule depuis vba


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Par défaut Recherche d'une cellule depuis vba
    Rebonsoir ...

    Voici mon problème (qui ne doit pas être difficile à mon avis mais étant plus ou moins débutante en vba ...) :

    J'ai une feuille Excel avec deux colonnes :

    colonne A : liste de pays
    colonne B : code des pays (du genre FRA pour France par exemple)

    Je souhaite écrire dans une cellule de la feuille1, le code correspondant au pays affiché dans une autre cellule de cette même feuille.

    Par exemple :
    cellule(1,1) : France
    cellule(1,2) : FRA

    Sauf que le numéro de ligne n'est pas entré directement, c'est une variable.
    Voici mon 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
     
     
    Dim cand As Worksheet
    Set cand = Sheets("candidats")
     
    Dim numca As Integer
     
    numca = Me.TextBox1.Value
    numca = numca + 1
     
    If Me.TextBox2.Value = "" Then
        MsgBox ("Les champs ne peuvent pas être vides !")
    Else
        cand.Cells(numca, 6).Value = "=RECHERCHEV(range("D" &numcand;nationalites!A2:B29;2)"
     
     
    End If
     
    End Sub
    J'ai écrit la fonction recherche que je souhaite, mais ça m'étonnerais fort qu'elle s'écrive comme ça, donc si vous pouviez m'aider ... =)

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut baggie et le forum

    ton code laisse un peu à désirer , mais il est au moins construit correctement

    J'ai une feuille Excel avec deux colonnes :

    colonne A : liste de pays
    colonne B : code des pays (du genre FRA pour France par exemple)

    Je souhaite écrire dans une cellule de la feuille1, le code correspondant au pays affiché dans une autre cellule de cette même feuille.

    Par exemple :
    cellule(1,1) : France
    cellule(1,2) : FRA
    d'après ce que je comprends :
    Tu as une feuille (A) qui contient 2 colonnes A le nom, B le code
    quand dans la feuille B tu entres le nom, tu veut que le code s'inscrive dans la colonne à droite
    Clic-droit sur l'onglet correspondant à "B">>Menu contextuel>>visualiser le code et tu colles la macro :
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    'Déclarations =====================================
    Dim Plage As String
    Dim Cel As Range
    Dim Cel_Ref As Range
    Dim F As Worksheet
    'MEI ==============================================
    If Intersect(Target, Range("D:D")) Is Nothing Then Exit Sub
    'si aucunes des cellules modifiées n'appartient à D on sort
    Plage = Intersect(Target, Range("D:D")).Address(0, 0)
    'on definitb la plage de travail comme les adresses des cellules modifiées
    'appartenant à D
    Set F = Sheets("A")
    For Each Cel In Range(Plage)
    'Pour chaque cellule de la plage de travail
        For Each Cel_Ref In F.Range(F.[A1], F.[A65536].End(xlUp))
        'pour chaque cellule de la colonne A de la feuille ("A")
            If UCase(Cel) = UCase(Cel_Ref) Then
            's'il y a égalité des deyx cellules en majuscules
                Cel.Offset(0, 1) = Cel_Ref.Offset(0, 1)
                'la cellule de droite = cellule de droite du nom
                Exit For
                'on sort
            End If
        Next Cel_Ref
    Next Cel
    End Sub
    C'est donc une macro à lancement automatque qui se déclenche à chaque changement de la feuille B
    Si une ou plusieurs celluless de la colonne D sont modifiées, leur cellule correspondante de la colonne E reçoit le code (à condition qu'il existe dans la colonne B de la feuille "A").

    La boucle cel permet les copier/coller de plusieurs cellules, sans créer d'erreur

    Pour moi, je rajouterais un blocage d'évènement, pour éviter un second traitement, mais comme ça oblige à traiter les erreurs et que ça n'a pas un temps de traitement lourd (juste le test et comme l'inscription se fait dans E, on sort) ce n'est pas indispensable.

    A+

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    sinon, plus simplement , en ce qui concerne ton code a toi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    numca = Me.TextBox1.Value
    numca = numca + 1
    peut s'écrire aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numca = Me.TextBox1.Value+1
    et pour ce qui est de ta formule, je suppose qu'elle est exacte si tu l'a enregistrée mais tu dois écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cand.Cells(numca, 6).formulalocal = "=RECHERCHEV(range("D" &numcand;nationalites!A2:B29;2)"
    sinon, au cas ou, pour enregistrer ta forrmule :
    outil/macro/nouvellemacro. tu valide le nom de ta macro
    puis tu tape ta formule
    puis arreter l'enregistrement, ensuite tu trouveras ce que tu as enrgistré dans les modules, tu n'as plus qu'a l'adapter a tes besoins

  4. #4
    Membre éclairé Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Par défaut
    Le formulalocal y était à la base, juste oublié de le mettre Mais même en le mettant ça ne marche toujours pas ...

    Quant à la solution de Gorfael, ben euh je vais déja essayer de la comprendre ... paske là j'avoue euh oO

    Citation Envoyé par Gorfael
    Tu as une feuille (A) qui contient 2 colonnes A le nom, B le code
    quand dans la feuille B tu entres le nom, tu veut que le code s'inscrive dans la colonne à droite
    Clic-droit sur l'onglet correspondant à "B">>Menu contextuel>>visualiser le code et tu colles la macro :
    Euh ... en fait, j'ai une seule feuille avec mes pays/codes (pays = colonne A, code = colonne B).
    Une combobox va afficher un pays dans une case d'une autre feuille, et j'aimerai qu'en même temps, dans la case à côté du pays s'affiche le code de ce pays. Donc je dois faire une recherche verticale je suppose. Si je fais une macro, ça va me générer la macro pour une seule case définie, alors que je souhaiterai avoir la formule suivant une variable, comme j'avais mis plus haut dans ma recherche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    range("D" &numcand)
    Pour la case D1 -> affichage dans E1 du code correspondant au pays écrit dans D1
    Pour la case D2 -> affichage dans E2 du code correspondant au pays écrit dans D2

    etc ...

    j'espère que c'est plus clair ...

  5. #5
    Membre éclairé Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Par défaut
    J'ai testé la solution de Gorfael (avec les commentaires et tout j'ai bien compris ^^), mais le problème, c'est que je ne vois pas l'endroit où je peux dire que j'affiche le résultat dans telle cellule.

    Je n'ai qu'une feuille de définie (celle où il y a mes pays et leur code), mais je ne dis pas la feuille où je veux afficher le résultat de ma recherche =S

    Vous n'avez pas une solution ?


    [EDIT]J'ai testé ceci (avec les macros comme vous m'aviez dit) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        cand.Cells(numca, 6).FormulaR1C1 = "=VLOOKUP(R[-5]C[-2],nationalites!R[-8]C[-5]:R[19]C[-4],2)"
    Alors ça marche très bien, mais comment je fais pour définir ça par rapport à ma variable (le numéro automatique) ? Parce que là, c'est pour une case bien définie du genre "Rechercher la valeur de la case D5" alors que moi j'aimerai "Rechercher la valeur de la case "D &numero" ...

    Et comme je n'ai pas tout compris pourquoi on avait des -5 ou des -2, je ne sais pas comment modifier ça ...

    [/EDIT]

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Par défaut
    Les -5 et -2 sont des nombres de lignes/colonnes de décalage par rapport à la cellule ou se trouve la formule. R[-5]C[-2] veut dire: 5 lignes (Rows) vers le haut et 2 colonnes (Columns) vers la gauche.


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

Discussions similaires

  1. Recherche d'une cellule à l'intersection de colonne en vba
    Par mattetienne dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 11/08/2009, 11h38
  2. [VB.NET 2005]Afficher une form depuis VBA
    Par Bz dans le forum C++/CLI
    Réponses: 3
    Dernier message: 11/04/2007, 13h33
  3. Recherche d'une cellule dans une feuille Excel
    Par vuong1 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/03/2007, 07h51
  4. Créer un moteur de recherche dans une cellule d'un classuer excel
    Par ludovicparis dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/03/2007, 15h36
  5. [FLASH 8] DataGrid + Recherche dans une cellule ?
    Par ExSter dans le forum Flash
    Réponses: 1
    Dernier message: 30/06/2006, 12h59

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