Résolu Macro copie/coller

  • Auteur de la discussion Leila_10
  • Date de début

Leila_10

Habitué
Je cherche à copier des lignes en respectant une condition et les coller dans une autre feuille.
Je suis débutante en VBA
Please HELP !!

je vous expose mon pb:
je dois automatiser une procédure mensuelle:
1/ extraction du fichier qui contient des colonnes tel que :
(Id,Nom,Prenom, Adresse, tel, date d'entrer, date de sortie, niveau 1, niveau 2)
2/ ce que je veux automatiser c'est de comparer avec le meme fichier du mois precedent je compare avec l'Id du fichier du mois n-1 avec le fichier du n si il existe a ce momen la je copie la ligne dans le fichier n que je viens de faire l'extraction et je peux aussi avoir une nouvelle ligne dans le nouveau fichier a ce moment la je la garde.
je sais pas si j'etais clair ou pas
en gros je veux effectuer une mise a jour de l'ancier fichier sans que j'écranse les anciennes données.

Au se cours!!!!!!!!!!!
et Merci d'avance
 

zeb

Modérateur
Salut Leila,

Mais de quoi parles-tu ?
Quelle logiciel utilises-tu ?
 

Leila_10

Habitué
Merci ZEb de me répondre je suis sur excel 2007 et je suis perdu peux tu m'aider ???
 

zeb

Modérateur
Ah, de l'Excel !
Bon alors qu'est-ce qu'on peut faire pour toi ?

Sache d'abord que nous ne réalisons pas de développement à la demande. En rechange, nous pouvons t'aider à améliorer ton propre code.

Commencer donc par lire cet . La clef est de découper ton gros problème en petits soucis, que je te propose de résoudre un à un ici, avec ta coopération active.
 

Leila_10

Habitué
ok je vais essayer de me familiariser avec les macro et si je trouve des difficultés je reviens vers toi.
 

Leila_10

Habitué
Bonjour Zeb,
est ce que tu peux m'aider sur les macro parce que la je rame.
je veux savoir comment en peux fixer une cellule et de comparer cette cellule avec une colonne d'une autre feuille.

Merci d'avance
cdt
Leila
 

zeb

Modérateur
Salut Leila,

Tu as lu ce ? Dans le premier message je donne des exemples pour pointer des cellules, des feuilles, des classeurs.

C'est parti. A ne pas oublier :
Code:
Option Explicit
Donc soit ta cellule fixe.
Code:
Dim cellule_fixe As Range

Set cellule_fixe = Worksheets("feuil1").Range("A1")
Evidemment, c'est à toi de mettre le bon nom de feuille et la bonne adresse.

Comparer une cellule avec une colonne, ça me paraît impossible. Je vais comparer à titre d'exemple les valeurs de chaque cellule d'une colonne (je me restreins aux 50 premières cellules) d'une autre feuille avec celle de notre cellule fixe :
Code:
Dim cellule_cible As Range

For Each cellule_cible In Worksheets("Feuil2").Range("A1:A50")
    If cellule_cible.Value <> "" Then
        If cellule_fixe.Value < cellule_cible.Value Then 
            MsgBox "Dans " & cellule_cible.Address & ", la valeur est plus grande."
        End If
        If cellule_fixe.Value > cellule_cible.Value Then
            MsgBox "Dans " & cellule_cible.Address & ", la valeur est plus petite."
        End If
        If cellule_fixe.Value > cellule_cible.Value Then
            MsgBox "Dans " & cellule_cible.Address & ", la valeur est égale."        
        End If
    End If
Next
 

Leila_10

Habitué
Merci Zeb,
je vais tester ton code.
en fait ce que je veux c'est j'ai dans une feuille 4 colonnes==>id,nom, description, date. et je veux comparer id avec l'id qui se trouve dans une autre feuille mais par contre le seule pb c'est que je vais te donner un exemple ca serais plus simple:

dans fichier 1 (ancien tableau)j'ai dans l'id: 1,3,4,5,6,7 et dans la feuille 2(nouveau) j'ai dans l'id: 1,2,3,5,6,8
et moi je veux la 3 feuille que je puisse avoir le résultat dans l'id: 1,2,3,5,6,8 avec tout le contenue des autre champs de la feuille 1 qui sont identique à la feuille 2.
et en plus de ca c'est la 1er fois que je fais la programmation c'est dureeeeeeeeee.
Merci de M'aider et je serais très reconnaissante :( :(:(:(:(:(:(:(


 

Leila_10

Habitué
ancien fichier:
Ancien projet cdx s1 s2 s3
P-08-0757/03 projet 1 projet5 projet6 projet7 projet8
P-08-0757/05 projet 11 projet6 projet 13 projet 14 projet 15
P-08-0907/06 projet 2 projet7 projet8 projet8
P-09-0517/05 projet3
P-09-0528/09 projet4 projet5


nouveau fichier: il est vide suite a une extraction

Nouveau projet cdx s1 s2 s3
P-08-0757/03
P-08-0757/05
P-08-0907/06
P-08-0942/08
P-09-0517/05
P-09-0538/03
P-09-0663/04
P-09-0817/03
P-09-0881/03


3eme feuille: le résultat

Nouveau projet cdx s1 s2 s3
P-08-0757/03 projet 1 projet5 projet6 projet7 projet8
P-08-0757/05 projet 11 projet6 projet 13 projet 14 projet 15
P-08-0907/06 projet 2 projet7 projet8 projet8
P-08-0942/08
P-09-0517/05 test projet 2 test projet 4
P-09-0538/03
P-09-0663/04
P-09-0817/03
P-09-0881/03





 

Leila_10

Habitué
dans la feuille 3 ou va trouver le contenu de la feuille 1 si l'id est identique avec la feuille 2.
je sais pas si j'etais claire???
 

zeb

Modérateur
Eh, pas de UP, s'il te plaît ! [:zeb:4]

Salut,

M'enfin, c'est d'une bête double-boucle dont tu as besoin :
Code:
Dim cellule_nouveau  As Range
Dim cellule_ancien   As Range
Dim cellule_resultat As Range

Set cellule_resultat = Worksheets("resultat" ).Range("A1" )

For Each cellule_nouveau In Worksheets("nouveau" ).Range("A1:A50" )
    For Each cellule_ancien In Worksheets("ancien" ).Range("A1:A50" )
        If cellule_nouveau.Value = cellule_ancien.Value Then
            ' // Trouvé
            Worksheets("ancien" ).Range(cellule_ancien, cellule_ancien.Offset(, 4)).Copy cellule_resultat
            Set cellule_resultat = cellule_resultat.Offset(1, 0)
        End If
 	  Next   
Next
 

Leila_10

Habitué
ahh merci pour le code je suis entrain de le modifier pour pouvoir intégrer les nouvelle lignes qui se trouve dans l'onglet nouveau mais ca fonctionne toujours pas voila ce que j'ai rajoutée mais le pb c'est que j'ai les ligne qui se répètes voila le code:

[cpp]Dim cellule_nouveau As Range
Dim cellule_ancien As Range
Dim cellule_resultat As Range

Set cellule_resultat = Worksheets("resultat").Range("A1")

For Each cellule_nouveau In Worksheets("nouveau").Range("A1:A50")
For Each cellule_ancien In Worksheets("ancien").Range("A1:A50")
If cellule_nouveau.Value = cellule_ancien.Value Then
' // Trouvé
Worksheets("ancien").Range(cellule_ancien, cellule_ancien.Offset(, 4)).Copy cellule_resultat
Set cellule_resultat = cellule_resultat.Offset(1, 0)
Else '// pour récuperer les lignes qui existe que sur l'onglet nouveau

Worksheets("nouveau").Range(cellule_nouveau, cellule_nouveau.Offset(, 4)).Copy cellule_resultat
Set cellule_resultat = cellule_resultat.Offset(1, 0)


End If
Next
Next [/cpp]
 

zeb

Modérateur
Meilleure réponse
M'enfin il ne faut pas faire l'ajout dans la seconde boucle ?
Au contraire !
Code:
Dim cestfait As Boolean
For Each cellule_nouveau In Worksheets("nouveau").Range("A1:A50")
    cestfait = False
    For Each cellule_ancien In Worksheets("ancien").Range("A1:A50")
        If cellule_nouveau.Value = cellule_ancien.Value Then
            ' // Trouvé
            Worksheets("ancien").Range(cellule_ancien, cellule_ancien.Offset(, 4)).Copy cellule_resultat
            cestfait = True
            Exit For
        End If
    Next
    If Not cestfait Then
        cellule_nouveau.Copy cellule_resultat
    End If
    
    ' // a faire dans tous les cas
    Set cellule_resultat = cellule_resultat.Offset(1, 0)
Next
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 097
Membres
1 586 286
Dernier membre
petitangebleu1977
Partager cette page
Haut