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 :

[VBA-E] Comparer des cellules


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 44
    Par défaut [VBA-E] Comparer des cellules
    Bonjour a tous,

    J'ai un tableau de la forme suivante :



    La colonne A contient un nombre a 5 chiffres
    La colonne B est vide
    La colonne C contient une suite de caracteres : 2 espaces, un nombre a 5 chiffres, un underscore puis une suite de caracteres.

    Mon but est de comparer le nombre de la colonne A avec celui de la colonne C. Si ils sont identiques, j'inscris OK dans la colonne D, sinon j'inscris NON OK dans la colonne D.

    Comment faire cela ?

    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 137
    Par défaut
    Essaye avec la fonction mid:
    Cela récupère dans texte, à partir du 3ème caractère, sur une longueur de 5 caractères.


    Je suis pas si je suis claire. N'hésite pas demander des explications

  3. #3
    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

    Sans VBA, tu peux utiliser la formule suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(TEXTE(A1;"00000")=STXT(C1;3;5);"OK";"NON")
    Avec VBA, tu peux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub Verifier()
        Dim i As Integer
        For i = 1 To 10 ' Balaie les 10 premières lignes
            If CStr(Range("a" & i)) = Mid(Range("c" & i), 3, 5) Then
                Range("d" & i) = "OK"
                Else
                Range("d" & i) = "NON"
            End If
        Next i
    End Sub
    Tu noteras qu'il est préférable de transformer la valeur numérique de A en chaine de caractères.
    Ok?
    "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...
    ---------------

  4. #4
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 155
    Par défaut
    une autre possibilité; si t'es sûre que dans ta colonne c le nombre sera toujours égal à 5 chiffres:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MyStr = Left(Cell_C, 5)
     
    'MyStr contient tes cinq chiffres
    'cell_c représente ta suite de caractère de la colonne c

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 137
    Par défaut
    romrai, je crois que tu as oublié qu'il y a 2 espaces avant le nombre dans la colonne C, ce qui fait que tu n'obtient que les 3 premiers chiffres!

  6. #6
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 155
    Par défaut
    Sorry t'a raison; dans ce cas le 5 serait plutôt 7

    merci pour la remarque

  7. #7
    Membre émérite
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Par défaut
    Salut,

    Ya un mix pour la solution avec fonction Trim qui retire les espaces surnuméraires de chaque côté d'une chaîne de caractère:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    MyStr = Left(Trim(Cell_C), 5)
     
    'MyStr contient tes cinq chiffres
    +

    Théo

  8. #8
    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
    Avez-vous testé ma solution?

    [EDIT] Partie supprimée pour délestage [/EDIT]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mid(range("c" & i),3,5)
    renvoie une chaine de 5 caractères commençant à la troisième position de C(i)...
    C'est pourquoi je compare cela avec cstr(range("a" & i)

    En tout cas, il me semble que selon l'exposé du problème, le code que j'ai proposé fonctionne, pour autant que la syntaxe des cellules en C soit toujours la même , à savoir deux espaces puis 5 chiffres puis la suite...

    romrai, il me semble qu'il serait judicieux que tu testes tes réponses...
    changer le 5 en 7 ne solutionne en rien le problème
    "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...
    ---------------

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 44
    Par défaut
    Deja merci pour vos reponses, vous etes rapides

    J'ai donc tester les differentes solutions, et voici mon code de test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim z As Integer
    z = Base.Worksheets(1).UsedRange.Rows.Count
     
    For Ctr = 5 To z
     Mystr = Left(Trim(Base.Worksheets(1).Cells(Ctr, 3)), 5)
     If (Base.Worksheets(1).Cells(Ctr, 1) = Mystr) Then
      Base.Worksheets(1).Cells(Ctr, 4).Value = "OK"
     Else
      Base.Worksheets(1).Cells(Ctr, 4).Value = "NON OK"
     End If
    Next
    Le probleme etant que j'ai des NON OK partout, meme quand les champs sont bien identiques.
    J'ai essaye d'afficher pour voir le champ Mystr a la place de NON OK et pourtant le champ Mystr contient bien le nombre a 5 chiffres, je comprend vraiment pas pourquoi le test du if ne marche pas.

    Quelqu'un a une idee ?

    Merci encore

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 44
    Par défaut
    Je viens d'essayer le code de pierre fauconier et il marche a la perfection, merci monsieur pierre fauconier.

    Merci les autres aussi, j'adore votre esprit de partage de connaissances

  11. #11
    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
    C'est parce que VBA compare des valeurs numériques et des valeurs "chaînes de caractères"

    Teste ma solution, elle fonctionne! ET , dans un premier temps, ne te complique pas la vie avec des variables, tu n'en as pas besoin pour que cela fonctionne...

    Va voir là http://cjoint.com/?evoKyxS8oO (ce lien expire dans 15 jours) et regarde le code du module1

    Ok?
    "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...
    ---------------

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 137
    Par défaut
    Pense au tag "Résolu"

Discussions similaires

  1. [VBA-E] Comparer des valeurs dans des cellules
    Par michel2662 dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 22/06/2017, 15h00
  2. [VBA-E] Comparer des cellules
    Par lutin06 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/04/2006, 10h22
  3. [VBA-E2003] Colorier des cellule sélectionnée
    Par 973thom dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 26/04/2006, 10h19
  4. [VBA-E]Remplir des cellules vides par des 0
    Par Tartenpion dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/03/2006, 13h58
  5. [VBA-E]supprimer des cellules vide
    Par garn dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 13/02/2006, 11h56

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