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 :

tester existence valeur dans colonne [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 176
    Par défaut tester existence valeur dans colonne
    Bonsoir,

    Voici ce que je cherche à faire :

    Col Départ	Résultat Voulu
    Col A	        Col B
    23	        23
    24	        24
    24	        25
    24	        28
    25	        40
    25	
    28	
    28	
    28	
    40	
    40	
    24	
    24	
    25	
    25
    Avec des mots, il s'agit d'obtenir la liste des différentes valeurs disponibles.
    J'ai essayé avec des boucles du type (en faux pseudocode!):
    Pour row du début de col A à la fin de colA, si Valeur Col A Row + 1 <> Valeur Col A Row, then copie Col A Row dans Col B.
    Mais en fait, il faut que je teste (avant de copier dans ColB) si la Valeur Col A Row existe déjà dans ColB. Mais quelles sont les bonnes pratiques et les méthodes pour cela ?

    Merci

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    A partir d'Excel 2007, utilise RemoveDuplicate

    Exemple, on supprime tous les doublons de la colonne A de Feuil1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Feuil1").Range("A:A").RemoveDuplicates Columns:=1, Header:=xlYes

  3. #3
    Expert éminent


    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
    Par défaut
    bonjour,

    utiliser le filtre avancé ne te suffit pas ..?

    1. Placer un texte reprenant l’entête de colonne (ColA) à l'endroit ou tu veu placer ta colonne résultat
    2. sélectionner ta zone source puis "donnée filtre avancé"
    3. Case à option "copier vers autre emplacement"
    4. et pour copier A selectionner la cellule destionation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub testCopie()
      Dim rSource As Range
      Dim rDest As Range
      Set rSource = Application.InputBox( _
        prompt:="Selectionner vos données sources (entête comprise)", Type:=8)
      Set rDest = Application.InputBox( _
        prompt:="Cellule de destination", Type:=8)
       'Ajouter ici des test de contrôle sur les plages saisies..
       rDest.Cells(1, 1) = rSource.Cells(1, 1) ' Copie l'entête
          rSource.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=rDest, Unique:=True
     
    End Sub
    [EDIT] oup's l'on s'est croisé avec mercatogn, la différence c'est que ce que je propose ne touche pas au données sources...

  4. #4
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    En faisant un Mixt Produit mercatog / bbil

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Gogo2()
     
    With Worksheets(1)
       .Columns("A:A").Copy Destination:=Columns("H:H")  'si col H vide
       .Columns("H:H").RemoveDuplicates Columns:=1, Header:=xlYes
       .Range("H2").Value = "Resultat Voulu" 'ligne 1 vierge, ligne 2 titres
    End With
    End Sub
    Cordialement,

    Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

    Didier

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 176
    Par défaut
    Merci de vos réponses
    La sub proposée par bbil me convient très bien.
    En revanche, je n'ai pas besoin de recopier l'entête.
    Je supprime donc la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     rDest.Cells(1, 1) = rSource.Cells(1, 1) ' Copie l'entête
    Mais, j'ai fait plusieurs tests et je me retrouve avec le problème que la première case de la colonne source apparaît 2 fois dans la colonne de destination.

    Par exemple :

    rSource    rDest
    24           24
    24           24
    24           28
    24           33
    28           35
    28           37
    28           40
    33           41
    33           42
    33           43
    33           
    35           
    35           
    35           
    37           
    37           
    40           
    40           
    40           
    41
    41
    41
    41
    41
    41
    42
    42
    42
    43
    43
    Et je n'arrive pas en m'en défaire.
    Au passage comment réordonner les valeurs de rDest dans l'ordre croissant ?

    merci

  6. #6
    Expert éminent


    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
    Par défaut
    Citation Envoyé par tallent_e Voir le message
    M..
    Je supprime donc la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     rDest.Cells(1, 1) = rSource.Cells(1, 1) ' Copie l'entête
    ...
    et ton 24 devient l'entête..

  7. #7
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 176
    Par défaut
    Citation Envoyé par bbil Voir le message
    et ton 24 devient l'entête..
    en plus, j'ai ajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    rDest.RemoveDuplicates Columns:=1, Header:=xlNo
    comme çà, les doublons disparaissent bel et bien.

    merci à tous

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

Discussions similaires

  1. [RegEx] tester une valeur dans un champ multivalué
    Par omarlet dans le forum Langage
    Réponses: 1
    Dernier message: 25/06/2010, 15h08
  2. [Intraweb] Tester existance image dans TIWImageFile
    Par Maglight dans le forum Débuter
    Réponses: 0
    Dernier message: 18/04/2009, 23h49
  3. Tester existence valeur dans ARRAY
    Par Matmal11 dans le forum Langage
    Réponses: 2
    Dernier message: 15/06/2007, 11h04
  4. Réponses: 1
    Dernier message: 24/05/2007, 14h53
  5. [vb excel]Tester une valeur dans une ligne
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/09/2005, 13h58

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