Aide vba : Comparer deux colonnes A et B et ajouter à B ce qu'il manqu

Aide vba : Comparer deux colonnes A et B et ajouter à B ce qu'il manqu - VB/VBA/VBS - Programmation

Marsh Posté le 16-11-2010 à 14:35:49    

Slt j’ai besoin de votre aide s’ils vous plait.
 
Je me casse la tête depuis des jours a trouver une macro en vba capable de faire ce que je vais vous décrire en bas et comme je suis débutant je n’y arrive pas.
 
J’ai 2 fichiers excel : 1 nommé lcc Casa et l’autre fichier s’appelle suivi evolution.
 
Ce qu’il faut faire c’est qu’a partir du fichier lcc casa recopier les données dans le fichier suivi evolution.
 
Or le problème c’est que dans le fichier  lcc Casa il y a des codes erreur  qui ne sont pas dans le fichiher suivi evolution
 
Donc ce qu’il faut faire c’est comparer la colone 1 du fichier lcc casa à la colonne 1 du fichier sui evolution et rajouter les lignes qui manque en recopiant les donnés dasn le fichier evolution
 
J’ai fait une macro pour copier les donnés mais je ne sais pas comment lui dire d’ajouter les lignes manquantes en faite.
 
Exemple :
 
Fichier lcc casa                            Ficher evolution
 
Code erreur                                 Code erreur
1                                               1
5                                               6
6                                               7
7                                               8
 
 
 
Donc il faut comparer les 2 colonnes et rajouter la ligne 5 dans le fihcier evolution.
 
 
Pouvez vous m'aider ?
 
Moi j'ai fait ca mais ca ne vous aidera pas car j'ai un peu simplifier le probléme pour que vous puissiez comprendre.
 
Sub copiedelccaamt()
Dim p As Object, m As Object, I As Integer, J As Integer
Set p = Worksheets("AMT" ).Range("A1:B1100" )
Set m = Worksheets("lcc casa par sir et ano" ).Range("A2:D1000" )
For I = 1 To 1100
For J = 1 To 1100
If m.Cells(I, 2).Value = "AMT" Then
If m.Cells(I, 3).Value = p.Cells(J, 1).Value Then
p.Cells(J, 2).Value = m.Cells(I, 4).Value
End If
End If
Next J
Next I
End Sub


Message édité par viv207 le 16-11-2010 à 14:37:36
Reply

Marsh Posté le 16-11-2010 à 14:35:49   

Reply

Marsh Posté le 17-11-2010 à 08:55:44    

S'il vous plaît je remonte car j'ai besoin d'aide, je suis apprenti dans une entreprise et j'en ai besoin. Merci d'avance

Reply

Marsh Posté le 18-11-2010 à 17:05:23    

je dirais que ta boucle n'est pas bonne
 
je vais essayé d'en écrire une d'après la tienne...
 
 
Edit,  
Paye tes Ranges de Ranges merdique :/


Message édité par Xxxaaavvv le 18-11-2010 à 17:38:00
Reply

Marsh Posté le 18-11-2010 à 17:55:07    

Vite fait,
J'ai réécris parceque j'aime pas les for avec des variables "i"
 
en fait si tu ne veux pas récupérer ce que je t'ai écris;
t'as juste a ajouter un boolen "trouvé"
 
pour qu'une fois sorti de ta boucle tu traite le cas ou tu n'as pas trouver ta ligne...
 
 
Perso la boucle je l'écrirai comme ça :  
 


Sub copiedelccaamt()
 
Dim objSource As Worksheet
Dim objDestination As Worksheet
Dim objCellSource As Range
Dim objCellDestination As Range
 
Dim strRecherche As String
Dim blnTrouver As Boolean
 
Set objSource = Worksheets("AMT" )
Set objDestination = Worksheets("lcc casa par sir et ano" )
 
'Pour chaque ligne de "AMT"
For Each objCellSource In objSource.Range("B2:B1100" )
   If objCellSource.Value = "AMT" Then
       
      'On cherche la valeur dans la feuille "lcc casa par sir et ano"
      'Initialisation de la boucle de recherche
      strRecherche = CStr(objSource.Cells(objCellSource.Row, objCellSource.Col + 1).Value)
      blnTrouver = False
      Set objCellDestination = objDestination.Range("A2" )
      While Not blnTrouver And objCellDestination.Row < 1000
         If CStr(objCellDestination.Value) = strRecherche Then
            blnTrouver = True
         Else
            'On passe a la cellule suivante
            Set objCellDestination = objDestination.Cells(objCellDestination.Row + 1, objCellDestination.Col)
         End If
      Wend
   
      'On traite le résultat de la recherche
      If blnTrouver Then
       
         'ICI LE CODE POUR LE CAS OU LA RECHERCHE EST FRUCTUEUSE
         'la bonne rangée étant objCellDestination.Row
       
      Else
       
         'ICI LE CODE POUR LE CAS OU LA LIGNE N'EST PAS TROUVEE
         'tu dois insérer une ligne supplémentaire avec les bonnes valeurs...
         'La ligne à copier étant objCellSource.row
         
      End If
   
   End If
Next
 
 
 
 
 


Reply

Marsh Posté le 20-11-2010 à 16:40:27    

Je te remercie infiniment Xxxaaavvv . J'essaye ça ce week et je te donne des nouvelles. Comme je suis débutant il me faut un peu de temps avant de comprendre ce que tu as fait.

Reply

Marsh Posté le 22-11-2010 à 10:26:21    

Salut
 
Alors j'ai fait ce que tu as dit, j'ai mis un booléan ( car ta vba se bloque à cette ligne strRecherche = CStr(objSource.Cells(objCellSource.Row, objCellSource.Col + 1).Value)      blnTrouver = False )
 
 
Sub amt()
Dim p As Object, m As Object, I As Integer, J As Integer, blnTrouver As Boolean
Set p = Worksheets("AMT" ).Range("A1:Z1100" )
Set m = Worksheets("lcc casa par sir et ano" ).Range("A2:D1000" )
 
For I = 1 To 2
For J = 1 To 2
If m.Cells(I, 2).Value = "AMT" Then
If m.Cells(I, 3).Value = p.Cells(J, 1).Value Then
 blnTrouver = True
 Else
  blnTrouver = False
  End If
  End If
    If blnTrouver Then
p.Cells(J, 18).Value = m.Cells(I, 4).Value
Else
 
Comment dire de rajouter la ligne de lcc dans amt ??
 
End If
Next J
Next I
End Sub
 
 
MAis mon gros probléme c'est que je ne sais pas comment dire a la macro de rajouter la ligne qui manque de lcc a amt.
 
Par exemple dans lcc j'ai le code erreur 38 mais pas dans la feuille amt et donc je voudrais rajouter cette ligne dans la feuille amt.

Reply

Marsh Posté le 24-11-2010 à 11:34:56    

Personne pourait m'aider pour l'ajout de la ligne ?
 
Peut être que j'ai mal expliqué
 
Fichier 1                              Fichier 2
Code erreur    Nb erreur          Code erreur    Nb erreur
39                     3                       39
40                      5                      50
50                      1                       55
55                      6                        56            15
 
Au final avec macro je dois avoir dans le fichier 2
 
Fichier 2
Code erreur    Nb erreur          
39                     3                        
40                      5                      
50                      1                        
55                     6
56                    15                        
 
 
Ce qu'il faudrait dans le fichier 2 c'est qu'il recopie le nombre d'erreur à coté du code erreur correspondant (avec la macro que j'ai fait précédement c'est bon) et qu'il rajoute dans ce même fichier 2 les codes erreurs qui sont dans le fichier 1 mais absent du fichier 2, dans mon exemple il manque le code erreur 40  dans le fichier 2
 
 
Donc ma macro permet de recopier les nombre d'erreur à coté du bon code erreur mais il ne rajoute pass les lignes manquantes.
 
Merci d'avance

Reply

Marsh Posté le 24-11-2010 à 11:41:02    

désolé pas trop le temps de répondre en ce moment
 
voici une méthode pour copier, et insérer une ligne


    Sheets("Feuil1" ).Rows("10:10" ).Copy
    Sheets("Feuil2" ).Rows("20:20" ).Insert (xlShiftDown)


à toi de l'adapter.

Reply

Marsh Posté le 24-11-2010 à 11:46:48    

Merci Xxxaaavvv, mais c'est le probléme je n'arrive pas à l'adapter, j'essaye encore puis je vous tiens au courant.

Reply

Marsh Posté le 24-11-2010 à 12:37:29    

Il te faut le numéro de la ligne que tu veux copier
et le numéro de la ligne ou tu veux insérer.
 
ensuite ça va de soi.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed