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 :

Récupérer valeur de ligne selon recherche dans tableau [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2008
    Messages : 106
    Points : 58
    Points
    58
    Par défaut Récupérer valeur de ligne selon recherche dans tableau
    Bonjour le forum!

    J'ai encore une fois besoin d'aide!

    J'ai un tableau dans lequel la colonne A comporte des numéros uniques (du genre 2009-001, 2009-002, etc) et qui a des données dans les colonnes A à V. Pour remplir ce tableau, j'ai un bouton sur ma feuille qui appel un USF "Ajout d'une demande" qui inscrit des données sur la dernière ligne de mon tableau (lorsque je clic sur le bouton OK du USF).

    J'ai un autre bouton sur ma feuille qui appel un formulaire "Modification d'une demande" qui s'appel frmModifDDP. Dans mon USF frmModifDDP, j'ai un bouton "Enregistrer". Je souhaite donc qu'en cliquant sur ce bouton:
    - je récupère le numéro unique (placé dans la combobox cbxNoDDP du USF frmModifDDP)
    - je fais une recherche (par vlookup? ou par autre chose?) dans mon tableau pour récupérer le numéro de ligne correspondant à ce numéro unique
    - je transfère les données de mon USF sur la bonne ligne pour aller écraser les anciennes données.

    Avec un code, ce sera peut-être plus clair! Voici le code de mon bouton OK (dans mon USF d'ajout)
    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
    Private Sub btOK_Click()
    Dim derlig As Long
    Dim feuilSuivi As Worksheet
    Dim rep As String, NoPost As String, VariableMSG As String
     
    Set feuilSuivi = Sheets("Liste Demande de projet")
    derlig = Cells(65536, 2).End(xlUp).Row + 1
    NoPost = feuilSuivi.Cells(derlig, 1).Value
     
    If cbxAtelier.Value = "" Then
    MsgBox "Veuillez choisir un atelier"
    Else
    VariableMSG = "Votre numéro de demande de porjet est le " & NoPost
     
    MsgBox VariableMSG, vbOKOnly + vbInformation
     
    feuilSuivi.Cells(derlig, 2).Value = tbxInitiateur.Value
    feuilSuivi.Cells(derlig, 3).Value = date1
    feuilSuivi.Cells(derlig, 4).Value = tbxTitre.Value
    feuilSuivi.Cells(derlig, 5).Value = tbxObjectifs.Value
    feuilSuivi.Cells(derlig, 6).Value = tbxNoDAC.Value
    feuilSuivi.Cells(derlig, 7).Value = cbxAtelier.Value
    feuilSuivi.Cells(derlig, 8).Value = tbxSitAct.Value
    feuilSuivi.Cells(derlig, 9).Value = tbxSolution.Value
    feuilSuivi.Cells(derlig, 10).Value = tbxSommaireCouts.Value
    feuilSuivi.Cells(derlig, 11).Value = tbxEcheancier.Value
    feuilSuivi.Cells(derlig, 12).Value = cbxJustification.Value
    feuilSuivi.Cells(derlig, 13).Value = tbxAutreJustif.Value
    feuilSuivi.Cells(derlig, 14).Value = cbxRetourInvest.Value
    feuilSuivi.Cells(derlig, 15).Value = tbxExempleJustif.Value
    feuilSuivi.Cells(derlig, 16).Value = date2
    feuilSuivi.Cells(derlig, 17).Value = date3
    feuilSuivi.Cells(derlig, 18).Value = tbxCommentairesChefIng.Value
    feuilSuivi.Cells(derlig, 19).Value = cbxStatut.Value
    feuilSuivi.Cells(derlig, 20).Value = cbxType.Value
    feuilSuivi.Cells(derlig, 21).Value = cbxPriorite.Value
    feuilSuivi.Cells(derlig, 22).Value = tbxCommentaires.Value
     
    rep = MsgBox("Voulez-vous saisir une autre demande de projet", vbYesNo + vbQuestion, "Autre demande de projet")
    If rep = vbNo Then
        frmModifDDP.Hide
        Unload frmModifDDP
        Application.ScreenUpdating = False
        Cells.Select
        Cells.EntireColumn.AutoFit
        Columns("AN:AN").Select
        Selection.ColumnWidth = 80
        With Selection
            .HorizontalAlignment = xlGeneral
            .WrapText = True
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        Columns("A:A").Select
        Selection.EntireColumn.Hidden = True
        Range("B4").Select
        Application.ScreenUpdating = True
     
    Else
        frmModifDDP.Hide
        Unload frmModifDDP
        Load frmModifDDP
        frmModifDDP.Show
    End If
    End If
    End Sub
    Je souhaite donc pouvoir modifier le code comme suit pour mon USF frmModifDDP (j'ai mis en rouge le texte où j'ai des difficultées)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set feuilSuivi = Sheets("Liste Demande de projet")
    derlig = recherche du numéro de ligne pour la donnée de la colonne A qui correspond à cbxNoDDP.Value
    (donc si j'ai, par exemple, le numéro 2009-003 dans cbxNoDDP.Value, je veux avoir la valeur de ligne 6)
    ' Aller inscrire les données de mes txb et cbx dans les bonnes colonnes selon la bonne ligne
    feuilSuivi.Cells(derlig, 2).Value = tbxInitiateur.Value
    ...
    J'espère que ce que je souhaite faire est clair... à force d'y travailler, j'ai peut-être oublier de mentionner certains éléments qui sont important et je m'en excuse!

    Merci à l'avance encore une fois pour vos réponses si aidantes!!
    Geneviève

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Rechercher une valeur dans une colonne et récupérer le no de la ligne
    Bonjour,

    Tu peux essayer ce code:dans l'exemple, la valeur recherchée est 7. Le numéro de la ligne est récupéré dans la variable nolig.
    bon courage

    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
    valeur_cherchée = 7
        Columns(1).Select
        With Worksheets(1).Range("a1:a65000")
        Set c = .Find("" & valeur_cherchée, LookIn:=xlValues)
        If c Is Nothing Then
            GoTo pas_trouv
            Else
            Do
                firstAddress = c.Address
                Range(c.Address).Select
                nolig = ActiveCell.Row
                Rows("" & nolig).Select
                GoTo trouv
            Loop
        End If
    trouv:
    pas_trouv:
     
    End With
     
    End Sub

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2008
    Messages : 106
    Points : 58
    Points
    58
    Par défaut
    Bonjour Pascjdb!

    Un très gros merci pour ce code! Ça fonctionne très bien!

    Voici donc comment je l'ai adapté:

    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
    Private Sub btOK_Click()
    Dim derlig As Long
    Dim feuilSuivi As Worksheet
    Dim rep As String, NoPost As String, VariableMSG As String, valeur_cherchée As String
    Dim c As Range
     
    Set feuilSuivi = Sheets("Liste Demande de projet")
    valeur_cherchée = cbxNoDDP.Value
    With feuilSuivi.Range("a1:a65000")
        Set c = .Find("" & valeur_cherchée, LookIn:=xlValues)
    feuilSuivi.Range(c.Address).Select
    derlig = ActiveCell.Row
     
    If cbxAtelier.Value = "" Then
    MsgBox "Veuillez choisir un atelier"
    Else
     
    feuilSuivi.Cells(derlig, 2).Value = tbxInitiateur.Value
    feuilSuivi.Cells(derlig, 3).Value = date1
    ...
    Parcontre, j'ai encore un petit problème... lors du lancement de mon formulaire, selon le NoDDP j'initialise les valeurs des combobox en faisant des recherches dans ma feuille
    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tbxInitiateur.Value = Application.WorksheetFunction.VLookup(cbxNoDDP.Value, Sheets("Liste Demande de projet").Range("A3:E385"), 2, 0)
    Mon problème est que j'ai des Date and Time Picker et que je ne suis pas capable d'aller récupérer la valeur inscrite dans ma cellule pour initialiser la valeur du DTP... En fait, la valeur que je récupère ne semble pas compatible avec DTP.value... donc "DTP.value = résultat d'un vlookup" est invalide

    As-tu une idée de comment procéder??
    Merci encore de ton aide!!!

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2008
    Messages : 106
    Points : 58
    Points
    58
    Par défaut
    J'ai finalement trouvé!

    J'oubliais de changer de page de mon multipage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    If Application.WorksheetFunction.VLookup(cbxNoDDP.Value, Sheets("Liste Demande de projet").Range("A3:V500"), 16, 0) = 0 Then
    MultiPage1.Value = 3
    DTPSignChef.Value = Now
    MultiPage1.Value = 0
    Else
    MultiPage1.Value = 3
    DTPSignChef.Value = Application.WorksheetFunction.VLookup(cbxNoDDP.Value, Sheets("Liste Demande de projet").Range("A3:V500"), 16, 0)
    MultiPage1.Value = 0
    End If
    Ça fonctionne!
    J'ai une autre questions, mais je vais ouvrire une autre discussion à ce sujet.

    Merci beaucoup et bonne journée!
    Geneviève

  5. #5
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonsoir,
    Une remarque concernant tes codes Lufia
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    If Application.WorksheetFunction.VLookup(cbxNoDDP.Value, Sheets("Liste Demande de projet").Range("A3:V500"), 16, 0) = 0 Then
    MultiPage1.Value = 3
    DTPSignChef.Value = Now
    MultiPage1.Value = 0
    Else
    MultiPage1.Value = 3
    DTPSignChef.Value = Application.WorksheetFunction.VLookup(cbxNoDDP.Value, Sheets("Liste Demande de projet").Range("A3:V500"), 16, 0)
    MultiPage1.Value = 0
    End If
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    MultiPage1.Value = 3
    If Application.WorksheetFunction.VLookup(cbxNoDDP.Value, Sheets("Liste Demande de projet").Range("A3:V500"), 16, 0) = 0 Then
      DTPSignChef.Value = Now
    Else
      DTPSignChef.Value = Application.WorksheetFunction.VLookup(cbxNoDDP.Value, Sheets("Liste Demande de projet").Range("A3:V500"), 16, 0)
    End If
    MultiPage1.Value = 0
    laquelle est moins gourmande en lignes de code?
    tu te retrouve facilement avec des centaines de lignes
    ou bien,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    D=Application.WorksheetFunction.VLookup(cbxNoDDP.Value, Sheets("Liste Demande de projet").Range("A3:V500"), 16, 0)
    MultiPage1.Value = 3
    If D = 0 Then
      DTPSignChef.Value = Now
    Else
      DTPSignChef.Value = D
    End If
    MultiPage1.Value = 0
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2008
    Messages : 106
    Points : 58
    Points
    58
    Par défaut
    Bonjour mercatog!

    Meric beaucoup pour ces conseils! Je dois avoué que présentement, mon but est seulement de faire fonctionner mes codes! Je dois toutefois commencer à penser à alleger mes codes lorsque je les crée plutot que d'y faire du ménage après!

    Je vais très certainement utiliser ta suggestion!

    Merci encore!
    Geneviève

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/04/2015, 11h52
  2. Macro de recherche selon critères dans tableau excel
    Par koodbook dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/03/2013, 14h43
  3. Sélection ligne complète avec recherche dans tableau
    Par Dralex dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/12/2010, 08h32
  4. Lire ligne puis stockage dans tableau
    Par niko40 dans le forum C++
    Réponses: 9
    Dernier message: 03/04/2006, 23h01
  5. Recherche dans Tableau de point
    Par Platypus dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 30/08/2005, 18h29

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