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 :

Methode Find un peu particulière [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2015
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2015
    Messages : 48
    Par défaut Methode Find un peu particulière
    Bonjour à tous,

    Je sollicite votre aide car malgré mes recherches sur le forum je n'arrive pas à comprendre comment utiliser la méthode find.
    En effet, je souhaiterais comparer une lignes de dates avec une plage de cellules qui contient aussi des dates pour qu'à l'intersection entre la ligne et la colonne soit affiché ladite date.
    Etant donné que j'ai un grand nombre de dates à traiter, je me suis dit que cette méthode était le moyen d'avoir une macro très rapide.

    En espérant solliciter votre attention et votre aide,

    Vbamateur.
    (voici ci dessous une de mes tentative infructueuse que je considérais pas si fausse que ça. Le soucis est cependant que je ne traite que la colonne B alors que je voudrais le faire avec tout le petit tableau...)

    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 xx()
     
    Dim r, rech As Range
    Dim LUser As Integer
    LUser = 4
     
    Do
    passageligne2:
        LUser = LUser + 1
        If ActiveWorkbook.Sheets("feuil1").Range("B" & LUser).Value = "" Then Exit Do
     
            rech = ActiveWorkbook.Sheets("feuil1").Range("B" & LUser).Value 'Valeur recherchée
            Set r = Sheets("feuil1").Range("F4:V4").Find(rech2, xlByRows, LookIn:=xlValues, LookAt:=xlWhole) 'plage ou j'effectue la recherche'
            If r Is Nothing Then
            GoTo passageligne2
            Else
            'Si la ligne existe, transfert des informations dans la cellule souhaitée'
            ActiveWorkbook.Sheets("feuil1").Cells(LUser, r.Columns).Value = ActiveWorkbook.Sheets("feuil1").Range("B" & LUser).Value
            End If
     Loop
     
     
    End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    Salut,

    Problème:
    dans ton classeur feuil1, ton tableau commence en C et non en B comme dans ton code....

    Il serait bien d'expliquer plus succinctement ce que tu veux car tu veux comparé quoi à quoi exactement???
    La cellule C5 avec la plage de cellule F5 à V5 puis C6 avec F6 à V6
    ou
    Le "tableau" C5:E5

    Sinon avec ce code je ne traite que la colonne C5:C11
    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
    Sub xx()
     
    'Dim r
    Dim rech 'As Range
    Dim LUser As Integer
    LUser = 4
     
    Do
    passageligne2:
        LUser = LUser + 1
            With ActiveWorkbook.Sheets("Feuil1")
                If .Range("C" & LUser).Value = "" Then Exit Do
     
                    rech = .Range("C" & LUser).Value 'Valeur recherchée
     
                    Set r = .Range("F4:V4").Find(rech, LookIn:=xlValues, LookAt:=xlWhole) 'plage ou j'effectue la recherche'
                    ' Attention "r" renvoi la valeur recherchée et non l'adresse de la cellule donc pas possible dans
                    '.Cells(LUser, r.Columns).Value = .Range("B" & LUser).Value
     
                    'Renvoi la cellule
                    adresse = r.Address
     
                    If r Is Nothing Then
                    GoTo passageligne2
                    Else
     
                    'Si la ligne existe, transfert des informations dans la cellule souhaitée'
                    '.Cells(LUser, numCol).Value = .Range("B" & LUser).Value
                    .Range("B" & LUser) = CDate(r)
                    End If
            End With
     Loop
     
     
    End Sub
    A+

  3. #3
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2015
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2015
    Messages : 48
    Par défaut
    Bonjour,

    Tout d'abord, merci pour ton aide qui me met sur la voie de la solution.
    Pour ce qui est de la macro que je souhaite réaliser, il s'agit de trouver le"doublon" de la colonne C dans la ligne "F4:V4" et de mettre à l'intersection entre la ligne et la colonne correspondante cette date. Cela me semble clair mais j'ai quand même un doute alors je joins mon fichier mis à jour avec ta macro qui fonctionne et qui réalise ce que je souhaite. Le fait est que lorsque je souhaite l'adapter à mon tableau qui est bien plus grand, il m'affiche au niveau de "adresse=r.address" le message d'erreur d'exécution "variable objet ou variable bloc with non définie". Aurais-tu une piste concernant cette erreur? (je suppose que ça vient du terme "adresse" qui devrait être défini mais je doute)

    Bien cordialement,

    Vbamateur. Classeur1.xlsm

  4. #4
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    re,

    Il y a une erreur dans ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If .Range("A" & LUser).Value = "" Then Exit Do
    tu testes la range "A" alors quelle est constamment vide donc tu exit à chaque fois, j'imagine que tu veux tester la range "C"???

    il m'affiche au niveau de "adresse=r.address" le message d'erreur d'exécution "variable objet ou variable bloc with non définie".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Si la ligne existe, transfert des informations dans la cellule souhaitée'
                    .Cells(LUser, r.Column).Value = CDate(r)
    Je n'ai pas cette erreur si tu as un tableau plus grand il faut que je vois d'où vient le problème, mais avec celui fourni ça fonctionne!!!!!

    Par contre il y a un problème autre, ton tableau est-il évolutif car si oui a chaque fois que tu lanceras la macro il recommencera depuis le début...Dans le cas contraire si c'est pour une utilisation unique alors pas de problème???

    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
    Sub xx()
     
    Dim r As Variant
    Dim rech As Variant
    Dim LUser As Integer
    LUser = 4
     
    Do
    passageligne2:
        LUser = LUser + 1
            With ActiveWorkbook.Sheets("Feuil1")
                'Mis en commentaire car Range"A" en test alors qu'elle est vide????
                'If .Range("A" & LUser).Value = "" Then Exit Do
                If .Range("C" & LUser).Value = "" Then GoTo passageligne2:
     
                    rech = .Range("C" & LUser).Value 'Valeur recherchée
     
                    Set r = .Range("F4:V4").Find(rech, LookIn:=xlValues, LookAt:=xlWhole) 'plage ou j'effectue la recherche'
                    ' Attention "r" renvoi la valeur recherchée et non l'adresse de la cellule donc pas possible dans
                    '.Cells(LUser, r.Columns).Value = .Range("B" & LUser).Value
     
                    'Renvoi la cellule
                    adresse = r.Address
     
                    If r Is Nothing Then
                    GoTo passageligne2
                    Else
     
                    'Si la ligne existe, transfert des informations dans la cellule souhaitée'
                    .Cells(LUser, r.Column).Value = CDate(r)
                    Debug.Print r.Column
                    End If
            End With
     Loop
     
     
    End Sub
    Redit moi

  5. #5
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2015
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2015
    Messages : 48
    Par défaut
    En effet, pour ce qui est de la colonne A il est vrai que ce n'était pas celle-ci qui était visée mais plutôt la B qui contient une donnée.
    Je comprends votre interrogation sur la taille du fichier et j'ai justement essayé avec un plus grand tableau sur le même fichier et cela fonctionne comme par magie... Toutefois sur mon fichier principal, la macro me met toujours la même erreur... Est-il possible de substituer le "adresse=r.address" par autre chose? Ou le définir en tant que string?

    Par ailleurs, l'utilisation n'est destinée qu'à se faire une seule fois lors de l'ouverture de la feuille mais ce soucis, je crois m'en être déjà occupé en amont et il n'y aura pas de problèmes. Si non, je pense que je viderais simplement toutes les cellules du tableau avant de débuter la macro.

    Correction:

    J'ai retiré le Adresse=r.address et modifié le format date de la ligne et de la colonne et ça fonctionne!! merci beaucoup! Cependant, étant donné que je l'ai retiré je m'attend à avoir des erreurs à venir à cause de ça...

  6. #6
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    Re,

    ça marche, donc résolu??

    Mais quand tu regardes bien le code le adresse=r.address, ne sert absolument à rien car on ne l'utilise pas dans la suite du code....

    A toi de nous dire

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

Discussions similaires

  1. Une requete un peu particulière ...
    Par ZiMammouth dans le forum Langage SQL
    Réponses: 6
    Dernier message: 24/02/2007, 17h27
  2. [VBA-E]methode find
    Par richou dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/03/2006, 12h28
  3. STL: les map et la methode find. que fait-elle?
    Par cokmes dans le forum SL & STL
    Réponses: 6
    Dernier message: 07/11/2005, 08h31
  4. methode find
    Par bachilbouzouk dans le forum ASP
    Réponses: 9
    Dernier message: 26/04/2005, 10h47
  5. [oracle 8][débutant] Sélection un peu particulière
    Par ken_survivant dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/11/2004, 09h10

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