dépannage vba

D

ddlenrager

Guest
Salut à vous tous, je suis sur que quelqu'un pourra m'aider. je souhaite, après avoir extrait une liste de doublons, extraire les autres informations je joins un fichier pour mieux comprendre. je précise j'ai trouvé le code sur un fichier dans le forum et aurait souhaité contacté l'auteur afin qu'il m'explique ce code car je n'ai que quelques notions en vba que j'aimerai dévellopé merci à tous d'avance
 

Jacques87

XLDnaute Accro
J'ai regardé ton fichier et je t'avoue que j'ai du mal à te suivre

Dis moi si j'ai bien compris :

Tu as deux listes de valeurs
1 en colonne A
1 autre en colonne B
et tu veux les comparer

pour chaque cellule de la colonne A tu regardes si elle existe en B
si c'est le cas tu mets les deux cellules en jaune et tu transcris la cellule A en E et en F
Quand c'est terminé tu effaces la colonne F

Je trouve cela bien compliqué et c'est le cas du code également

Peux-tu expliquer quelle est la finalité de ce tri

A+
 
D

ddlenrager

Guest
c vrai le code est compliqué je n'arrive pas à comprendre le moment ou la copie ce fait dans les deux cellules. Je n'arrive toujours pas à retrouver sur quel post je l'ai pris car j'aurais voulu avoir plus d'explication. J'ai donc fait un bout de code pour supprimer les données de la colonne E et je voudrais mettre dans cette colonne les valeurs de la colonne B qui ne sont pas des doublons avis aux amateurs de code vba pour m'aider a comprendre ce code
 

Jacques87

XLDnaute Accro
c vrai le code est compliqué

Quel euphémisme !

Voyons ce code

1)Combien = Len(Range('a2').Value), je suppose que du fait que tu veux comparer les données en A et B, elles seront à fortiori de même longueur, donc ligne inutile, à moins que tu inclues des données de longueur différente et que la comparaison se fasse sur le début du 'mot'

2)Set EAN12 = Sheets(1).Range('A2:A' & Range('A65536').End(xlUp).Row)
3)Set EAN13 = Sheets(1).Range('B2:A' & Range('B65536').End(xlUp).Row)
4)x = 2

5)For Each cell In EAN12
6)For i = 1 To EAN13.Count
7)If CStr(cell) = CStr(Left(Cells(i, 2), Combien)) Then ' si la remarque précédente est prise en compte il suffira d'écrire CStr(Cells(i,2))
8)Cells(x, 4) = cell: Cells(x, 5) = Cells(i, 2)
9)cell.Interior.ColorIndex = 6: Cells(i, 2).Interior.ColorIndex = 6
' par souci de clarté je ne mets jamais 2 instructions sur la même ligne
10)x = x + 1
11)End If
12)Next i
13)Next cell

alors voila ce qui se passe
1) tu comptes le nombre de caractères que le texte de A2 contient
2) tu attribues à la variable EAN12 la plage (A2:dernière cellule occupée de la colonne A)
3) même chose pour la colonne B
4) tu attribues la valeur 2 à la variable x
5) pour chaque cellule de la plage EAN12
6) de la cellule B1 à la dernière cellule de la plage EAN13*
7) si le texte de la cellule de EAN12 est identique à celui de la cellule de EAN13 alors
8) on écrit le contenu de la cellule de EAN12 dans Dx (x la premmière fois vaut 2) et on écrit en Fx le contenu de Bi ( je ne comprends pas pourquoi faire ceci car tu écris ni plus ni moins le contenu de la cellule EAN12 en Dx et Fx ni plus ni moins)
9) tu mets en jaune les cellules que tu viens d'étudier en A et B comme étant identiques
10) tu incrémentes x d'une unité pour pouvoir écrire la prochaine fois en D et F sur la ligne inférieure
11) le test est fini
12) tu passes à la cellule suivante dans EAN13 et tu recommences
13) tu recommences toute la procédure précédente en passant à la cellule suivante dans EAN12

Voila

A ta disposition pour la suite quand tu veux
 

porcinet82

XLDnaute Barbatruc
Salut ddlenrager, Salut Jacques ;),


Je te propsose un code qui fait ce que tu souhaites, c'est a dire qui met en colonne E les valeurs qui ne sont pas en colonne D. Pour ce faire, je teste la couleur a partir de la colonne B.
Je me suis permi de mettre l'explication du code au cas ou.

Code:
Sub non_doublons()
Dim i As Integer, k As Integer

k = 2
For i = 2 To Range('B65536').End(xlUp).Row
'pour k allant de 2 a la derniere cellule non vide de la colonne B
    If Cells(i, 2).Interior.ColorIndex = xlNone Then
    'si la cellule ligne i colonne 2 na pas de couleur de fond alors
        Cells(k, 5).Value = Cells(i, 2).Value
        'la cellule ligne k colonne 5 prend la valeur de la cellule ligne i colonne 2
        k = k + 1
        'k prend k + 1 pour incrementer le compteur de ligne
    End If
Next i
End Sub

Concernant le code deja present, c'est vrai que c'est un peu bizarre puisqu'il copie en colonne D et E la meme chose. Je pense qu'il faudrait son utilisation d'origine pour comprendre son but.

Deux petite question pour Jacques cependant, a quoi sert CStr, et connaissais-tu cette ecriture Cells(x, 4) = cell: Cells(x, 5) = Cells(i, 2), et si c'est le cas, est-ce que les : sont une variante de If ... Then.

Merci d'avance.

@+
 

Jocelyn

XLDnaute Barbatruc
Bonjour le Forum,
Bonjour ddlenrager, Jacques87,

Bon alors Jacques87 ne ris pas trop de moi :) :) j'ai bricoler le code je crois que ca répond a la demande de ddlenrager

Jocelyn

bon alors re bonjour et bonjour a ceux qui n'étaient pas la même le fichier ne veut pas passer a croire que le forum a peur que je lui mette un virus avec mes essais en macro :sick: :angry:

Message édité par: Jocelyn, à: 10/02/2006 14:57
 

CBernardT

XLDnaute Barbatruc
Bonjour à tous,

Une macro qui fait ce qui est demandé, du moins je crois bien ! :):)

Cordialement

Bernard [file name=MatchingEANV1.zip size=14216]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/MatchingEANV1.zip[/file]
 

Pièces jointes

  • MatchingEANV1.zip
    13.9 KB · Affichages: 22

porcinet82

XLDnaute Barbatruc
Oula, j'ai senti que j'ai croisé Jocelin (que je salut au passage), et je m'en sort avec une petite bosse. :)

Sinon faute de rafraichissement, je vois que Jacques a expliqué le code, et donc de ce fait, qu'il a repondu a mes questions. Donc si j'ai bien compris (arreté moi si je me trompe), CStr permet de considérer la chaine de caractère en texte.

Et bien, malgré la fatigue (du a une soirée étudiante bien arrosé) je n'arrete pas l'apprentissage sur ce forum. :)

@+

Edition : Et bien il y a du monde sur ce fil, salut Bernard!!!

Message édité par: porcinet82, à: 10/02/2006 15:01
 

Jocelyn

XLDnaute Barbatruc
GGGGGRrrrrrr !!!!!!!!!!!! vingt minute pour changer 2 ligne ca mérite d'allé sur le forum [file name=essaimacro.zip size=13202]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/essaimacro.zip[/file]
 

Pièces jointes

  • essaimacro.zip
    12.9 KB · Affichages: 17
  • essaimacro.zip
    12.9 KB · Affichages: 17
  • essaimacro.zip
    12.9 KB · Affichages: 16

Jacques87

XLDnaute Accro
Bonjour Ro..., Bonjour Jocelyn

Ro..., voici les réponses aux questions que tu me poses

CStr est une contraction de Conversion en String, c'est à dire que les valeurs dans les cellules étant numériques, il les transforme en Texte pour les comparer, ce qui est inutile dans son exemple

Cells(x, 4) = cell: Cells(x, 5) = Cells(i, 2), les deux points ne sont absolument pas une contractionn de If .. Then ... Else ... End If, mais un séparateur d'instruction.
En effet tu peux mettre plusieurs instructions sur une même ligne à condition de les séparer par ':', mais alors, comme je l'ai dit, je n'utilise jamais cette méthode
Conçoies tu un code sur une seule ligne, les instructions étant séparées par ':' .... illisible et sujet à erreur

Voila, voila, ... à bientôt mon ami

Jocelyn
Bon alors Jacques87 ne ris pas trop de moi j'ai bricoler le code je crois que ca répond a la demande de ddlenrager
pas de fausse modestie, je suis sur que ton code est surement meilleur que le mien. Et j'en suis sur car moi je n'en ai pas écrit mais toi si tu en as écrit un tu ne l'as pas Edité (lol).
Bien Jocelyn je te présente toutes mes amitiés


EDITION
Jocelyn je viens de regarder ton fichier, ça marche très bien, tu vois qu'il ne faut jamais douter de soi

Message édité par: Jacques87, à: 10/02/2006 15:12
 

Discussions similaires

Réponses
12
Affichages
404
Réponses
6
Affichages
451

Statistiques des forums

Discussions
312 508
Messages
2 089 132
Membres
104 042
dernier inscrit
tropsy89