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 date et extraire numéro ligne [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3
    Par défaut Recherche date et extraire numéro ligne
    Bonjour à tous.
    J'ai un problème lorsque je valide un formulaire d'un Userform. Je précise que je suis sous 2003.
    Le problème apparait lorsque "result" doit etre remplis avec la recherche.
    Merci d'avances pour vos préciseuses réponses.
    Aussi, le problème est apparus début de semaine, la semaine passée (même code) tout fonctionnais.


    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
    71
    72
    73
    74
    75
    Private Sub CommandButton1_Click()
    
    With Sheets("Productivité")
    
    Dim nomCherche As String
    nomCherche = Range("A2").Value /////// dans A2 nous trouverons une  date jj/mm/aaa
    Set result = ActiveSheet.Columns(44).Cells.Find(nomCherche, , xlValues) ////// dans col(44) nous trouverons une liste de date jj/mm/aaa
    If result Is Nothing Then
    MsgBox nomCherche
    MsgBox ("erreur")
    MsgBox result.Row
    Else
    z = result.Row
    MsgBox ("ok")
    End If
    
        If ComboBox2.Value = "Matin" Then
    Range("G" & z).Value = ComboBox1.Value
    Range("H" & z).Value = TextBox1.Value
    Range("I" & z).Value = TextBox16.Value
    Range("J" & z).Value = TextBox3.Value
    Range("k" & z).Value = TextBox4.Value
    Range("l" & z).Value = TextBox5.Value
    Range("m" & z).Value = TextBox6.Value
    Range("n" & z).Value = TextBox7.Value
    Range("o" & z).Value = TextBox8.Value
    Range("s" & z).Value = TextBox9.Value
    Range("t" & z).Value = TextBox10.Value
    Range("u" & z).Value = TextBox11.Value
    Range("y" & z).Value = TextBox15.Value
    Range("AE" & z).Value = ComboBox3.Value
    Range("AF" & z).Value = ComboBox4.Value
    Range("AG" & z).Value = ComboBox5.Value
    Range("AI" & z).Value = ComboBox6.Value
    Range("AH" & z).Value = ComboBox7.Value
    Range("AJ" & z).Value = ComboBox8.Value
    Range("AK" & z).Value = ComboBox9.Value
    Range("Al" & z).Value = ComboBox10.Value
    Range("Am" & z).Value = ComboBox11.Value
    Range("An" & z).Value = ComboBox12.Value
    Range("Ao" & z).Value = ComboBox13.Value
    
        Else
    j = z + 1
    Range("G" & j).Value = ComboBox1.Value
    Range("H" & j).Value = TextBox1.Value
    Range("I" & j).Value = TextBox16.Value
    Range("J" & j).Value = TextBox3.Value
    Range("k" & j).Value = TextBox4.Value
    Range("l" & j).Value = TextBox5.Value
    Range("m" & j).Value = TextBox6.Value
    Range("n" & j).Value = TextBox7.Value
    Range("o" & j).Value = TextBox8.Value
    Range("s" & j).Value = TextBox9.Value
    Range("t" & j).Value = TextBox10.Value
    Range("u" & j).Value = TextBox11.Value
    Range("y" & j).Value = TextBox15.Value
    Range("AE" & j).Value = ComboBox3.Value
    Range("AF" & j).Value = ComboBox4.Value
    Range("AG" & j).Value = ComboBox5.Value
    Range("AH" & j).Value = ComboBox6.Value
    Range("AI" & j).Value = ComboBox7.Value
    Range("AJ" & j).Value = ComboBox8.Value
    Range("AK" & j).Value = ComboBox9.Value
    Range("Al" & j).Value = ComboBox10.Value
    Range("Am" & j).Value = ComboBox11.Value
    Range("An" & j).Value = ComboBox12.Value
    Range("Ao" & j).Value = ComboBox13.Value
        End If
        Unload Me
        
        UserForm2.Hide
        End With
        
    End Sub

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    A première lecture, ton paramètre XLVALUES n'est pas bien placé n'est pas bien orthographié, il doit être en deuxième position dans la liste des paramètres, si tu ne les nommes pas. De plus, je t'invite à bien préciser tous les paramètres (notamment LookAt, car les paramètres non mentionnés sont ceux utilisés lors de la dernière recherche).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set result = ActiveSheet.Columns(44).Cells.Find(nomCherche, xlValues, xlWhole)
    [EDIT]Il doit être orthographié xlValue (=> déclaration des variables obligatoire dans les options du VBE pour éviter les méprises)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3
    Par défaut
    Bon désolé mais je n'arrive pas à résoudre le problème.
    Je met en ligne le fichier. mdp : root (le fichier fait 3mo100)
    Désolé pour le code très piquant pour les yeux
    erreur quand on valide le userform3 (ajout de calcul de productivité)
    Merci beaucoup
    http://www.partage-facile.com/JXRM5T..._2014.xls.html

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Dans ton code, tu utilises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Sheets("Productivité")
    , mais tu n'utilises pas l'objet dans ton code, par la suite.

    Plus loin dans le code, dans le bloc WITH, tu utilises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set result  = activesheet...
    Rien ne dit que tu es sur la feuille "Productivité"... C'est peut-être là que le bât commence à blesser...

    Tu devrais peut-être utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set result = worksheets("Productivité")...
    pour être certain que c'est bien sur cette feuille que tu recherches.

    Attention. Tu as corrigé UNE des lignes qui posaient problème, mais tu dois les corriger toutes. Vu que tu as plusieurs fois le même genre de recherche, tu aurais intérêt à factoriser tes procédures (créer un fonction qui recherche et appeler cette fonction à chaque fois que tu en as besoin).

    Prends l'habitude d'indenter ton code, c'est plus facile pour la lecture et la recherche d'erreurs. Prends l'habitude également de travailler avec des objets nommés, c'est beaucoup plus simple à lire et à écrire. Découple également l'interface des fonctions "de fond" (système des deux couches, voire des trois couches). Ce sera plus facile à maintenir. Pense aussi à déclarer tes variables (et impose-toi cette règle en cochant la case "déclaration des variables obligatoire" dans les options du VBE, et ajoute la ligne Option Explicit en tout début de chaque module existant).

    Bref, revois les fondamentaux de la programmation en VBA pour Excel ;-)

    Bon travail pour la suite.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Invité
    Invité(e)
    Par défaut Bonjour,
    Code Commentaire : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'je me permet de répondre sous forme de commentaire dans un programme
    'que veut dire ////// à en croire le texte qui suis on dirait bien un commentaire.
    'si la double barre de division est une syntaxe valide dans le compilateur C et dérivé, VBA en a cure!
    'et les doubler est un dialogue de sourd.
    'il faut s'intéressée à la bonne syntaxe.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut Robert

    Ce n'est pas faux, mais ce commentaire n'existe pas dans le code du fichier. Il a été ajouté lors de la rédaction du message... ;-)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Invité
    Invité(e)
    Par défaut Bonjou Pierre,
    Ok je n'est pas ouvert la pièce joint vue que c'était flagrant de sont post
    Dernière modification par AlainTech ; 12/07/2014 à 18h31. Motif: Suppression de la citation inutile

  8. #8
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Citation Envoyé par Nicoooo87 Voir le message
    Dim nomCherche As String
    nomCherche = Range("A2").Value /////// dans A2 nous trouverons une date jj/mm/aaa
    Set result = ActiveSheet.Columns(44).Cells.Find(nomCherche, , xlValues) ////// dans col(44) nous trouverons une liste de date jj/mm/aaa
    [/CODE]
    1) Le format dans col(44) est j/mm/aaaa et non jj/mm/aaaa

    EDIT:

    2) Remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nomCherche = Range("A2").Value
    Set result = ActiveSheet.Columns(44).Cells.Find(nomCherche, , xlValues)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ActiveSheet.Columns(44).NumberFormat = "d/mm/yyyy"
    ActiveSheet.Range("A2").NumberFormat = "d/mm/yyyy"
    nomCherche = ActiveSheet.Range("A2").Text
     
    Set result = ActiveSheet.Columns(44).Cells.Find(nomCherche, , xlValues, xlWhole)

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Le format des cellules n'altère pas la recherche.

    Comme dit précédemment, attention à xlValue, qui est bien placé (contrairement à ce que j'ai dit dans mon post précédent), puisque dans l'ordre, les paramètres sont What, After, LookIn et LookAt, et XLValue fait référence au paramètre LookIn.

    MAIS! Il ne faut pas de "s" à xlValues, d'où mon conseil précédemment donné de rendre la déclaration des variables obligatoire.

    Tips: Utiliser des paramètres nommés, on peut alors les mettre dans l'ordre souhaité sans être obligé d'utiliser des paramètres vides...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set result = Range("b:b").Find(what:="Pierre", LookIn:=xlValue, lookat:=xlWhole)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par rdurupt Voir le message
    Ok je n'est pas ouvert la pièce joint vue que c'était flagrant de sont post
    Pas de soucis, bien entendu. Ma remarque visait juste à montrer que le problème n'était pas là dans le code

    Ceci dit, ta remarque montre à quel point il est utile de respecter la syntaxe vba dès lors que l'on met des balises de code, et donc de commenter avec ' plutôt qu'avec ///

    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  11. #11
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour Pierre.


    Les observations faites sur Excel 2007 avec le classeur ci-joint semblent démontrer que, au contraire, le format des cellules a un impact majeur sur le résultat de la recherche de valeurs d'un type numérique ou de type Date avec XlValues comme paramètre de la fonction FIND.


    Avec XlValues :

    1) Si la valeur cherchée est d'un type numérique, cette valeur numérique doit être identique à la propriété TEXT des cellules (telle que définie par le format des cellules) pour que FIND donne un résultat

    2) Si la date cherchée est de type DATE, seules les cellules au format m/d/yyyy sont considérées

    3) Si la date cherchée est de type STRING, les cellules au format m/d/yyyy ne sont pas prises en compte

    4) Si la date cherchée est de type STRING, la date cherchée doit être identique à la propriété TEXT des cellules (telle que définie par le format des cellules) pour que FIND donne un résultat

    5) La largeur de la colonne, en modifiant la propriété TEXT des cellules, a un impact sur le résultat de la recherche de FIND avec XlValues.
    Fichiers attachés Fichiers attachés

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut Gérard,

    En fait, c'est parce que tu penses que tu entres les mêmes données dans les cellules en B et en D, or ce n'est pas le cas.

    Si tu rentres une "date" dans une cellule au format texte, tu ne saisis pas une date (=> un nombre), mais une suite de caractères qui représentent visuellement (=> pour l'être humain) une date, mais qui n'est pas une date pour Excel. Les valeurs en B et en D sont très différentes. Tu peux d'ailleurs le tester facilement en regardant les "formats rapides" des cellules B8 et D8 de ton exemple. Mais là, ce n'est pas le format qui fait la différence, c'est le fait qu'en D, tu as saisis du texte.

    Date au format date (=> c'est bien une date pour Excel, c'est-à-dire un nombre qui représente une date)


    Date au format texte (=> la saisie n'est pas une date, et Excel ne sait pas en afficher la valeur numérique)


    Date avec format personnalisé "mmmm" => (c'est bien une date pour Excel, même si visuellement on a l'impression que c'est du texte)



    Ton test sur la largeur des colonnes n'est pas valide, car tu testes également des valeurs différentes puisque certaines cellules sont au format numérique et d'autres au format texte.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  13. #13
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour Pierre !

    Dans la discussion Valide Jour entre deux dates le demandeur n'arrivait pas
    à trouver la plage de dates correspondant à ses bornes de dates.

    En fait, le format Date de la cellule Dernier Jour de l'onglet Saisie ne correspondant pas au format Date
    des cellules de l'onglet Année, la méthode Find est aux fraises avec xlValues !

    Je lui ai donc fourni directement une solution en formatant en texte la date cherchée
    comme l'affichage des cellules de l'onglet Année (même en ajoutant un $ à la fonction Format), CQFD …

    Par contre en utilisant xlFormulas, nul besoin de formater la date cherchée,
    Find fonctionne sans souci avec la valeur brute de la cellule (Value) …

    Si tu as une autre explication …

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut Marc,

    Je vais investiguer sur le sujet, car il semblerait que FIND soit problématique avec les dates, au vu de ton post et de ceux de docmarti

    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  15. #15
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut



    En résumé :

    Find est problématique avec les dates seulement avec son paramètre LookIn:=xlValues
    si son paramètre What ne respecte pas l'affichage texte des cellules de la plage de recherche …


    Expériences sur versions 2003 & 2007.

  16. #16
    Invité
    Invité(e)
    Par défaut Bonjour, regardes ç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
    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 CommandButton1_Click()
    With Sheets("Productivité")
        Z = SerchXls(.Columns(44).Cells, .Columns(44).Cells(1, 1), .Range("A2"), True, xlValues)
        If Z = 0 Then MsgBox "pas trouvé": Exit Sub
        If ComboBox2.Value = "Matin" Then
            .Range("G" & Z).Value = ComboBox1.Value
            .Range("H" & Z).Value = TextBox1.Value
            .Range("I" & Z).Value = TextBox16.Value
            .Range("J" & Z).Value = TextBox3.Value
            .Range("k" & Z).Value = TextBox4.Value
            .Range("l" & Z).Value = TextBox5.Value
            .Range("m" & Z).Value = TextBox6.Value
            .Range("n" & Z).Value = TextBox7.Value
            .Range("o" & Z).Value = TextBox8.Value
            .Range("s" & Z).Value = TextBox9.Value
            .Range("t" & Z).Value = TextBox10.Value
            .Range("u" & Z).Value = TextBox11.Value
            .Range("y" & Z).Value = TextBox15.Value
            .Range("AE" & Z).Value = ComboBox3.Value
            .Range("AF" & Z).Value = ComboBox4.Value
            .Range("AG" & Z).Value = ComboBox5.Value
            .Range("AI" & Z).Value = ComboBox6.Value
            .Range("AH" & Z).Value = ComboBox7.Value
            .Range("AJ" & Z).Value = ComboBox8.Value
            .Range("AK" & Z).Value = ComboBox9.Value
            .Range("Al" & Z).Value = ComboBox10.Value
            .Range("Am" & Z).Value = ComboBox11.Value
            .Range("An" & Z).Value = ComboBox12.Value
            .Range("Ao" & Z).Value = ComboBox13.Value
        Else
            j = Z + 1
            .Range("G" & j).Value = ComboBox1.Value
            .Range("H" & j).Value = TextBox1.Value
            .Range("I" & j).Value = TextBox16.Value
            .Range("J" & j).Value = TextBox3.Value
            .Range("k" & j).Value = TextBox4.Value
            .Range("l" & j).Value = TextBox5.Value
            .Range("m" & j).Value = TextBox6.Value
            .Range("n" & j).Value = TextBox7.Value
            .Range("o" & j).Value = TextBox8.Value
            .Range("s" & j).Value = TextBox9.Value
            .Range("t" & j).Value = TextBox10.Value
            .Range("u" & j).Value = TextBox11.Value
            .Range("y" & j).Value = TextBox15.Value
            .Range("AE" & j).Value = ComboBox3.Value
            .Range("AF" & j).Value = ComboBox4.Value
            .Range("AG" & j).Value = ComboBox5.Value
            .Range("AH" & j).Value = ComboBox6.Value
            .Range("AI" & j).Value = ComboBox7.Value
            .Range("AJ" & j).Value = ComboBox8.Value
            .Range("AK" & j).Value = ComboBox9.Value
            .Range("Al" & j).Value = ComboBox10.Value
            .Range("Am" & j).Value = ComboBox11.Value
            .Range("An" & j).Value = ComboBox12.Value
            .Range("Ao" & j).Value = ComboBox13.Value
        End If
        Unload Me
        UserForm2.Hide
    End With
    End Sub
    Function SerchXls(Myrange As Range, MyCellule As Range, strRecherche, EntierCell As Boolean, Optional LngLookIn As Long = xlFormulas)
    On Error Resume Next
    Dim CellEntrier As Integer
    If EntierCell = True Then CellEntier = xlWhole Else CellEntier = xlPart
    SerchXls = 0
       SerchXls = Myrange.Cells.Find(what:=strRecherche, After:=MyCellule, LookIn:=LngLookIn, LookAt _
            :=CellEntier, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=EntierCell).Row
      If SerchXls <= MyCellule.Row Then SerchXls = 0
    End Function

  17. #17
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3
    Par défaut
    Tout d'abord, merci à tous pour vos réponses !!
    J'ai testé toutes vos propositions une par une.
    Le solution de Docmarti fonctionne parfaitement.
    Merci beaucoup, je reviendrai avec plaisir et conseillerai votre forum.
    Nico

    Citation Envoyé par Docmarti Voir le message
    1) Le format dans col(44) est j/mm/aaaa et non jj/mm/aaaa

    EDIT:

    2) Remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nomCherche = Range("A2").Value
    Set result = ActiveSheet.Columns(44).Cells.Find(nomCherche, , xlValues)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ActiveSheet.Columns(44).NumberFormat = "d/mm/yyyy"
    ActiveSheet.Range("A2").NumberFormat = "d/mm/yyyy"
    nomCherche = ActiveSheet.Range("A2").Text
     
    Set result = ActiveSheet.Columns(44).Cells.Find(nomCherche, , xlValues, xlWhole)

  18. #18
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Nicoooo87 Voir le message
    Tout d'abord, merci à tous pour vos réponses !!
    J'ai testé toutes vos propositions une par une.
    Le solution de Docmarti fonctionne parfaitement.
    Merci beaucoup, je reviendrai avec plaisir et conseillerai votre forum.
    Nico
    Merci beaucoup, je reviendrai avec plaisir et conseillerai notre forum.
    tu en fais parti maintenant!

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

Discussions similaires

  1. Extraire des lignes en recherchant une valeur de cellule
    Par maxmaxmax dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/08/2012, 16h56
  2. Recherche d'une date à partir du numéro de la semaine
    Par FMDCC dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/01/2010, 17h22
  3. rechercher une date et copier la ligne dans un autre onglet
    Par ptitloup57 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/02/2009, 13h34
  4. Rechercher date dans colonne et renvoi la ligne correspondante
    Par rickgoz dans le forum Macros et VBA Excel
    Réponses: 36
    Dernier message: 28/10/2008, 18h29
  5. Scripts : Extraire une ligne
    Par nemohck dans le forum Linux
    Réponses: 7
    Dernier message: 03/11/2003, 20h40

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