Comparaison colonnes Xls [Résolu]

Signaler
Messages postés
34
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
16 mars 2008
-
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
-
Bonjour tout le monde,

voila j'ai un gros souci
Je débute un peu en VB donc jaimerais beaucoup votre aide

En fait j'ia un fichier excel qui a 2 tableaux sur la même feuille
dans le premier on a 10 colonnes on la première est la colonne Tuteur

Dans le deuxième tableau j'ai une seule colonne qui regoupr les nom de tout les responsables.

Le but est de définir une macro qui va permettre de parcourir le premier tableau sur la colonne Tuteur et verifier que ce nom n'existe pas ds le deuxième tableau et donc si le nom  n'existe pas on crée une nouvelle feuille ("New Tuteur") et on copie la ligne  entière  concernée ( donc les 10 cellules ) du premier tableau dans cette nouvelle feuille et ainsi de suite jusqu'a fin de parcours du tableau 1.

Merci de votre aide

17 réponses

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Tu écris ceci
If Sheets("LISTE").Range("A" & i).Value <> Sheets("LISTE").Range("AB" & i).Value Then
Range("A" & i & ":W" & i).Copy  'éviter les Select
Sheets("Restant").Range("A" & i).PasteSpecial

Es-tu certain de copier les données de la bonne feuille ?
Peut-être qu'il manque le Sheets("LISTE") ?

If Sheets("LISTE").Range("A" & i).Value <> Sheets("LISTE").Range("AB" & i).Value Then
Sheets("LISTE").
Range("A" & i & ":W" & i).Copy  'éviter les Select

Sheets("Restant").Range("A" & i).PasteSpecial

PS: tu ne peux pas joindre de fichier ici sur le site... mais tu peux utiliser un autre site dédié à ce genre de chose.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
= ou <>
sont à peu de chose près identiques dans le comportement ...

Es-tu certain que les 2 valeurs A et AB sont absolument identiques, comme dans ton exemple avec Matias Tagueule ?

S'il y a un espace en trop ou une majuscule versus une minuscule, les 2 valeurs ne seront pas identiques donc copiées... Il faudra alors user d'astuce.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Bienvenue à toi.

Comme tu es nouveau, je t'inviterais à lire les règlements du site...
(Je sens que je me répète, là... )

Donc, on ne demande pas de code tout fait...

Si tu as un problème particulier, donne-nous le code où ça coince. S'il y a un message d'erreur, donne-nous son numéro et description pour faciliter la tâche. Et pose des questions claires et précises sur UN problème que tu rencontres.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
34
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
16 mars 2008

Le detail de mon code est le suivant

 Dim val1 As Range
 Dim val2 As Range
 Dim i As Integer
 For i = 3 To 5000
 'Set val1 = Sheets("LISTE").Range("AB3" & i)
  'Set val2 = Sheets("LISTE").Range("A3" & i)
   If Sheets("LISTE").Range("A" & i).Value <> Sheets("LISTE").Range("AB" & i).Value Then

Range("A &i:W &i").Select
Selection.Copy

Sheets("Restant").Activate
Range("A &i:W &i").Paste

End If
 Next i

le fait est que j'ai un message d'erreur d'execution 1004
La méthode Range coince

Je débute en VB
Dc pliz si vs pouvez m'éclairer
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Ce bout de code devrait être modifié
<strike>Range("A &i:W &i").Select</strike>
pour
Range("A" & i & ":W" & i).Copy  'évite les Select
Sheets("Restant").Range("A" & i).PasteSpecial

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
34
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
16 mars 2008

Merci MPi² pour ta réponse

En fait çà se passe un peu mieux pendant l'excution
Mais j'ai de nouveau un message d'erreur sur la partie en italique : Err 13 incompatibilité de type

En fait je souhaite copier uniquement les ligne dont les valeurs de la colonne A ne sont par présentes  dans la colonne  AB
Et pour l'instant il a l'air de faire quasi le contraire

 Dim val1 As Range
 Dim val2 As Range
 Dim i As Integer
 For i = 3 To 5000
 Set val1 = Sheets("LISTE").Range("AB3" & i)
  Set val2 = Sheets("LISTE").Range("A3" & i)

   If Sheets("LISTE").Range("A" & i).Value <> Sheets("LISTE").Range("AB" & i).Value Then

Range("A" & i & ":W" & i).Copy  'éviter les Select
Sheets("Restant").Range("A" & i).PasteSpecial

End If
 Next i
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Lorsque tu cliques le bouton "déboguage" du message d'erreur, la ligne en problème apparaît en jaune. À ce moment, passe ta souris au-dessus de la variable i
Tu verras sa valeur, donc la ligne à problème.

Vérifie alors les valeurs des 2 cellules A et AB sur cette ligne. Il se peut qu'une soit un nombre et l'autre du texte...(?) À toi de réagir en conséquence.

Ce que tu peux faire pour la comparaison, c'est de "caster" le type de valeurs que tu veux comparer.
ex:
If CStr(Sheets("LISTE").Range("A" & i).Value) <> CStr(Sheets("LISTE").Range("AB" & i).Value) Then

En utilisant CStr(), tu fais une comparaison sur la valeur textuelle des cellules et ça permet souvent d'éviter ce genre d'erreur. Si ça ne règle pas le problème, donne-nous la valeur des 2 cellules qui sont comparées lorsque ça plante. Ça pourrait aider.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
34
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
16 mars 2008

Apparemmet il execute le code sans renvoyer de message d'erreur
Mais il me renvoi toujours la totalité des lignes y compris celles pour lesquelles la valeur dans A est égale à celle qui est dans AB
Messages postés
34
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
16 mars 2008

comment je peux envoyer un fchier exemple ?
dois-je modifier mon code?
Messages postés
34
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
16 mars 2008

J'ai fait exactemment comme çà mais il me recopie toutes les ligne même celles qui sont pas concernées!!!!

En fait je saouhaite faire un tri des valeur

Ma colonne A s'appelle tuteur
Ma colonne AB c'est une liste avec nom et prénom du tuteur dans chaque cellule

Donc si le nom du tuteur est dans la liste on touche pas à la ligne concernée
Supposons Donald en ligne A3 et il est present dans AB23

La ligne A3 : W3 ne sera pas copiée
Par contre Martin ligne A10 n'est pas dans AB

Donc on copie la ligne dans "Restant"

Et là il parcours bien ma boucle mais il me copie quand même toutes les lignes A:W

Je voi pourtant pas ou est mon erreur
Messages postés
34
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
16 mars 2008

Peut-tu méclairer MPI² ?
Messages postés
34
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
16 mars 2008

J'ai fait exactemment comme çà mais il me recopie toutes les ligne même
celles qui sont pas concernées!!!!

En fait je saouhaite faire un tri des valeur

Ma colonne A s'appelle tuteur
Ma colonne AB c'est une liste avec nom et prénom du tuteur dans chaque cellule

Donc si le nom du tuteur est dans la liste on touche pas à la ligne concernée
Supposons Donald en ligne A3 et il est present dans AB23

La ligne A3 : W3 ne sera pas copiée
Par contre Martin ligne A10 n'est pas dans AB

Donc on copie la ligne dans "Restant"

Et là il parcours bien ma boucle mais il me copie quand même toutes les lignes A:W

Je voi pourtant pas ou est mon erreur

voici mon code  :

   For i = 3 To 400
   If CStr(Sheets("LISTE").Range("A" & i).Value) <> CStr(Sheets("LISTE").Range("AB" & i).Value) Then

Sheets("LISTE").Range("A" & i & ":W" & i).Copy  'éviter les Select

Sheets("Restant").Range("A" & i).PasteSpecial
End If

 Next i

mais il me fait juste un copier coller global
Sans tenir compte de ma condition

Quelqu'un peut maider???
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Je pense que je comprends un peu mieux... enfin, je pense...

Tu dis que tu as Donald en colonne A, disons, et tu dis que tu as le nom et prénom en AB.Donc, si A Donald et AB Donald Freshyback, la comparaison ne pourra pas être faite avec un "="

Il faudrait que tu utilises Instr() pour retracer le prénom dans AB.
Mais là il y a un problème s'il y a différents Donald.
À ce moment-là, il te faut comparer le prénom en A plus le nom en B (ou autre)

Ne sachant pas ce qu'il y a dans tes colonnes, je ne peux aller plus loin...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
34
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
16 mars 2008

En fait je ne fait fait de comparaison de nom et prénom

C'est juste j'ai une liste de tuteur mettons avec leur nom et prénom danss AB

et j'ai de A à W leur détail d'action avec en colonne A leur nom et prénom
Par contre dans A j'ai des nom qui ne sont pas dans la liste AB
Donc pour ceux là je copier la ligne de l'action que je reporte dans une autre feuille

exemple :

col A                                col B ........col W                             col AB

Donald freshyback          cours1.......présent                             Liste

Matias Tagueule              cours B.....présent                             Matias Tagueule

Jules Mytho                    coursC......Absent                             Donald fresyback

donc en comparaison les noms dans A et ceux de AB
On va recopier uniquement toute la ligne de Jules Mytho de A à W dans la feuille "Restant" et ainsi de suite

Peut suis-je un peu plus clair?
Merci de ton aide!!
Messages postés
34
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
16 mars 2008

PS : dans l'exemple dans AB j'ai bien le nom et le prénom d'est la mise en page qui a descendu  le nom!!!
Messages postés
34
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
16 mars 2008

thanks MPI
J'ai trouvé la solution !!
Avec une comparaison!!
C'était laborieux j'avoue!
:
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Bonne continuation !

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI