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 :

Méthode Find qui gère mal le texte [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut Méthode Find qui gère mal le texte
    Bonjour,

    J'ai un soucis avec ma méthode Find. En effet, j'ai des cellules qui se ressemblent.

    Par exemple, j'ai : "Heure d'arrivée" ; "Heure de sortie" ; "Code sortie" ...

    valeur correspond à la variable recherchée dans la plage de donnée (qui est sur une colonne)
    trouvee correspond à une précédente variable recherchée dans une autre feuille.

    Aperçu du 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
     
     
            Set valeur = .Find(What:="Heure d'arrivée", LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 2)
                If valeur Is Nothing Then
                GoTo a2
            Else:
                valeur = trouvee.Offset(0, -2)
            End If
    a2:
     
            Set valeur = .Find(What:="Heure de sortie", LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 2)
                If valeur Is Nothing Then
                GoTo a3
            Else:
                valeur = trouvee.Offset(0, -2)
            End If
    a3:
     
            Set valeur = .Find(What:="Code sortie", LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 2)
                If valeur Is Nothing Then
                GoTo a4
            Else:
                valeur = trouvee.Offset(0, -1)
            End If
    a4:
    Il va me renseigner dans la cellule Heure d'entrée, l'heure de sortie.
    De même pour Code sortie qui remplacera Heure de sortie.


    Je voudrais simplement qu'il prenne tout le contexte pour qu'il n'y est pas cette erreur.

    Je vous en remercie par avance. Cordialement,
    Arnaud

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        Set Valeur = .Find(What:="Heure d'arrivée", LookIn:=xlValues, LookAt:=xlWhole)
        If Not Valeur Is Nothing Then
            Valeur.Offset(, 2) = Trouvee.Offset(, -2)
        Else
            Set Valeur = .Find(What:="Heure de sortie", LookIn:=xlValues, LookAt:=xlWhole)
            If Not Valeur Is Nothing Then
                Valeur.Offset(, 2) = Trouvee.Offset(, -2)
            Else
                Set Valeur = .Find(What:="Code sortie", LookIn:=xlValues, LookAt:=xlWhole)
                If Not Valeur Is Nothing Then
                    Valeur.Offset(, 2) = Trouvee.Offset(, -1)
                End If
            End If
        End If
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Merci mais cela ne marche pas.

    Il ne rempli que le premier champs. j'ai essayé d'enlever les Else mais le problème reste le même.

    D'où peut venir le problème ?

  4. #4
    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
    Le code que j'ai proposé ne va surement pas donner le résultat consenti puisque l'explication de la problématique était sommaire et personnellement je n'ai pas deviné la disposition de ton fichier.

    Donc, je devais préciser que l'extrait était simplement pour éviter les goto qui assombrissent ton code
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    D'accord, Merci, c'est vrai que le code est moins lourd.

    Et veuillez m’excuser, je vais détailler :

    J’ai dans une première feuille un tableau dans lequel je cherche une valeur dans une colonne.
    C’est un code unique et il n’y a pas de doublons.
    Cette valeur correspond à trouvee

    Puis j’ai dans une seconde feuille des termes dans la première colonne. Ces termes peuvent être modifiés dans le sens où ils peuvent être présents ou non.
    Ce que je veux faire, c’est : s’il y a présence du terme,
    alors prendre la valeur correspondante située dans la première feuille et la décaler de deux colonnes par rapport au terme.
    Si le terme n'est pas présent, alors ne rien faire.

  6. #6
    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
    Qu’entends tu par "termes" de la seconde feuille.

    Explicitement, un fichier exemple est nécessaire quand l'explication reste sommaire pour quelqu'un qui n'a pas le fichier sous les yeux.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Je vous mets un fichier joint avec plus de précisions.

    méthode_find.xlsm

    Encore merci pour votre aide !

  8. #8
    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
    Sans commentaire, voici le code tel que compris
    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
    Private Sub txtSortie_Change()
     
    optSortie = Me.txtSortie <> ""
    optEntree = Me.txtSortie = ""
    End Sub
     
    Private Sub cmdImprimer_Click()
    Dim c As Range, v As Range, w As Range, Sce As Range
    Dim Ftickets As Worksheet, Fnoyau As Worksheet
    Dim Dest As Integer
    Dim Txt As String
    Dim N As Long
     
    Set Fnoyau = ThisWorkbook.Worksheets("Noyau")
    Set Ftickets = ThisWorkbook.Worksheets("Tickets")
     
    With Fnoyau
        .Visible = True
     
        If optEntree = True Then
            Set Sce = Ftickets.Columns(4)
            Dest = 1
            Txt = Me.txtEntree.Value
        Else
            Set Sce = Ftickets.Columns(6)
            Dest = 4
            Txt = Me.txtSortie.Value
        End If
     
        Set c = Sce.Find(Txt, LookIn:=xlValues, LookAt:=xlWhole)
        If Not c Is Nothing Then
            N = .Cells(.Rows.Count, Dest).End(xlUp).Row
     
            For Each v In .Cells(3, Dest).Resize(N - 2)
                Set w = Ftickets.Rows(5).Find(v, LookIn:=xlValues, LookAt:=xlWhole)
                If Not w Is Nothing Then
                    v.Offset(, 2) = Intersect(c.EntireRow, w.EntireColumn)
                    Set w = Nothing
                End If
            Next v
            Set c = Nothing
        Else
            MsgBox "Le code recherché n'existe pas", vbOKOnly, "Erreur"
        End If
    End With
    Set Fnoyau = Nothing
    Set Ftickets = Nothing
     
    Unload Me
    End Sub

    Sinon, pas besoin de créer 2 textbox (entrée/ sortie) avec les 2 optionsbutton une seule textebox suffirait
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup, c'est génial !

    C'est parfait et même mieux que ce que je désirais.

    Merci de m'avoir fait découvrir la fonction "Intersect"

    J'ai encore du mal à déchiffrer certains éléments du code :

    • N = .Cells(.Rows.Count, Dest).End(xlUp).Row
    • .Cells(3, Dest).Resize(N - 2)



    Qu'est-ce qu'ils signifient ?

    Encore merci !

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

Discussions similaires

  1. Tri décroissant qui gère différement nombre et texte
    Par cedrick21 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 29/01/2013, 11h09
  2. Find qui find mal
    Par Daranc dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/10/2009, 09h00
  3. Méthode getSize() qui ne marche pas
    Par mush_H dans le forum Agents de placement/Fenêtres
    Réponses: 15
    Dernier message: 20/03/2005, 01h29
  4. [SQL] une requete qui fait mal a la tete
    Par MailOut dans le forum Langage SQL
    Réponses: 7
    Dernier message: 07/02/2005, 16h22

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