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 sur plusieurs colonnes en vba [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué Avatar de Superpat9999
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2003
    Messages
    433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 433
    Points : 188
    Points
    188
    Par défaut Recherche sur plusieurs colonnes en vba
    Bonjour
    J'ai 2 onglets dans un classeur Excel : "Money" et "Ecriture".
    Dans "Ecriture" sur la colonne A, j'ai 6 données :

    Nom : Ecritures.jpg
Affichages : 1117
Taille : 38,1 Ko

    Je souhaite que ma réference se fasse sur les lignes 1 à 5
    Dans "Money", je souhaite trouver la ligne 16, sachant qu'il peut y avoir plusieurs dates identiques, la recherche se faisant sur une cinquantaine de lignes :

    Nom : Money.jpg
Affichages : 1142
Taille : 185,9 Ko

    Merci de votre aide
    Le mieux est l'ennemi du bien

  2. #2
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour Binns, bonjour le forum,

    Essaie comme ça :

    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
    Sub Macro2()
    Dim E As Worksheet 'déclare la variable E (onglet Écriture)
    Dim M As Worksheet 'déclare la variable M (onglet Money)
    Dim TV As Variant 'déclare la variable TV (Tableau ds Valeurs)
    Dim DE As Date 'déclare la variable DE (Date Écriture)
    Dim L As String 'déclare la variable L (Libellé)
    Dim P As String 'déclare la variable P (Payement)
    Dim V As Double 'déclare la variable V (Valeur)
    Dim DM As Date 'déclare la variable DM (Daye Money)
    Dim Li As Integer
     
    Set M = Worksheets("Money") 'définit l'onglet M
    Set E = Worksheets("Écriture") 'définit l'onglet E
    DE = DateSerial(Year(E.Range("A1").Value), Month(E.Range("A1").Value), Day(E.Range("A1").Value)) 'définit la date DE
    L = E.Range("A2").Value 'définit le libellé L
    P = E.Range("A3").Value 'définit le payement P
    V = E.Range("A4").Value 'définit la valeur V
    TV = M.Range("A10").CurrentRegion 'définit le tableau des valeurs TV
    For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
        DM = DateSerial(Year(TV(I, 1)), Month(TV(I, 1)), Day(TV(I, 1))) 'définit la date DM
        'si les données corresponde, définit la ligne LI (= I + 9 car le tableau commence à la ligne 10), sort de la boucle
        If DM = DE And TV(I, 2) = L And TV(I, 3) = P And IIf(TV(I, 4) <> "", TV(I, 4) = V, TV(I, 5) = V) Then Li = I + 9: Exit For
    Next I 'prochaine boucle de la ligne
    If Li = 0 Then MsgBox "Données non trouvées !": Exit Sub 'si aucune correspondance, message, sort de la procédure
    M.Activate 'active l'onglet M
    M.Rows(Li).Select 'sélectionne la ligne LI de l'onglet M
    End Sub
    Attention ! dans le Payement il y a des espaces. Il faut qu'il y en ai autant dans les deux onglets...
    À plus,

    Thauthème

    Je suis Charlie

  3. #3
    Membre habitué Avatar de Superpat9999
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2003
    Messages
    433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 433
    Points : 188
    Points
    188
    Par défaut
    Merci beaucoup Thautheme,
    C'est parfait, tout fonctionne correctement.
    Le mieux est l'ennemi du bien

  4. #4
    Membre habitué Avatar de Superpat9999
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2003
    Messages
    433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 433
    Points : 188
    Points
    188
    Par défaut
    Bonjour,
    Thautheme, j'ai légèrement modifié ton code car il ne trouvait pas de correspondance lorsque la ligne débit était vide.
    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
    Sub Compare1()
    Dim E As Worksheet 'déclare la variable E (onglet Écriture)
    Dim M As Worksheet 'déclare la variable M (onglet Money)
    Dim TV As Variant 'déclare la variable TV (Tableau ds Valeurs)
    Dim DE As Date 'déclare la variable DE (Date Écriture)
    Dim L As String 'déclare la variable L (Libellé)
    Dim P As String 'déclare la variable P (Payement)
    Dim D As Double 'déclare la variable D (Valeur)
    Dim C As Double 'déclare la variable C (Valeur)
    Dim DM As Date 'déclare la variable DM (Daye Money)
    Dim Li As Integer
    Dim i As Integer
    Dim Rng As Range
    Dim FinLig As Integer
    Set M = Worksheets("Money") 'définit l'onglet M
    Set E = Worksheets("Écriture") 'définit l'onglet E
     
    DE = DateSerial(Year(E.Range("A1").Value), Day(E.Range("A1").Value), Month(E.Range("A1").Value)) 'définit la date DE inversé
    L = E.Range("A2").Value 'définit le libellé L
    P = E.Range("A3").Value 'définit le payement P
    D = E.Range("A4").Value 'définit la valeur D
    C = E.Range("A5").Value 'définit la valeur C
    TV = M.Range("A10").CurrentRegion 'définit le tableau des valeurs TV
     
    For i = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
        DM = DateSerial(Year(TV(i, 1)), Month(TV(i, 1)), Day(TV(i, 1))) 'définit la date DM
        'si les données correspondent, définit la ligne LI (= I + 9 car le tableau commence à la ligne 10), sort de la boucle
        'si V est pas vide
        If TV(i, 4) <> "" Then
        If DM = DE And TV(i, 2) = L And TV(i, 3) = P And IIf(TV(i, 4) <> "", TV(i, 4) = D, TV(i, 5) = D) Then Li = i + 9: Exit For
        Else
        If DM = DE And TV(i, 2) = L And TV(i, 3) = P And IIf(TV(i, 5) <> "", TV(i, 5) = C, TV(i, 6) = C) Then Li = i + 9: Exit For
        End If
    Next i 'prochaine boucle de la ligne
    If Li = 0 Then MsgBox "Données non trouvées !": Exit Sub 'si aucune correspondance, message, sort de la procédure
    M.Activate 'active l'onglet M
    M.Rows(Li).Select 'sélectionne la ligne LI de l'onglet M
    Range("A" & Li).Select
    If ActiveCell.Row = "11" Then
        Debug.Print ActiveCell.Row
        Debug.Print "Première ligne, Aucune nouvelle rentrée, fin du programme"
        MsgBox "Aucune nouvelle rentrée, fin du programme"
        End
    Else
        Debug.Print ActiveCell.Row
        MsgBox "Trouvé, autre ligne, on supprime : " & ActiveCell.Row
    End If
    End Sub
    Maintenant, il reste un problème avec :
    Nom : Money 1.jpg
Affichages : 1098
Taille : 19,8 Ko
    C'est sur la date, car le fichier "Ecriture" provient d'un fichier Texte, un extrait ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        For Colonne = 1 To 6                        '// boucle sur les colonnes
            str = Cells(Ligne, Colonne)
            Print #iFile, str                       '// écrire dans le fichier
        Next Colonne
    Fichier Ecriture :
    Nom : Money 2.jpg
Affichages : 1033
Taille : 13,6 Ko

    Si je remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DE = DateSerial(Year(E.Range("A1").Value), Day(E.Range("A1").Value), Month(E.Range("A1").Value)) 'définit la date DE inversé
    'DE = DateSerial(Year(E.Range("A1").Value), Month(E.Range("A1").Value), Day(E.Range("A1").Value)) 'définit la date DE Thautheme
    Le première ligne est trouvée, mais pas les autres. Si je laisse votre code, les autres sont trouvées mais pas la première.

    Merci de me dépanner une fois encore... Je trouve le code très "Elégant" !
    Le mieux est l'ennemi du bien

  5. #5
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Re,

    Pour le premier point le problème ne venait pas du fait que la colonne Débit soit vide (car c'était pris en compte avec le IIf), mais du fait que la valeur dans Écriture est numérique tandis que dans Money c'est du texte (avec le point comme séparateur décimal), J'ai modifié le code et ça semble marcher correctement.
    Quant au second point la syntaxe de DateSerial ne peut pas être modfidiée c'est toujours : DateSerial(Year(une_date), Month(une_date), Day(une_date). J'ai utilisé exprès DateSerial pour éviter les inversions jour/mois. Aussi je ne comprends pas ce que tu veux dire par : Le première ligne est trouvée, mais pas les autres. Si je laisse votre code, les autres sont trouvées mais pas la première.

    Essaie ce nouveau 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
    Sub Compare()
    Dim M As Worksheet 'déclare la variable M (onglet Money)
    Dim E As Worksheet 'déclare la variable E (onglet Écriture)
    Dim DE As Date 'déclare la variable DE (Date Écriture)
    Dim L As String 'déclare la variable L (Libellé)
    Dim P As String 'déclare la variable P (Payement)
    Dim VT As String  'déclare la variable VT (Valeur en Texte)
    Dim TV As Variant 'déclare la variable TV (Tableau ds Valeurs)
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim DM As Date 'déclare la variable DM (Date Money)
    Dim LI As Integer 'déclare la variable LI (LIgne)
     
    Set M = Worksheets("Money") 'définit l'onglet M
    Set E = Worksheets("Écriture") 'définit l'onglet E
    DE = DateSerial(Year(E.Range("A1").Value), Month(E.Range("A1").Value), Day(E.Range("A1").Value)) 'définit la date DE
    L = E.Range("A2").Value 'définit le libellé L
    P = E.Range("A3").Value 'définit le payement P
    VT = Replace(E.Range("A4").Value, ",", ".") 'définit la valeur VT (texte avec le point comme séparateur décimal
    TV = M.Range("A10").CurrentRegion 'définit le tableau des valeurs TV
    For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
        DM = DateSerial(Year(TV(I, 1)), Month(TV(I, 1)), Day(TV(I, 1))) 'définit la date DM
        'si les données correspondent, définit la ligne LI (= I + 9 car le tableau commence à la ligne 10), sort de la boucle
        'le IIf fait que si la colonne "Débit" est vide, c'est la colonne "Crédit' qui est prise en compte
        If DM = DE And TV(I, 2) = L And TV(I, 3) = P And IIf(TV(I, 4) <> "", TV(I, 4) = VT, TV(I, 5) = VT) Then LI = I + 9: Exit For
    Next I 'prochaine boucle de la ligne
    If LI = 0 Then MsgBox "Données non trouvées !": Exit Sub 'si aucune correspondance, message, sort de la procédure
    M.Activate 'active l'onglet M
    M.Rows(LI).Select 'sélectionne la ligne LI de l'onglet M
    End Sub
    À plus,

    Thauthème

    Je suis Charlie

  6. #6
    Membre habitué Avatar de Superpat9999
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2003
    Messages
    433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 433
    Points : 188
    Points
    188
    Par défaut
    Bonsoir Thautheme,
    Merci de prendre le temps de me répondre.
    Dans ta dernière macro, plus rien n'est trouvé !
    La mienne fonctionne à moitié, je pense que le fait que l'onglet écriture soit inscrit depuis un fichier texte, appelé avec Line Input ramène une date au format US, ce qui fait que cela peut fonctionner certaines fois et pas d'autres.
    Sur ta 1ère macro, j'ai essayé 5 dates, les 4 premières passent et la 5ème ne trouve rien.
    14/08/2019
    14/08/2019
    13/08/2019
    13/08/2019
    12/08/2019, ici on ne trouve rien car écriture me marque 08/12/2019.
    Bien que le fichier texte m'indique :
    12/08/2019
    Le passage se fait donc mal.
    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
    Sub Lire_Fichier_Texte()
        ' Utilisation de la commande LINE INPUT qui lit une ligne au complet
        ' Problème de réécriture sur la date,
        Dim I As Long, ar
        Dim sRepertoire As String, sNomFichier As String
        Dim iFile As Integer
        Dim Data As String
        Dim Entier As Integer
        Dim Res As Integer
        Dim ws As Worksheet
        Dim Pos As Integer
        Dim Strlen As Integer
     
        sRepertoire = "D:\Dropbox\Money\" '// doit terminer avec un "\"
        sNomFichier = "MonMoney.txt" '// nom du fichier
     
            Set ws = Sheets("Écriture") '// feuille où écrire les résultats
            ws.UsedRange.Clear '// vider le contenu de la feuille
            Set E = Worksheets("Écriture") 'définit l'onglet E
            E.Activate 'active l'onglet M
            'Ouvrir le 1er fichier
            iFile = FreeFile
            Open sRepertoire & sNomFichier For Input As #iFile
     
            'Lecture du fichier et écriture dans Excel
            I = 1
            Do Until EOF(iFile)
     
                Line Input #iFile, Data
                ws.Cells(I, 1) = Data
                I = I + 1
            Loop
        Close #iFile '// Fermer le fichier
    End Sub
    Le mieux est l'ennemi du bien

  7. #7
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Re,

    Je sais que c'est contraire à la règle dans ce forum, mais sans e fichier qui va bien je vois mal comment t'aider davantage.
    À plus,

    Thauthème

    Je suis Charlie

  8. #8
    Membre habitué Avatar de Superpat9999
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2003
    Messages
    433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 433
    Points : 188
    Points
    188
    Par défaut
    Thautheme,
    Tu as raison.
    Cette nuit j'ai pensé à ce problème de date et je l'ai résolu ce matin en mettant : "dd/mmmm/yyyy" comme format de date dans mon fichier d'écriture. Il n'y a plus de problème de ce coté.
    Et j'ai aussi trouvé sur le forum que le problème était récurent https://www.developpez.net/forums/d1...t-format-date/
    Et ta 1ère macro avec ma modification fonctionne correctement pour tout les cas. Pas ta dernière, mais ce n'est pas important car il y en a une des 2 qui fonctionne.
    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
    Sub Compare1()
    Dim E As Worksheet 'déclare la variable E (onglet Écriture)
    Dim M As Worksheet 'déclare la variable M (onglet Money)
    Dim TV As Variant 'déclare la variable TV (Tableau ds Valeurs)
    Dim DE As Date 'déclare la variable DE (Date Écriture)
    Dim L As String 'déclare la variable L (Libellé)
    Dim P As String 'déclare la variable P (Payement)
    Dim D As Double 'déclare la variable D (Valeur)
    Dim C As Double 'déclare la variable C (Valeur)
    Dim DM As Date 'déclare la variable DM (Daye Money)
    Dim Li As Integer
    Dim I As Integer
    Dim Rng As Range
    Dim FinLig As Integer
    Set M = Worksheets("Money") 'définit l'onglet M
    Set E = Worksheets("Écriture") 'définit l'onglet E
     
    DE = DateSerial(Year(E.Range("A1").Value), Month(E.Range("A1").Value), Day(E.Range("A1").Value)) 'définit la date DE Thautheme
     
    L = E.Range("A2").Value 'définit le libellé L
    P = E.Range("A3").Value 'définit le payement P
    D = E.Range("A4").Value 'définit la valeur D
    C = E.Range("A5").Value 'définit la valeur C
    TV = M.Range("A10").CurrentRegion 'définit le tableau des valeurs TV
     
    For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
        DM = DateSerial(Year(TV(I, 1)), Month(TV(I, 1)), Day(TV(I, 1))) 'définit la date DM
        'si les données correspondent, définit la ligne LI (= I + 9 car le tableau commence à la ligne 10), sort de la boucle
        'si V est pas vide
        If TV(I, 4) <> "" Then
        If DM = DE And TV(I, 2) = L And TV(I, 3) = P And IIf(TV(I, 4) <> "", TV(I, 4) = D, TV(I, 5) = D) Then Li = I + 9: Exit For
        Else
        If DM = DE And TV(I, 2) = L And TV(I, 3) = P And IIf(TV(I, 5) <> "", TV(I, 5) = C, TV(I, 6) = C) Then Li = I + 9: Exit For
        End If
    Next I 'prochaine boucle de la ligne
    If Li = 0 Then MsgBox "Données non trouvées !": Exit Sub 'si aucune correspondance, message, sort de la procédure
    M.Activate 'active l'onglet M
    M.Rows(Li).Select 'sélectionne la ligne LI de l'onglet M
    Range("A" & Li).Select
    If ActiveCell.Row = "11" Then
        Debug.Print ActiveCell.Row
        Debug.Print "Première ligne, aucune nouvelle rentrée, fin du programme"
        MsgBox "Première ligne, aucune nouvelle rentrée, fin du programme"
        End
    Else
        Debug.Print ActiveCell.Row
        MsgBox "Trouvé, autre ligne, on supprime : " & ActiveCell.Row
    End If
    End Sub
    Pour moi, le problème est résolu et je te remercie de ta patience et de ton aide.
    Le mieux est l'ennemi du bien

  9. #9
    Membre habitué Avatar de Superpat9999
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2003
    Messages
    433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 433
    Points : 188
    Points
    188
    Par défaut
    Bonjour Thautheme,
    Cette nuit j'ai repensé à ta programmation et me suis dit qu'une macro aussi élégante ne pouvait pas se tromper, aussi ai-je regardé la partie IIf et trouvé qu'elle ne pouvait conclure à la résolution.
    J'ai modifié le code en déclarant la variable crédit et en la réintroduisant dans le IIf.
    Maintenant tout est OK et je peux mettre résolu.
    Merci de ta participation.

    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
    Sub CompareOrigine1()
    Dim E As Worksheet 'déclare la variable E (onglet Écriture)
    Dim M As Worksheet 'déclare la variable M (onglet Money)
    Dim TV As Variant 'déclare la variable TV (Tableau ds Valeurs)
    Dim DE As Date 'déclare la variable DE (Date Écriture)
    Dim L As String 'déclare la variable L (Libellé)
    Dim P As String 'déclare la variable P (Payement)
    Dim D As Double 'déclare la variable D (Valeur Débit)
    Dim C As Double 'déclare la variable C (Valeur Crédit)
    Dim DM As Date 'déclare la variable DM (Daye Money)
    Dim LI As Integer
     
    Set M = Worksheets("Money") 'définit l'onglet M
    Set E = Worksheets("Écriture") 'définit l'onglet E
    DE = DateSerial(Year(E.Range("A1").Value), Month(E.Range("A1").Value), Day(E.Range("A1").Value)) 'définit la date DE
    L = E.Range("A2").Value 'définit le libellé L
    P = E.Range("A3").Value 'définit le payement P
    D = E.Range("A4").Value 'définit la valeur Débit
    C = E.Range("A5").Value 'définit la valeur Crédit
    TV = M.Range("A10").CurrentRegion 'définit le tableau des valeurs TV
    For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
        DM = DateSerial(Year(TV(I, 1)), Month(TV(I, 1)), Day(TV(I, 1))) 'définit la date DM
        'si les données corresponde, définit la ligne LI (= I + 9 car le tableau commence à la ligne 10), sort de la boucle
        If DM = DE And TV(I, 2) = L And TV(I, 3) = P And IIf(TV(I, 4) <> "", TV(I, 4) = D, TV(I, 5) = C) Then LI = I + 9: Exit For
    Next I 'prochaine boucle de la ligne
    If LI = 0 Then MsgBox "Données non trouvées !": Exit Sub 'si aucune correspondance, message, sort de la procédure
    M.Activate 'active l'onglet M
    M.Rows(LI).Select 'sélectionne la ligne LI de l'onglet M
    End Sub
    Le mieux est l'ennemi du bien

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

Discussions similaires

  1. Macro VBA recherche sur un colonne
    Par chacalpuant1987 dans le forum Excel
    Réponses: 6
    Dernier message: 11/06/2015, 15h33
  2. faire une recherche sur la colonne d'une liste annuaire
    Par gracouille dans le forum SharePoint
    Réponses: 1
    Dernier message: 13/10/2008, 17h06
  3. filtre sur plusieurs colonnes en vba
    Par caloumaya dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/05/2007, 14h05
  4. [VBA/Excel]recherche sur 2 colonnes
    Par rodrigue62 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/03/2007, 17h35
  5. [VBA-E] Recherche sur plusieurs colonnes ?
    Par Kokito dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 14/11/2006, 13h27

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