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 :

comparer deux chaines contenues dans les cellules de deux tableaux


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 23
    Points : 16
    Points
    16
    Par défaut comparer deux chaines contenues dans les cellules de deux tableaux
    bonjour tout le monde,
    en fait je suis entrain d'écrire un programme en vba qui après un certain traitement sur un premier tableau excel trouve une date-De-Début: DateDeb

    je parcourt ensuite toutes les lignes d'un autres tableau excel pour une colonne donnée pour chercher cette DateDeb

    quand le format des deux dates est le meme : jj/mm/aaaa , le traitement se passe normalement , mais des fois j'ai une date de la forme jj/mm/aaaa suivie de l'heure dans le premier tableau sachant que je n'ai pas le droit de modifier le format
    et dans ce cas , le programme ne reconnait pas la date dans le deuxième et ne comprend pas qu'il s'agit de la meme valeur ce qui est normal car j'écrit une égalité :

    ****
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    For j = 12 To 41 (les lignes du du tableau du deuxième fichier excel)
     
     
    If Workbooks("fievide.xls").Worksheets("Feuille d'imputation sur études").cells(j, 3) = DateDeb Then
     
     
    Workbooks("fievide.xls").Worksheets("Feuille d'imputation sur études").
    cells(j, 7).Value = "abs"
     
               MsgBox ("Date de début de l'abscence =" & DateDeb)
    *****
    Donc j'aimerai trouver un moyen qui me permettrait de vérifier si une partie de la chaine datedeb (définie comme chaine) est contenue dans la cellule
    cells(j, 3) et si c'est identique c'est bon sans chercher une identité totale

    merci

  2. #2
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 61
    Points : 68
    Points
    68
    Par défaut
    Bonjour Ellewided

    regarde le code ci-dessous si il peut t'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim DateDeb As Date
    DateDeb = #7/3/2009#
    If CStr(DateDeb) = Mid(Cells(1, 2).Text, 1, 10) Then _
        MsgBox "OK, identique"
    bon après midi
    @+

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 262
    Points : 343
    Points
    343
    Par défaut
    Bonjour,

    en passant tes dates en "Long", tu obtiens la même valeur....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If CLng(Workbooks("fievide.xls").Worksheets("Feuille d'imputation sur études").Cells(j, 3).Value) = CLng(DateDeb) Then

  4. #4
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 61
    Points : 68
    Points
    68
    Par défaut
    Re, bonjour Mapeh

    Aarf, résultat surprenant chez moi... Excel 2003

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim DateDeb As Date, x As Long, y As Long
    DateDeb = #7/3/2009#
    x = CLng(DateDeb) 'Renvoie 39997
    y = CLng(Cells(1, 2).Value) '03/07/2009  12:27:36         renvoie 39998
    @+

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 61
    Points : 68
    Points
    68
    Par défaut
    Re

    pas si surprenant que cela finalement, puisque les décimales sont atrrondies, cf aide vba...

    Les fonctions CInt et CLng arrondissent les parties décimales égales à 0,5 au nombre pair le plus proche. Par exemple, 0,5 est arrondi à 0 et 1,5 est arrondi à 2.
    @+

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 262
    Points : 343
    Points
    343
    Par défaut
    Re-,

    Salut Pierrot...

    Effectivement, j'avais point vu....

    En utilisant DateValue, peut-être?

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 61
    Points : 68
    Points
    68
    Par défaut
    Re

    oui, "DateValue" devrait également convenir...

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    salut les amis !
    merci pierrot et mapeh , j'ai testé la solution de pierrot et ça marche

    mais en fait ça permet juste de faire la comparaison mais exige d'indiquer d'ou commencer (start), est ce qu'il y aurait une fonction qui permet tout simplement de vérifier si une chaine de caractère est contenue dans la cellule Cells(j, 3) sans forcément se préoccuper de son placement

    exemple : je vérifie si la cellule Cells(j, 3) contient bien le code (PM)
    si la cellule Cells(j, 3) = (PM)23gt Ou Cells(j, 3) = FFG(PM)23gt Ou
    Cells(j, 3) = ectt(PM) : dans les trois c'est OK car la chaine cherchée est dedans !

    merci bien
    @plus

  9. #9
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 61
    Points : 68
    Points
    68
    Par défaut
    Re

    regarde du coté de la fonction "InStr" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(Cells(1, 2).Text, "PM") > 0 Then MsgBox "OK, chaine trouvée"
    @+

  10. #10
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 23
    Points : 16
    Points
    16
    Par défaut vérifier si une chaine de caractère est contenue dans une cellule d'un tableau( inclusion et non pas égalité )
    re pierrot ,
    en fait le dernier code ne marche pas avec le contenu d'une cellule mais juste avec une chaine fixe bien définie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(Cells(1, 2).Text, "PM") > 0 Then MsgBox "OK, chaine trouvée"
    ==> ne marche pas

    mais juste quand on a un code du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If InStr("machainePM#", "PM") > 0 Then MsgBox "OK, chaine trouvée"
    malheureusement moi je suis obligée de travailler avec les cellules

    merci comme meme

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 262
    Points : 343
    Points
    343
    Par défaut
    Re-,

    en utilisant DateValue..

    Essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If DateValue(Workbooks("fievide.xls").Worksheets("Feuille d'imputation sur études").Cells(j, 3).Value) = DateValue(DateDeb) Then

  12. #12
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 61
    Points : 68
    Points
    68
    Par défaut
    Re

    comprends pas bien, chez moi ce code fonctionne... valeur trouvée en B1, dans la date et heure au format "jj/mm/aaaa h:mm:ss AM/PM"...

  13. #13
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    coucou
    je m'exuse pierrot , t'avais raison , ça marche finalement

    je te remercie ainsi que tous ceux qui m'ont répondu

    bonne journée

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

Discussions similaires

  1. [Toutes versions] comment récupérer via VBA les arguments d’une fonction excel contenue dans une cellule ?
    Par popaul88 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 12/08/2014, 18h27
  2. Traiter une par une les dates contenue dans une cellule
    Par wyzer dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/04/2012, 09h20
  3. Deux couleurs d'écriture avec formules dans les cellules
    Par raphl dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 25/07/2011, 16h26
  4. Réponses: 8
    Dernier message: 04/04/2011, 10h40
  5. Alignement dans les cellules d'un tableau
    Par philippef dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 23/02/2005, 12h15

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