Macro vba

Résolu/Fermé
RomainG - 27 mai 2011 à 09:58
ed555 Messages postés 61 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 26 octobre 2018 - 27 mai 2011 à 15:57
Bonjour,

Ceci est un problème relativement similaire à une question que j'ai posé hier. J'ai donc essayé de m'inspirer de l'aide que l'on m'a apporté hier mais en vain.

Col 1 Col 2

1 1
1 1
1 2
1 2
2 3
2 3
2 4
3 5
3 5
3 5
3 6
3 6

Je souhaiterai créer deux autres colonnes à partir de ces deux premières. La colonne 4 serait la colonne 2 mais sans doublon. Et je souhaiterai qu'en colonne 3 apparaisse les valeurs de la colonne 1 correspondant au valeur de la colonne 2. Pour plus de clarté le résultats de mon exemple serait comme ci dessous :

Col 3 Col4

1 1
1 2
2 3
2 4
3 5
3 6

Pouvez m'aider à la création d'une macro vba pour la réalisation de la colonne 3. (La colonne 4 n'étant qu'un simple comptage classique).

Sub moyenne_lot()
i = 1
Do While Cells(i, 2) <> ""
valeur = Cells(i, 1)
lot = Cells(i, 2)
Do While Cells(i + 1, 1) = valeur
lot = valeur
i = i + 1
Loop
Loop
End Sub


Voici ce que j'ai essayé de faire mais sans grand résultats.

Merci à vous.

Romain





A voir également:

4 réponses

ed555 Messages postés 61 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 26 octobre 2018
27 mai 2011 à 10:22
salut,

"je souhaiterai qu'en colonne 3 apparaisse les valeurs de la colonne 1 correspondant au valeur de la colonne 2"

qu'entends-tu par là ? j'ai du mal à voir...
0
C'est vrai que c'est un problème assez dur à expliquer par écrit. Je vais essayer d'être plus précis.
On considère que la colonne 4 est la même colonne 2 mais sans doublon (elle est donc forcément plus petite). La colonne 2 est associé à des chiffres de la colonne 1.
Je souhaiterai que dans la colonne 3 les chiffres soient ceux de la colonne 1, qui étaient affecté à ceux de la colonne 2.

Suis je assez clair? J'ai rédigé l'exemple pour que ce soit plus explicite mais s'il faut encore détailler certains point, je t'écoute.

Merci

Romain
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 27/05/2011 à 12:21
Bonjour

Sub apurer()  
Dim derlig As Long, cptr As Long  
Dim dico As Object  
Dim ref1, ref2  
Dim liste1, liste2  

derlig = Cells(Cells.Rows.Count, 2).End(xlUp).Row  
Set dico = CreateObject("scripting.dictionary")  
For cptr = 1 To derlig  
     ref1 = Cells(cptr, 2)  
     ref2 = Cells(cptr, 1)  
     If Not dico.exists(ref1) Then  
          dico.Add ref1, ref2  
     End If  
Next  
liste2 = dico.items  
liste1 = dico.keys  


Application.ScreenUpdating = False  
Range("C1:D40000").Clear  
Range("C1:C" & dico.Count) = Application.Transpose(liste2)  
Range("D1:D" & dico.Count) = Application.Transpose(liste1)  
End Sub  


je ne connais pas le vrai type de ref1,ref2 donc...
liste1 et liste2 doivent rester en variant

mais peut-^tre pouvait on le faire + simplement avec des filtres (si j'ai le temps, je regarderais)
Michel
0
ed555 Messages postés 61 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 26 octobre 2018
27 mai 2011 à 15:57
bravo michel_m, sacrée efficacité dans ton code !
j'ai tenté une solution avec des boucles for mais beaucoup plus complexe que la tienne...
0
Merci beaucoup Michel. Cela marche parfaitement bien. Je suis impressionné par la réactivité et la connaissance des membres de ce forum. Chapeau à vous !

Encore merci !

Romain
0