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

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 44
    Points : 14
    Points
    14
    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 habitué
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 137
    Points : 130
    Points
    130
    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
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    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 régulier
    Inscrit en
    Février 2006
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 155
    Points : 111
    Points
    111
    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 habitué
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 137
    Points : 130
    Points
    130
    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 régulier
    Inscrit en
    Février 2006
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 155
    Points : 111
    Points
    111
    Par défaut
    Sorry t'a raison; dans ce cas le 5 serait plutôt 7

    merci pour la remarque

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Points : 739
    Points
    739
    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
    Forums VB : lire la notice
    La touche existe pour être utilisée
    Pensez au tag
    Pour ceux n'ayant pas l'aide installée :
    - Aide MSDN pour VB6
    - Aide MSDN pour VBA
    Je ne réponds pas aux questions techniques par MP. Merci d'utiliser le forum fait pour çà.

  8. #8
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    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 à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 44
    Points : 14
    Points
    14
    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 à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 44
    Points : 14
    Points
    14
    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
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    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 habitué
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

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

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 44
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par linda15975
    Pense au tag "Résolu"

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 44
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    Je remonte ce post car j'aimerais maintenant que ma colonne D se remplisse avec un champ calcule automatiquement ( exactement le meme ) Ok ou non Ok

    J'ai un debut de reponse ici :

    http://www.developpez.net/forums/sho...d.php?p=884429


    Mais si je fais ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 5 To z
        Range("d" & i).Formula = "=IF(A" & i & ") = Mid(C" & i & ", 3, 5), ""OK"", ""NON"")"
    Next i
    Ca me met des NON partout.


    Avez vous une idee ?

    Merci

  15. #15
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 338
    Points : 4 295
    Points
    4 295
    Par défaut
    Citation Envoyé par lutin06
    Bonjour,

    Je remonte ce post car j'aimerais maintenant que ma colonne D se remplisse avec un champ calcule automatiquement ( exactement le meme ) Ok ou non Ok

    J'ai un debut de reponse ici :

    http://www.developpez.net/forums/sho...d.php?p=884429


    Mais si je fais ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 5 To z
        Range("d" & i).Formula = "=IF(A" & i & ") = Mid(C" & i & ", 3, 5), ""OK"", ""NON"")"
    Next i
    Ca me met des NON partout.


    Avez vous une idee ?

    Merci
    oui moi aussi ça me met des noms il faut peut etre transformer les champs de ta première colonne en texte
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  16. #16
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    il faut arriver à une formule du genre :
    IF(TEXT(A2,0)=Mid(C2,3,5),"OK","NON")

    d'ou le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    For i = 5 To z
          Range("d" & i).Formula = "=IF(TEXT(A" & i & ",0) = Mid(C" & i & ", 3, 5), ""OK"", ""NON"")"
     
    Next i

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 44
    Points : 14
    Points
    14
    Par défaut
    Ok j'ai trouve un code qui marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("d" & i).Formula = "=IF(A" & i & " = VALUE(Mid(C" & i & ", 3, 5)), ""OK"", ""NON"")"
    Maintenant nouveau probleme :

    Imaginons que la colonne A et la colonne C concordent partout ..., on a donc la colonne D avec des OK partout

    Si je decale la colonne A d'une ligne et laisse la colonne C comme elle est...cela devrait m'afficher des NON partout dans la colonne D ! ... et bien c'a m'affiche des OK partout, la calculation a suivi le mouvement!

    Comment faire ?

    Merci

  18. #18
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    c'est du simple traitement de formule Excel... utilise le carcatéres $ devant la partie des adresses qui ne doivent pas bouger ..

    ainsi si tu met =C1 et que tu déplace d'un cran à droite et un cran plus bas tu obtient =D2
    • =$c$1 =$c$1
    • =c$1 =d$1
    • =$c1 =$c2
    à ton tour d'adapter au code ...

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 44
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par bbil
    c'est du simple traitement de formule Excel... utilise le carcatéres $ devant la partie des adresses qui ne doivent pas bouger ..

    ainsi si tu met =C1 et que tu déplace d'un cran à droite et un cran plus bas tu obtient =D2
    • =$c$1 =$c$1
    • =c$1 =d$1
    • =$c1 =$c2
    à ton tour d'adapter au code ...

    Merci mais ca ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("d" & i).Formula = "=IF($A$" & i & " = VALUE(Mid(C" & i & ", 3, 5)), ""OK"", ""NON"")"
    J'ai essaye ca, et si je deplace par exemple la cellule A3 en A2, la colonne D est toujours ok avec $A$2 a l'interieur

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 44
    Points : 14
    Points
    14
    Par défaut
    Helppp , ca doit pas etre bien complique pour vous

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