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 :

Problème avec Find(), Excel Vba


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 57
    Points : 36
    Points
    36
    Par défaut Problème avec Find(), Excel Vba
    Bonjour tout le monde,

    Je re dépose un post aujourd'hui car j'ai encore un soucis sur un autre projet.
    Sous excel je dois comparer deux collons, c'est-à-dire que je regarde chaque cellule de la colonne pas et je vérifie si elle se trouve dans la colonne B. Si la cellule n'est pas présente je l'écris dans la colonne C.

    Le problème c'est que Find() ne fonctionne pas chez moi je comprend pas pourquoi, les cellules sont de type texte et contitenne des chiffres très grand du style 12caractères.
    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For i = 2 To 11
           Set pos = Cells.Find(What:=Worksheets("caps").Cells(i, 13).Value, _
                       After:=Worksheets("mercure").Cells(1, 11))        
    If pos Is Nothing Then
            'cherche la premiere cellule vide
                DernCellUtil = Worksheets("Sauvegarde").Range("G1").End(xlDown).Row
                Worksheets("Sauvegarde").Cells((DernCellUtil + 1), 7).Value = Worksheets("caps").Cells(i, 13).Value
            End If
    Next i
    Dans la colonne C (celle située sur la feuille Sauvegarde), soit elle me réécri toutes les cellule de la colonne A, ou elle me réécri rien du tout. Alors qu'il y a bien des éléments de la colonne A présent dans la colonne B, mais pas tous.

    Que faire?

    Merci beaucoup d'avance!

  2. #2
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    bonjour mmmxtina le forum compare la colonne a avec la colonne b si pas present copy sur colonne c de la meme feuille a adapter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
    Sub essai()
    Dim i As Long, c As Range
    Application.ScreenUpdating = False
    For i = 2 To Range("A65535").End(xlUp).Row
    Set c = Range("b2:b" & Range("b65000").End(xlUp).Row).Find(Cells(i, 1))
    If c Is Nothing Then Range("c65536").End(xlUp)(2) = Cells(i, 1)
    Next i
    End Sub

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    Bonjour laeticia, merci beaucoup de ta réponse.

    Par contre je n'ai pas bien compris la 2e ligne du for:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set c = Range("b2:b" & Range("b65000").End(xlUp).Row).Find(Cells(i, 1))
    est-ce-que tu pourrai m'expliquer brièvement, en fait je ne comprend pas pourquoi tu à Range(Range().Find())?

    Merci beaucoup.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2008
    Messages : 235
    Points : 75
    Points
    75
    Par défaut
    bonjour, en gros la deuxieme ligne va recherche dans la colonne B jusqu'a la derniere ligne 'Range("b2:b" & Range("b65000").End(xlUp).Row)' et va chercher dans cette colonne la valeur de la celulle de 'i'

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    Merci lilp1, pour ta réponse.
    Bon je dois avouer que je ne suis pas très douée en vba, en fait les données sont sur 3 onglets différents peut-être que cela pose problème, car ça ne fonctionne pas chez moi. je te montre ce que j'ai écris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim i As Long, c As Range
            Application.ScreenUpdating = False
            For i = 2 To Worksheets("Feuil1").Range("M65535").End(xlUp).Row
                Set c = Worksheets("Feuil2").Range("k2:k" & Range("k65000").End(xlUp).Row).Find(Cells(i, 1))
            If c Is Nothing Then Worksheets("Feuil3").Range("g65536").End(xlUp)(2) = Cells(i, 1)
        Next i
    J'ai repis la syntaxe de laeticia, que je n'ai pas trop compris j'avou et rien n'est écris dans la feuille3, alors que quand je fais du pas à pas, il me semble que la fonction passe par le If c is nothing...
    bizare bizare, je comprend pas.

    Merci beaucoup!

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2008
    Messages : 235
    Points : 75
    Points
    75
    Par défaut
    COntent d'avoir put t'aider, mais aps mes connaissances s'arretent la, je poste bcp plus de questions que je n'apporte de réponse. j'ai put t'aider, car j'ai eu pas mal de pbrs avec Find aussi y a 2 3j.

  7. #7
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    J'avai mal adapté le code excusez moi!!!
    donc là la fonction Find() m'écris quelquechose mais tout ce qui se trouve dans la colonne m feuille 1, alors que ce que je voulais c'est quand quelquechose de la colonne M feuille 1, est dans la colonne k feuille 2, on ne fais rien, c'est seulement quand on le trouve pas on écris dans la colonne g feuille 3.
    J'ai écris ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim i As Long, c As Range
            Application.ScreenUpdating = False
            For i = 2 To Worksheets("feuil1").Range("M65535").End(xlUp).Row
                Set c = Worksheets("feuil2").Range("k2:k" & Range("k65000").End(xlUp).Row).Find(Worksheets("feuil1").Cells(i, 13))
            If c Is Nothing Then
                Worksheets("feuil3").Range("g65536").End(xlUp)(2) = Worksheets("feuil1").Cells(i, 13)
            End If
        Next i
    J'ai toujours le même problème je ne comprend pas, même quand j'essai avec des lettre genre a, b ou c, eh bien il ne les retrouve pas dans la feuil2 colonne k.
    une idée du problème?
    merci.

  8. #8
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    re, essai comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Explicit
    Sub essai()
    Dim i As Long, c As Range
    Application.ScreenUpdating = False
    With Sheets("Feuil1")
    For i = 2 To .Range("m65535").End(xlUp).Row
    With Sheets("Feuil2")
    Set c = .Range("k2:k" & .Range("k65000").End(xlUp).Row).Find(Sheets("Feuil1").Cells(i, 13))
    If c Is Nothing Then Sheets("Feuil3").Range("g65536").End(xlUp)(2) = Cells(i, 13)
    End With: Next i: End With
    End Sub

  9. #9
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    Ca fonctionne très bien merci!!!

    Parcontre je n'ai rien compris à la syntaxe!!!! donc bon je vais essayer de faire des recherches sur With, et aussi j'ai pas trop l'habitude de la fonction xlup, je connaissai xldown, enfin je vais essayer de déchiffrer tout ça.

    merci laeticia en tout cas!

  10. #10
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    re,

    Cette instruction permet d'exécuter une série d'instructions se rapportant à un même objet ou à un même type défini par l'utilisateur. Elle permet une exécution du code plus rapide et évite les saisies répétitives car tu qu'une seule fois le nom de l'objet ou de la variable.

    tu remarques qu'il y a des points

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 2 To .Range("m65535").End(xlUp).Row
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set c = .Range("k2:k" & .Range("k65000").End(xlUp).Row)
    la différence entre xlup & xldown
    xldown la boucle par du haut vers le bas inconvenient si il rencontre une cellule vide la boucle s arrête on l' utilise bien sûr on l'utilise quand on recherche la premiere cellule vide

    part du bas vers le haut de la derniere cellule pleine jusqu' a la prémiere pas d arrêt si cellule vide entre

    ps j 'ai oublie de dire bonjour a lilp1

  11. #11
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    Merci pour toutes ces explications, c'est vraiment sympa laeticia!

    Par contre toute petite question, réponds-y quand tu as du temps, je comprend pas le (2) dans cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil3").Range("g65536").End(xlUp)(2)
    voilà tout, le reste je pense avoir cerné, c'est bien que tu m'ai donnée une fonction qui optimise Excel car j'ai énormément de données à brasser donc ça m'arrange, j'essairai de réutiliser With à bon escient!

    Merci pour tout laeticia ainsi que lilp1.

  12. #12
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    re, le 2 est une simplification de offset

    tu peus écrire comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If c Is Nothing Then Sheets("Feuil3").Range("g65536").End(xlUp).Offset(1, 0) = Cells(i, 13)

  13. #13
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    Merci c'est génial, je viens de comprendre Offset!!!
    Oui, je suis vraiment nulle en vba!
    merci beaucoup, bonne journée!

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

Discussions similaires

  1. Problème avec un code Vba Excel
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 23/10/2007, 16h43
  2. Problème avec un TreeView VBA
    Par JojoAlex dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 22/05/2007, 16h59
  3. Problème avec une instruction VBA
    Par Jpeg69 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/05/2007, 12h58
  4. Problème avec fichier Excel génère erreur
    Par Yanmeunier dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 17/02/2006, 11h53
  5. Problème avec open() [Excel VBA]
    Par heddicmi dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 28/11/2005, 16h21

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