Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/11/2011, 01h10   #1
Membre du Club
 
Inscription : novembre 2010
Messages : 141
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 141
Points : 61
Points : 61
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
__________________
quantcorner.wordpress.com
tallent_e est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2011, 08h59   #2
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
A partir d'Excel 2007, utilise RemoveDuplicate

Exemple, on supprime tous les doublons de la colonne A de Feuil1
Code :
Worksheets("Feuil1").Range("A:A").RemoveDuplicates Columns:=1, Header:=xlYes
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/11/2011, 09h02   #3
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
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 :
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...
bbil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/11/2011, 10h34   #4
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Bonjour,

En faisant un Mixt Produit mercatog / bbil

Code :
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
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/11/2011, 11h36   #5
Membre du Club
 
Inscription : novembre 2010
Messages : 141
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 141
Points : 61
Points : 61
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 :
 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
__________________
quantcorner.wordpress.com
tallent_e est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2011, 11h45   #6
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Citation:
Envoyé par tallent_e Voir le message
M..
Je supprime donc la ligne :
Code :
 rDest.Cells(1, 1) = rSource.Cells(1, 1) ' Copie l'entête
...
et ton 24 devient l'entête..
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2011, 15h44   #7
Membre du Club
 
Inscription : novembre 2010
Messages : 141
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 141
Points : 61
Points : 61
Citation:
Envoyé par bbil Voir le message
et ton 24 devient l'entête..
en plus, j'ai ajouté :
Code :
1
2
 
rDest.RemoveDuplicates Columns:=1, Header:=xlNo
comme çà, les doublons disparaissent bel et bien.

merci à tous
__________________
quantcorner.wordpress.com
tallent_e est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h34.


 
 
 
 
Partenaires

Hébergement Web