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]Comparaison du contenu de 2 feuilles


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 25
    Points : 19
    Points
    19
    Par défaut [VBA-E]Comparaison du contenu de 2 feuilles
    Hello tout le monde...

    Je vous explique mon problème. J'ai un fichier excel qui contient deux feuilles. Sur la premiere, il y a trois colonnes principales à savoir le nom,prénom et une troisième qui devrait contenir un "0" ou un "1". La deuxième feuille contient presque la meme série de noms /prenoms.

    Ce que je voudrais faire : Mettre un "1" dans la première colonne si le prenom existe aussi sur la deuxième feuille, sinon mettre un zero.

    J'ai essayé de faire ça avec une fonction IF ... mais ça ne fonctionne pas très bien...


    Est-ce que quelqu'un pourrait m'aider à mettre au point cette petite macor ? Car je suis super nul en VBA ...


    merci d'avance

  2. #2
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 72
    Points : 78
    Points
    78
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if Sheets("feuille1").Cells(i, y) = Sheets("feuille2").Cells(i, y) then
     
    Sheets("feuille1").Cells(i, y)=1 
    else
    Sheets("feuille1").Cells(i, y)=0
    end if

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 25
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par chmod777
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if Sheets("feuille1").Cells(i, y) = Sheets("feuille2").Cells(i, y) then
     
    Sheets("feuille1").Cells(i, y)=1 
    else
    Sheets("feuille1").Cells(i, y)=0
    end if

    Merci d'avoir répondu si vite, mais malheureusement ton code ne marche pas. Je ne suis pas un expert, mais d'après moi une telle fonction devrait impliquer au moins une boucle non ? .. Car il n'y a pas le meme nombre de lignes sur la première et la deuxième feuille..

  4. #4
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 72
    Points : 78
    Points
    78
    Par défaut
    c a toi de l adapter lol comment tu veux que je connaisse tes parametres?

  5. #5
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Un peu de 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
    Sub CherchePresence()
      Dim rSource As Range
      Dim rDest As Range
      Dim rCell As Range
      Dim wksSource As Worksheet ' Feuille à mettre à jour
      Dim wksDest As Worksheet ' Feuille où on cherche la présence
      Set wksSource = Sheets("Feuil1")
      Set wksDest = Sheets("Feuil2")
      Set rSource = Range(wksSource.Cells(1, 1), _
              wksSource.Cells(wksSource.Cells.SpecialCells(xlLastCell).Row, 1))
      Set rDest = wksDest.Range(wksDest.Cells(1, 1), _
              wksDest.Cells(wksDest.Cells.SpecialCells(xlLastCell).Row, 1))
      For Each rCell In rSource
        If EstPresent(rCell.Value, rCell.Offset(0, 1).Value, rDest) Then
          rCell.Offset(0, 2) = 1
        Else
          rCell.Offset(0, 2) = 0
        End If
      Next rCell
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function EstPresent(ByVal strNom As String, ByVal strPrenom As String, rDest As Range) As Boolean
      Dim rCell As Range
      For Each rCell In rDest
        If rCell = strNom Then
          If rCell.Offset(0, 1) = strPrenom Then
            EstPresent = True
          End If
        End If
      Next rCell
    End Function
    A toi de changer les noms de tes feuilles et savoir si tu commences à la première ligne de tes feuilles.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  6. #6
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 25
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par chmod777
    c a toi de l adapter lol comment tu veux que je connaisse tes parametres?
    J'ai essayé d'expliquer la situation au mieux...
    Car ta fonction (si j'ai bien compris ) prend une cellule...et la compare avec la meme cellule d'une autre feuille... ya meme pas besoin de faire une macro..une simple fonction IF le fait !

    Ce que j'aurais voulu faire... De prendre la valeur contenue dans la première ligne de la deuxième colonne.. et regader si elle existe dans la deuxième colonne de l'autre feuille ( pas forcément au meme endroit) et ensuite mettre un 1 dans la première colonne de la première feuille si elle existe ... et un 0 si elle n'existe pas..

    Je pense que j'ai besoin de 2 boucles imbriquées.. mais je ne sais pas comment le faire...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 788
    Points : 446
    Points
    446
    Par défaut
    Car ta fonction (si j'ai bien compris ) prend une cellule...et la compare avec la meme cellule d'une autre feuille... ya meme pas besoin de faire une macro..une simple fonction IF le fait !






    en mettant deux for avant le if ca fera ce que tu veux
    le nombre de nom sur la premiere est la deuxième feuille est il constant? ou peut on en rajouter ?
    Le savoir est une arme alors soyons armés

  8. #8
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 25
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par AlainTech
    Un peu de 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
    Sub CherchePresence()
      Dim rSource As Range
      Dim rDest As Range
      Dim rCell As Range
      Dim wksSource As Worksheet ' Feuille à mettre à jour
      Dim wksDest As Worksheet ' Feuille où on cherche la présence
      Set wksSource = Sheets("Feuil1")
      Set wksDest = Sheets("Feuil2")
      Set rSource = Range(wksSource.Cells(1, 1), _
              wksSource.Cells(wksSource.Cells.SpecialCells(xlLastCell).Row, 1))
      Set rDest = wksDest.Range(wksDest.Cells(1, 1), _
              wksDest.Cells(wksDest.Cells.SpecialCells(xlLastCell).Row, 1))
      For Each rCell In rSource
        If EstPresent(rCell.Value, rCell.Offset(0, 1).Value, rDest) Then
          rCell.Offset(0, 2) = 1
        Else
          rCell.Offset(0, 2) = 0
        End If
      Next rCell
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function EstPresent(ByVal strNom As String, ByVal strPrenom As String, rDest As Range) As Boolean
      Dim rCell As Range
      For Each rCell In rDest
        If rCell = strNom Then
          If rCell.Offset(0, 1) = strPrenom Then
            EstPresent = True
          End If
        End If
      Next rCell
    End Function
    A toi de changer les noms de tes feuilles et savoir si tu commences à la première ligne de tes feuilles.


    Wouaw merci pour tout ça... au fait pourrait tu juste encore me dire ce que je dois modifier en sachant que sur la première feuille (source) les données commencent depuis "C2" et elle doivent etre comparé avec les données de la colonne "B" depuis la deuxième ligne de la deuxième feuille... et le 0 ou 1 doit etre inscrit dans la première colonne de la première feuille en commencant de la deuxième ligne.

  9. #9
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Réfléchis un peu...

    Je trouve que je t'en ai déjà donné beaucoup.

    Essaye de comprendre le code (pas si compliqué que ça) et tu y arriveras bien tout seul.

    Bonne chance.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  10. #10
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 25
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par AlainTech
    Réfléchis un peu...

    Je trouve que je t'en ai déjà donné beaucoup.

    Essaye de comprendre le code et tu y arriveras bien tout seul.

    Bonne chance.
    okay... je vais essayer de trimer un peu la dessus... merci !!

  11. #11
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 25
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par AlainTech
    Réfléchis un peu...

    Je trouve que je t'en ai déjà donné beaucoup.

    Essaye de comprendre le code (pas si compliqué que ça) et tu y arriveras bien tout seul.

    Bonne chance.
    Bon j'ai essayé de regler ce code, mais c'est encore pire... Par contre j'ai l'impression d'en comprendre une bonne partie ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub CherchePresence()
      Dim rSource As Range
      Dim rDest As Range
      Dim rCell As Range
      Dim wksSource As Worksheet ' Feuille à mettre à jour
      Dim wksDest As Worksheet ' Feuille où on cherche la présence
      Set wksSource = Sheets("All")
      Set wksDest = Sheets("1ère vague")
    Jusque la ca va :-))

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      Set rSource = Range(wksSource.Cells(1, 1), _
              wksSource.Cells(wksSource.Cells.SpecialCells(xlLastCell).Row, 1))
    Ici j'ai essayé de mettre (2,3) comme les valeurs à comparer commencent en 2ème ligne et 3ème colonne ... mais après ça..
    j'obtiens 3 colonnes de "0" donc ça doit pas etre juste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      Set rDest = wksDest.Range(wksDest.Cells(1, 1), _
              wksDest.Cells(wksDest.Cells.SpecialCells(xlLastCell).Row, 1))
    pareil ici... j'ai essayé de mettre (2,2) pour 2ème ligne , 2ème colonne de la page "1ère vague"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For Each rCell In rSource
        If EstPresent(rCell.Value, rCell.Offset(0, 1).Value, rDest) Then
          rCell.Offset(0, 2) = 1
        Else
          rCell.Offset(0, 2) = 0
        End If
      Next rCell
    End Sub
    Ici, d'après ce que j'ai vu, offset indique un décalage de cellule... vu que la source ce trouve deux colonnes après ou doit etre le 0 ou 1 ... j'ai essayé de mettre "-2" .. mais ça n'est pas accepté et j'ai une erreur de compilation...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function EstPresent(ByVal strNom As String, ByVal strPrenom As String, rDest As Range) As Boolean
      Dim rCell As Range
      For Each rCell In rDest
        If rCell = strNom Then
          If rCell.Offset(0, 1) = strPrenom Then
            EstPresent = True
          End If
        End If
      Next rCell
    End Function
    et la aussi , je ne sais pas si je dois modifier offset ou pas ..


    please help me..... la je suis en train de ramer sur le sable...

  12. #12
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Citation Envoyé par Neymo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      Set rSource = Range(wksSource.Cells(1, 1), _
              wksSource.Cells(wksSource.Cells.SpecialCells(xlLastCell).Row, 1))
    Ici j'ai essayé de mettre (2,3) comme les valeurs à comparer commencent en 2ème ligne et 3ème colonne ... mais après ça..
    j'obtiens 3 colonnes de "0" donc ça doit pas etre juste
    Le but est de ne prendre qu'une colonne.
    Donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      Set rSource = Range(wksSource.Cells(2, 3), _
              wksSource.Cells(wksSource.Cells.SpecialCells(xlLastCell).Row, 3))
    Edit -> Je pense que tu arriveras à adapter de la même manière le range de la page destination...
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  13. #13
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 25
    Points : 19
    Points
    19
    Par défaut
    merci .. ça marche a merveille...


    que du bonheur !!


    p.S : longue vie à ce forum

  14. #14
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Un petit nous aurait fait plaisir.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

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

Discussions similaires

  1. VBA - Excel - comparaison de deux feuilles
    Par toto14 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 13/10/2006, 13h52
  2. [VBA-E]Comparaison du contenu de cellules ligne à ligne
    Par frederic.go dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/04/2006, 16h02
  3. [VBA-E]Comparaison sous Excel avec 3 feuilles
    Par zidrouz dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/04/2006, 10h49
  4. [VBA-E]Remplir combobox avec contenu d'une feuille Excel
    Par Deejoh dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/03/2006, 16h16
  5. [VBA-E] supprimer le contenu de toutes les cellules d'une feuille
    Par BipBip2 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 13/08/2004, 15h13

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