VBA : copier coller de pls onglets ac boucle

Résolu/Fermé
Sapinours Messages postés 4 Date d'inscription mercredi 29 septembre 2010 Statut Membre Dernière intervention 1 octobre 2010 - 30 sept. 2010 à 10:41
Sapinours Messages postés 4 Date d'inscription mercredi 29 septembre 2010 Statut Membre Dernière intervention 1 octobre 2010 - 1 oct. 2010 à 08:51
Bonjour,

Voila ce que je cherche à faire.

Si dans ma feuille 1 ma cellule contient le numéro de matricule qui se trouve dans la feuille 2 alors
Je copie le numéro de projet et je le colle à la place du numéro de projet dans la feuille 1.

Mais excel me dit qu'il y a une erreur 424.

je me retrouve bloquée.

Je vous remercie pour vos propositions.

Sub Macrocopiercoller()

For x = 2 To 17400
For y = 2 To 3600

If Sheets("Feuil1").Select.Cells(x, 12).Value = Sheets("Feuil2").Select.Cells(y, 3).Value Then
Sheets("Feuil2").Select.Cells(y, 7).Select
Selection.Copy
Sheets("Feuil1").Select
Cells(x, 17).Select
ActiveSheet.Paste

End If

Next


End Sub

4 réponses

cousinhub29 Messages postés 881 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 avril 2024 333
30 sept. 2010 à 12:15
Re-,

T'inquiète, tout le monde apprend tous les jours....

Perso, lorsque je déclare mes variables, je mets toujours la 1ère lettre en majuscule, voire si c'est un mot composé, plusieurs lettres en majuscule...

Cela permet de voir de suite, lorsque tu tapes ton code après avoir déclaré tes variables, si celles-ci sont immédiatement reconnues par excel...

Du style :

Dim Cel As Range
Dim DerLig As Long
Dim I As Byte
Dim MonMsg As String


Et je ne mets sur la même ligne de déclaration que les variables de même portée...

Dim Cel As Range, DerCel As Range
Dim DerLig As Long
Dim I As Byte, J As Byte
Dim MonMsg As String


Mais ceci n'est que ma manière de faire, chacun restant libre....

Bonne journée
1
Decapsuleur Messages postés 40 Date d'inscription mercredi 11 août 2010 Statut Membre Dernière intervention 9 novembre 2010 46
30 sept. 2010 à 11:38
Bonjour,
1- virez tous les .Select en trop,
2- Déclarez vos variables :
Sub Macrocopiercoller() 
Dim x, y As Integer
For x = 2 To 17400 
For y = 2 To 3600 
If Sheets("Feuil1").Cells(x, 12).Value = Sheets("Feuil2").Cells(y, 3).Value Then 
Sheets("Feuil2").Cells(y, 7).Copy Sheets("Feuil1").Cells(x, 17) 
End If 
Next 
End Sub

3- Vérifiez la boucle, cela me semble étrange... Vous avez 2 For : For x et For y, mais un seul Next.......
0
cousinhub29 Messages postés 881 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 avril 2024 333
30 sept. 2010 à 12:07
Bonjour,

@ Decapsuleur, c'est très bien de déclarer les variables, mais comme tu les as déclarées, x est une variable Variant, et y Integer

La syntaxe correcte est plutôt :

Dim x As Integer, y As Integer


@ Sapinours, tel qu'écrit le code, tu effectues 65 598 004 boucles!!!!

Je pense qu'on doit trouver plus rapide....

Si tu pouvais joindre un fichier exemple, exempt de toutes données confidentielles, avec la structure réelle du fichier, et chaque onglet comportant une vingtaine de lignes, on pourrait trouver un code plus adapté....

Pour joindre un fichier, tu peux le faire via http://www.cijoint.fr/

Bon courage
0
Decapsuleur Messages postés 40 Date d'inscription mercredi 11 août 2010 Statut Membre Dernière intervention 9 novembre 2010 46
30 sept. 2010 à 12:09
Salut cousin!
Merci du renseignement.
On apprends tous les jours.
A+
0
Sapinours Messages postés 4 Date d'inscription mercredi 29 septembre 2010 Statut Membre Dernière intervention 1 octobre 2010
1 oct. 2010 à 08:51
Bonjour,

Merci pour votre aide mais j'ai trouvé !!!

Voici la bonne synthaxe.



Sub Macrocopiercoller()

Application.ScreenUpdating = False

Dim x As Integer


For x = 2 To 2070

Numeromatricule = Sheets("Feuil1").Cells(x, 14).Value

For y = 2 To 3600

If Numeromatricule = Sheets("Feuil2").Cells(y, 3).Value Then

Sheets("Feuil2").Cells(y, 7).Copy Sheets("Feuil1").Cells(x, 19)

End If

Next
Next


End Sub
0