Probleme code VBA

Résolu/Fermé
Alex2109 - Modifié par pijaku le 27/01/2017 à 11:43
 Alex2109 - 27 janv. 2017 à 15:48
Bonjour,

Je suis a la recherche d'un code qui fonctionne pour copier les adresses mails des clients qui l'ont fourni en feuille 1 vers la colonne prévue a cet effet en feuille 2.
En clair j'ai deux feuilles sur excel avec des informations sur plusieurs clients. Dans ces deux feuilles il y a quasiment les mêmes clients. Seulement sur la feuille 1 y est indiqué des adresses mails qu'il faut mettre en feuille 2 dans la colonne correspondante.
Dans la feuille 2 il y a deja quelques adresse mails qui ont été rajouté manuellement mais il manque au moins 200.
Je veux donc que le code fasse matcher les noms des clients de la colonne B feuille 1 avec la colonne C feuille 2, afin que des qu'il trouve le même nom il aille copier l'adresse mail en colonne G de la feuille 1 vers la colonne L de la feuille 2.

Voici mon code, mais rien ne se passe... Et Excel ne me renvoie pas de message d'erreur. Je suis débutant sur VBA, et je n'arrive vraiment pas a saisir d'ou vient le problème.
Si l'un de vous peut m'aider je serai vraiment reconnaissant.

Merci d'avance a tous et à toutes.


Sub saisie2()
Dim Lig As Long
Dim NbrLig As Long, NumLig As Long
Dim cde As String
Dim i As Integer


NbrLig = Worksheets("Feuil2").Range("C" & 65536).End(xlUp).Row
NumLig = Worksheets("Feuil1").Range("B" & 65536).End(xlUp).Row
For Lig = 1 To NbrLig
   cde = Worksheets("Feuil2").Range("C" & Lig)
   If cde = "" Then GoTo lab
   i = 1
   For i = 1 To NumLig
      If Worksheets("Feuil1").Range("B" & i).Value = char Then
         Worksheets("Feuil1").Range("G" & i).Copy
         Worksheets("Feuil2").Range("L" & Lig).Select
         Selection.Paste
         Exit For
      End If
   Next i

lab:
Next Lig
End Sub
A voir également:

2 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
27 janv. 2017 à 11:45
Bonjour,

Regarde ces deux lignes de ton code que j'ai volontairement rapprochées :
cde = Worksheets("Feuil2").Range("C" & Lig)
If Worksheets("Feuil1").Range("B" & i).Value = char Then

0
Merci pur ta réponse pijaku,

mais je ne saisi pas, j'ai esayé de remplacer le "i" par "lig" mais ca ne fonctionne toujours pas, il me ressort une erreur du coup...

Un petit peu plus d'indication peut etre?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
27 janv. 2017 à 12:28
i et Lig étaient bon.
Par contre, que penser de cde et char ?
0
Alex2109 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
27 janv. 2017 à 14:31
Je ne les ai pas défini correctement peut être?

Je ne suis pas tres bon en programmation mais j'aimerai vraiment comprendre d'ou vient le probleme?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751 > Alex2109
27 janv. 2017 à 14:45
Si tu veux comparer l'égalité entre : Worksheets("Feuil2").Range("C" & Lig) et Worksheets("Feuil1").Range("B" & i).Value soit tu utilises l'expression entière :
If Worksheets("Feuil1").Range("B" & i).Value = Worksheets("Feuil2").Range("C" & Lig).Value

soit tu utilises une variable ET UNE SEULE !
If Worksheets("Feuil1").Range("B" & i).Value = cde Then


Voici ton code légèrement modifié :
Sub saisie2()
Dim Lig As Long
Dim NbrLig As Long, NumLig As Long
Dim cde As String
Dim i As Integer


NbrLig = Worksheets("Feuil2").Range("C" & 65536).End(xlUp).Row
NumLig = Worksheets("Feuil1").Range("B" & 65536).End(xlUp).Row
With Worksheets("Feuil2")
   For Lig = 1 To NbrLig
      cde = .Range("C" & Lig)
      If cde <> "" Then 
         For i = 1 To NumLig
            If Worksheets("Feuil1").Range("B" & i).Value = cde Then
               Worksheets("Feuil1").Range("G" & i).Copy .Range("L" & Lig)
               Exit For
            End If
         Next i
      End If
  Next Lig
End With
End Sub
0
Alex2109 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
27 janv. 2017 à 15:19
Ca ne fonctionne pas non plus. Peut etre est ce du au fait que les deux feuilles n'aient pas le meme nombre de ligne et que les client ligne par ligne d'une feuille a l'autre ne soit pas pareil?

C'est bizarre, car en lisant ton code j'ai tres bien compris ce qu'il faisait...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751 > Alex2109
27 janv. 2017 à 15:23
Peut etre est ce du au fait que les deux feuilles n'aient pas le meme nombre de ligne et que les client ligne par ligne d'une feuille a l'autre ne soit pas pareil?
Non rien à voir.
Je dirais plutôt un souci avec les données.
Si tu ajoutes un Stop, est ce que ta macro s'arrête :
Sub saisie2()
Dim Lig As Long
Dim NbrLig As Long, NumLig As Long
Dim cde As String
Dim i As Integer


NbrLig = Worksheets("Feuil2").Range("C" & 65536).End(xlUp).Row
NumLig = Worksheets("Feuil1").Range("B" & 65536).End(xlUp).Row
With Worksheets("Feuil2")
   For Lig = 1 To NbrLig
      cde = .Range("C" & Lig)
      If cde <> "" Then 
         For i = 1 To NumLig
            If Worksheets("Feuil1").Range("B" & i).Value = cde Then
Stop
               Worksheets("Feuil1").Range("G" & i).Copy .Range("L" & Lig)
               Exit For
            End If
         Next i
      End If
  Next Lig
End With
End Sub

Si la macro ne s'arrête jamais, cela signifie simplement qu'aucune des données de ta colonne C Feuil2 ne se retrouve en colonne B Feuil1...
0