Aide macro excel

Résolu/Fermé
daiman - 5 oct. 2007 à 22:30
 Max - 8 oct. 2007 à 23:55
Bonjour,
je me lance dans la programmation eb VB sous excel.
voilà ou je bloque:
comment faire pour: exemple:
si la valeur numérique de la cellule M(x), de la feuille1, égale 12 ou 13 ou 16 ou ect... copier la ligne correspondante dans feuille 2.
répéter cette opération pour toutes les ligne de la feuille 1.
cela peu paraitre simple mais sa fait des jour que je cherche.
merci d'avance
A voir également:

10 réponses

Bonsoir,
Je crois que j'ai ce qu'il te faut!!
Essaye ça, je crois que ne me suis pas trompé, car j'ai créé le code à l'instant et je ne l'ai pas testé.
Je pensse que tu pars sur de bonnes bases.
A+

Voici le code miracle !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Sub Copy_cellule()
'
' Copie de cellule
' Macro enregistrée le 04/10/2007 par Max Guidez
'

Dim Feuil1_VAR
Dim Feuil2_VAR
Dim Cellule_Feuil1_VAR
Dim Cellule_Feuil2_VAR

Feuil1_VAR = "TRUE"
Feuil2_VAR = "TRUE"
Feuil1_lgn = 1
Feuil2_lgn = 1
Cpt_Feuil1_VAR = 0

' Lecture feuille Feuil1

Do While Feuil1_VAR <> ""
Sheets("Feuil1").Select
Range("A" + Format(Feuil1_lgn)).Select
Celleule_Feuil1_VAR = Worksheets("Feuil1").Range("A" + Format(Feuil1_lgn)).Value

' Si il y a 1 celleule vide dans la feuille FEUIL1 on sort de la boucle c est fini

If Celleule_Feuil1_VAR = "" Then Exit Do
Feuil1_VAR = "TRUE"

' On copie la cellule colonne A de Feuil1 dans la colonne A de Feuil2

Sheets("Feuil1").Select
Range("A" + Format(Feuil1_lgn)).Select
Selection.Copy
Sheets("Feuil2").Select
Range("A" + Format(Feuil2_lgn)).Select
ActiveSheet.Paste
' On fait +1 dans la colonne Feuil1 et Feuil2
Feuil1_lgn = Feuil1_lgn + 1
Feuil2_lgn = Feuil2_lgn + 1

Loop
End Sub
0
Bonjour max,
ton code fonctionne très bien. mais je pense que je me suis mal exprimé dans mon post.
je pense aussi que tu n'aura aucun problème à le résoudre. voilà plus en détail mon problème:
dans ma feuille1 j'ai des donnée de la colone A à N sur à peu près milles lignes voir plus.
dans cette feuille seule certaines lignes m'interresse. pour savoir lesquel il faudrais comparer la cellule M de chaque lignes avec plusieurs valeur possible. pour exemple: comparer la cellule M1 avec (12, 45, 26, etc...) Si M1 correspond à une de ces valeurs alors copier la ligne entière dans la feuil2. et ainsi de suite. on fait la même chose pour M2,3,4,5,6,7 ect jusqu'à la dernière ligne.
merci d'avance
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 216
7 oct. 2007 à 13:07
bonjour,

le mieux je pense est que tu utilises select case

Sub test()
    derlig = [A65536].End(xlUp).Row 'recherche derniere ligne remplie de la colonne A
    For i = 1 To derlig
        Select Case Cells(i, 13).Value 'colonne M
        Case "ok", 12 To 18, 25, 38 'valeurs sur lesquelles tu veux effectuer un traitement. ici : si 'ok' ou 12 à 18 ou 25 ou 38...
           MsgBox ("ligne " & i & " à traiter....")
            'traiter_copie_ligne
        End Select
    Next i
End Sub


je te laisse voir la copie...
eric
0
Bonsoir Daiman,
Encore le programmeur FOU !!!
Je crois que ce cou si j'ai compris ce que tu demandes. dans le code on recherche les valeurs comprises entre 12 et 14 compris ou l20 ou 21.
J'espère que tu seras satisfait, mais cela peut prendre du temps si tu as des milliers de pages.

Sub Copy_cellule()
'
' Copie de cellule
' Macro enregistrée le 04/10/2007 par Max Guidez
'

Dim Feuil1_VAR

Dim Cellule_Feuil1_VAR
Dim Cellule_Feuil2_VAR
Dim Feuil1_Lgn
Dim Feuil2_Lgn

Feuil1_VAR = "TRUE"
Feuil2_VAR = "TRUE"
Feuil1_Lgn = 1
Feuil2_Lgn = 1
Cpt_Feuil1_VAR = 0

' Lecture feuille Feuil1

Do While Feuil1_VAR <> ""
Sheets("Feuil1").Select
Range("M" + Format(Feuil1_Lgn)).Select
Celleule_Feuil1_VAR = Worksheets("Feuil1").Range("M" + Format(Feuil1_Lgn)).Value

' Si il y a 1 celleule vide dans la feuille FEUIL1 on sort de la boucle c est fini

If Celleule_Feuil1_VAR = "" Then Exit Do
Feuil1_VAR = "TRUE"

Select Case Celleule_Feuil1_VAR ' Évalue la valeur de Celleule_Feuil1_VAR
Case 12 To 14 ' Le nombre est compris entre 12 et 14 inclus.
Call Copy(Feuil1_Lgn, Feuil2_Lgn)
Feuil2_Lgn = Feuil2_Lgn + 1

Case 20, 21 ' Le nombre 20 ou 21
Call Copy(Feuil1_Lgn, Feuil2_Lgn)
Feuil2_Lgn = Feuil2_Lgn + 1

End Select
Feuil1_Lgn = Feuil1_Lgn + 1
Loop
End Sub


Sub Copy(Feuil1_Lgn, Feuil2_Lgn)

' On copie la ligne A à M de Feuil1 dans la ligne A à M de Feuil2
Sheets("Feuil1").Select
Range("A" + Format(Feuil1_Lgn) + ":M" + Format(Feuil1_Lgn)).Select
Selection.Copy
Sheets("Feuil2").Select
Range("A" + Format(Feuil2_Lgn)).Select
ActiveSheet.Paste

End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour eric et max,
avec votre aide j'ai réussi à resoudre mon problème. je vais enfin pouvoir cranner devant mes collègues du boulot.lol.
j'aivais réussi à faire des comparaison avec un "IF" et "or". sa fonctionnais mais un peu long. mais avec le case c'est du tonnère.
merci à vous deux. j'ai quelque question par rapport à vos code.
MsgBox ("ligne " & i & " à traiter....") j'ai n'arrive pas à comprendre...
et le ":M" dans le code max veut dire ..jusqu'a M?
de toute façon sa fonctionne maintenant. merci
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 216
8 oct. 2007 à 07:25
Re,

Le msgbox était juste là pour te montrer qu'il s'arretait bien sur les bonnes lignes selon le contenu dans M.
Et je vais répondre pour Max aussi... :-)
oui, il te refabriquait une référence du style A1:M15 => de la cellule A1 à la cellule A15

eric
0
Bonsoir à tous les deux,
Juste une petite remarque à eric, il s'agit surement d'une faute de frappe dans ses commentaires.
La commande range avec le "M:" génère une plage de cellules de type A1:M1,qui selectionne la ligne 1 des cellules de A à M, ensuite je fais +1 dans le compteur de ligne Feuil1_Lgn, qui va généer la plage A2:M2 et ainsi de suite jusqu'a je rencontre 2 cellules vides, qui signale la fin de la fonction.
Je ne suis pas sure que mon code soit très performant !!!!!!!
Dis moi, combien de temps as tu mis pour effectuer ta manip.
Merci à eric pour le CASE.
Je suis heureux qu'internet serve aussi à dépanner, comme cela, de manière conviviale.
A+ à tous les deux !!!!!
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 216
8 oct. 2007 à 22:02
Oui, effectivement je voulais dire de A1 à M15 en exemple.
Tu as bien fait de le remarquer, inutile de l'embrouiller :-)
eric
0
Bonjour,
Eric ce n'est pas de A1 à M15, mais de A1 à M1, je t'excuse les fins de journées sont toujours difficiles !!!!
A+
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 216
8 oct. 2007 à 23:14
D'accord A1 à M1. Mais c'était un EXEMPLE pour lui expliquer. "référence du style A1:M15 " .Tu comprends bien que je ne me suis pas embeté à savoir quelles valeurs pouvait prendre ta variable Feuil1_Lgn !!! J'ai mis 15 comme j'aurais pu mettre 12 ou 37 ;-)
0
Bonjour eric et max,
au boulo avec quelque collègue on à décider de ce faciliter la tache car on reçois des donnée qui arrive en masse, étant electronicien avec des étude qui remonte à 1992 vous pensée bien que le VB est un extraterrestre. grace à vous j'ai résolu mon problème en 4 jour. mes collègue non toujour pas de solution. il faut dire qu'il ne se serve non plus d'internet.
grand merci à vous et je pense que vous n'aller pas tarder à venir à mon aide.

au fait, pour déterminer la fin de mes données je me suis servi d'une parti du code de max quand il teste une cellule vide. sa tombe bien car dans les données que je reçois il y a une colone qui n'est jamais vide sauf à la fin des lignes de donnée. c'est pour sa que j'ai pas compris le fameux ":M".

PS: je sais utiliser le msgbox maintenant....je commence à toucher du doigt la programmation c'est cool...
0
Bonjour,
Je comprends bien, mais en écrivant A1:M15 tu selectionnes une plage de cellules sur plusiers lignes, alors que dans mon code,
je selectionne une plage de cellules sur une ligne, c'est une différence importante pour quelqu'un qui ne maitrise pas très bien ce language.
C'était simplement une remarque, sans prétention de ma part.
A+ eric
0
Bonsoir Daiman,
Je suis vraiment heureux que nous avons pu contribuer à ton confort dans l'analyse de tes données.
Merci à toi pour cette question qui nous permet également de nous enrichir.
bon vent à toi et peut être à bientôt.
Max
0