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 :

Trouver dans une cellule toutes valeurs differentes


Sujet :

Macros et VBA Excel

  1. #1
    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 Trouver dans une cellule toutes valeurs differentes
    Bonjour, j'utilise la méthode Find pour trouver certaines valeurs dans des colonnes, simplement j'aurrait besoin que pour une certaine recherche, la recherche ce fasse sur la colonne A et qu'elle me renvoit toutes les lignes ou ne se trouvent pas la valeur '***'.
    Pour le moment, mon code de recherche est :
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    Set a = .Range("A1:A" & dl).Find("CAE")
    Je recherche donc dans cet exemple la valeur 'CAE' dans la colnne 'A', mais maintenant j'aimerais que a la place de 'CAE' il me cherche toutes les valeurs différentes.

  2. #2
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Je vais comprendre que tu cherches toutes les cellules qui ne contienne pas CEA. Parce qu'a te lire ce n'est pas évident
    a mon avis il va falloir te fendre d'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dim cel as range
    for each cel in .Range("A1:A" & dl)
       if instr(cel,"CEA")=0 then
          'tu récupère la ligne de cel avec cel.row
       end if
    next cel
    Ou alors il y a peut être une instruction qui permet de "soustraire" une plage a une autre mais je ne connais que union et intersect
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  3. #3
    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
    J'ai penser a
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    Find(What <> "***")
    Sauf qu'il ne me renvoit aucune valeur.
    Par contre, je ne comprend pas le code que tu a mit

  4. #4
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dim cel as range
     
    for each cel in .Range("A1:A" & dl) 'pour chaque cellule de la plage "A1:A" & dl
       if instr(cel,"CEA")=0 then    'si la celule ne contient pas CEA
          'tu récupère la ligne de cel avec cel.row
       end if
    next cel
    C'est plus clair ainsi?
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  5. #5
    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
    Merci, mais n'y aurrait-il pas moyen de le faire avec la méthode 'find' car la fonction 'InStr' je ne la matrise pas du tout.
    Voici mon code :
    Code vba : 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    With Sheets(nomfeuille)
        dl = .Range("A" & Rows.Count).End(xlUp).Row
        Set a = .Range("A1:A" & dl).Find(What <> "***")
        'Emepeche le rafraichissement de l'écran, pour ne pas voir le traitement
        Application.ScreenUpdating = False
        If Not a Is Nothing Then
        'création d'une nouvelle feuille et on l'a renomme
        Sheets.Add After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = "Ecriture"
        Sheets(nomfeuille).Select
        firstaddress = a.Address
        irow = 0
        'copie des lignes concerner
      '  For x = 0 To dl
        Do While Not a Is Nothing
            irow = irow + 1
            Sheets("Ecriture").Cells(irow, 1).Columns("A:BP").Value = a.EntireRow.Value
            'Set a = .Range("A" & a.Row, "A" & dl).Find(What <> "***")
            If a.Address = firstaddress Then
              Exit Do
            End If
            If a Is Nothing Then
                Exit Do
            End If
            firstaddress = a.Address
         Loop
      '  Next x
        End If
        Sheets("Ecriture").Select
        Call LigneChampsEcrGen
        End With
        Exit Sub
    Bon le 'find(what <> '***'') ne marche pas, mais si il existe une methode avec find, car je ne voit pas comment integrer le instr dans le code

  6. #6
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    je comprend que tu n'arrive pas a le mettre dans ce code qui me fait pensé (ne te vexe pas) a une très belle usine a gaz.

    ton deuxième do est totalement inutile
    tu fais
    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
        firstaddress = a.Address
        irow = 0
        'copie des lignes concerner
      '  For x = 0 To dl
        Do While Not a Is Nothing
            irow = irow + 1
            Sheets("Ecriture").Cells(irow, 1).Columns("A:BP").Value = a.EntireRow.Value
            'Set a = .Range("A" & a.Row, "A" & dl).Find(What <> "***")
            If a.Address = firstaddress Then
              Exit Do
            End If
            If a Is Nothing Then
                Exit Do
            End If
            firstaddress = a.Address
         Loop
    Ce que je traduirais par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    c=b   (firstaddress = a.Address)
    Tant que a existe   ( Do While Not a Is Nothing)
       on touche pas à a
       si c=b on quitte le tant que   (If a.Address = firstaddress Then Exit Do)
     
       dautre test qui ne seront jamais fait puisque c=b
       c=b des fois que le premier n'est pas marché (firstaddress = a.Address)
    fin du tant que

    Essaye de suivre ton code en mode pas a pas (touche F8)
    Regarde un peu comment le simplifier et ensuite on pourra essaye d'utiliser le instr si personne n'a mieu
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  7. #7
    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
    Il me renvoit tjrs a is nothing, du coup, il ne rentre jamais dans ma boucle

  8. #8
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Qui? renvoie quoi? ou? comment? quel boucle? quel code as-tu utilisé?

    Pour ce genre de question il existe des site de voyance qui pourrais peut être t'aider certain semble proposer une première consultation gratuite....
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  9. #9
    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
    lol, c'est vrai que jpeut difficilement faire moins précis. a est toujours nul,, donc il ne trouve jamais une autre valeur que '***' pourtant il existe des lignes ou '***' ne st pas présents, de plus normalement il devrait passer a la ligne suivante si a la premiere ligne il ne trouve pas autre chose que '***'

  10. #10
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Mais tu utilise quel code c'est ca LA question.

    Je t'ai dit de reprendre ton code (j'ai oublié de préciser une version qui marche ca me semblé évident, donc une version qui cherche CAE)
    De virer tous les trucs inutiles et ensuite on adapte pour chercher ce qui ne contient pas ta chaine de caratère.

    Commence par te mettre en Option Explicit
    écrit tout en haut de ton module
    et fait des déclarations de variable
    cela taurais permis de voir tout de suite que ne marchera pas puisque VBA considère que what est une variable L'ancien stagiaire (si je me souvient bien tu es en stage et tu as récupéré le programme d'un ancien stagiaire) ne la peut être pas fait mais dans ce cas il devait être drôlement sur de lui ou alors il a bien galéré

    Tant que tu n'as as fait ca je ne chercherais pas d'avantage. Si tu ne le fais pas il te reste a attendre qu'une bonne âme vienne prendre le relais
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  11. #11
    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
    Je suis repasser a un code qui recherche la valeur 'CAE' avec Option Explicit

  12. #12
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Maintenant tu le simplifie en virant les truc inutile. Et tu reviens nous montrer ce que ca donne. Mais avant vérifie bien que chaque ligne de code a son utilité et que tu n'a pas des pseudo boucle do qui ne serve a rien
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  13. #13
    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
    Voila mon code epuré, il n'y a pas grand chose de changé, et la boucle est util si je la supprime (j'ai teste) il ne regarde pas tt lé lignes

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

Discussions similaires

  1. [XL-2010] Controler dans une table si valeur differente d'une autre table
    Par zaza45 dans le forum Excel
    Réponses: 5
    Dernier message: 13/09/2013, 15h19
  2. Réponses: 2
    Dernier message: 27/06/2013, 15h49
  3. Réponses: 8
    Dernier message: 04/04/2011, 10h40
  4. Réponses: 14
    Dernier message: 07/04/2010, 10h27
  5. Trouver dans une colonne la valeur la plus ancienne.
    Par borislenium dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 25/06/2008, 15h56

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