Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Besoin d'une macro plus simple en Excel

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Kid_kodac

XLDnaute Nouveau
bonjour;

Je suis débutant en macro Excel. J'ai réussi à faire une macro cependant, elle s'avère compliqué pour rien.

Le but de la macro est de saisir pour un colonne donnée, les lignes qui ont des données d'inscrites et de les copier dans une autre feuille. Voici la macro que j'ai créé.

Sub Macro2()
'
' Macro2 Macro
' Macro enregistrée le 2009-01-03 par Yanick
'

'
Rows("1:1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=5, Criteria1:="<>"
Range("A:A,B:B,C:C,E:E").Select
Range("E1").Activate
Selection.Copy
Sheets("DAG").Select
Range("A1").Select
ActiveSheet.Paste
Sheets("Chiffres").Select
Rows("1:1").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A22").Select
End Sub


Pourriez vous m'aider à simplifier cette macro svp.

Merci d'avance

Yanick

P.S Je vous fourni le fichier avec les données de départ et d'arrivée. Les données de départ sont dans la feuille nommé "Chiffres" et le résultat de la macro dans la feuille nommé "DAG"
 

Pièces jointes

Re : Besoin d'une macro plus simple en Excel

Bonsoir Kid_kodac, et bienvenu sur le forum et dans le monde du VBA,
Bonsoir le fil,

Ta macro est placé dans "Module1", or dans ton code, tu n'indique pas sur quel feuille il faut travailler!

Donc si tu lance ta macro de la mauvaise feuille, le résultat obtenu sera faux. Deux solutions :
-> rajouter au début de ton code :
Sheets("Chiffres").select
-> si ce code ne concerne que la feuille chiffres, pour t'éviter de rajouter cette ligne de code, met ton code dans la feuille "Chiffre" et non "module 1".

Tu peux effacer ces 2 lignes ci-dessous
Code:
Rows("1:1").Select
Selection.AutoFilter
car elles te permette de mettre un filtre automatique sur la 1er ligne de la feuille "Chiffre", or tu peux le laisser de façon permanente, cela t'évitera de le mettre et l'enlever à chaque fois 😉

Mais sinon, ta macro me semble ok!

Il existe d'autres techniques, c'est clair, mais tu gagneras très peu :
-> en nb de ligne
-> en temps d'exécution

Si tu veux, tu peux supprimer la ligne :
Code:
Range("A22").Select
qui ne semble pas pertinente à première vue.

A+
 
Dernière édition:
Re : Besoin d'une macro plus simple en Excel

Re

Voici une solution sans l'utilisation du filtre automatique et ayant un résultat identique

Code:
[COLOR="Gray"][B]Sub[/B][/COLOR] Proposition()
' Macro enregistrée par Excel-lent
    
j = 2
Sheets("Chiffres").Select

[COLOR="Red"][B]For[/B][/COLOR] i = 2 [COLOR="Red"][B]To[/B][/COLOR] [COLOR="Blue"]Range("A65536").End(xlUp).Row[/COLOR]
    [COLOR="Orange"][B]If[/B][/COLOR] Cells(i, 5) <> "" [COLOR="Orange"][B]Then[/B][/COLOR]

       Range(Cells(i, 1), Cells(i, 3)).Select
       Selection.Copy
       Sheets("DAG").Select
       Cells(j, 1).Select
       ActiveSheet.Paste
       Sheets("Chiffres").Select
 
       Cells(i, 5).Select
       Selection.Copy
       Sheets("DAG").Select
       Cells(j, 4).Select
       ActiveSheet.Paste

       Sheets("Chiffres").Select
      j = j + 1
    [COLOR="Orange"][B]End If[/B][/COLOR]
[COLOR="Red"][B]Next i[/B][/COLOR]
[COLOR="Gray"][B]End Sub[/B][/COLOR]

La macro s'adapte automatiquement au nombre de ligne du tableau grâce à l'utilisation de :
Code:
[COLOR="Blue"]Range("A65536").End(xlUp).Row[/COLOR]

Edition : macro pouvant être mise dans "Module" ou la feuille de ton choix. Comme tu vois, ma méthode est différente mais le code aussi long! Mais il existe surement plus court (par exemple recopier TOUTE la ligne, puis seulement à la fin, supprimer la colonne 4 que tu ne veux pas (mais on gagnera 2 lignes au maximum)).
 
Dernière édition:
Re : Besoin d'une macro plus simple en Excel

Bonjour Kid_kodac, Excel-lent, le Forum,

Pas franchement d'accord avec toi Excel-lent...

On ne cessera de le répéter, avec VBA, les "Select" et autres "Activate" sont le plus souvent inutiles et la première chose à faire dans le cadre d'une optimisation/simplification de code, c'est déjà de chercher à s'en débarasser...

Pour le fun (et uniquement pour le fun, pas pour la clarté !), le même traitement que vous en une seule ligne de code et sans aucun "Select" : 😉
Code:
[COLOR=GRAY][B][I]DANS UN MODULE DE CODE STANDARD[/I][/B][/COLOR]

[COLOR=NAVY]Sub[/COLOR] Traitement()
[COLOR=GREEN]'myDearFriend! - www.mdf-xlpages.com[/COLOR]
Intersect(Sheets("Chiffres").Range("E2:E65536").SpecialCells(xlCellTypeConstants, 23).EntireRow, Sheets("Chiffres").Range("A:C,E:E")).Copy Sheets("DAG").Range("A2")
[COLOR=NAVY]End Sub[/COLOR]
Evidemment, on est loin d'une "simplification" ici... Et il s'agit d'un raccourci de code à outrance ! Il conviendrait notamment de gérer le cas où toutes les cellules de la colonne E seraient vides...

Il convient simplement de trouver un juste milieu entre simplification, clarté et efficacité du code...

Par ailleurs, l'utilisation d'une instruction de bloc comme "With... End With" reste à mon avis, la meilleure façon de faire pointer un traitement sur le bon objet (la feuille "Chiffres" dans le cas présent). Pour rappel, les modules de code des feuilles sont des modules "Privates" et ils sont normalement réservés aux procédures évènementielles.

Avec With... End With, on allège un peu la ligne de code précédente et ajoute un peu de clarté :
Code:
[COLOR=GRAY][B][I]DANS UN MODULE DE CODE STANDARD[/I][/B][/COLOR]

[COLOR=NAVY]Sub[/COLOR] Traitement2()
[COLOR=GREEN]'myDearFriend! - www.mdf-xlpages.com[/COLOR]
    [COLOR=NAVY]With[/COLOR] Sheets("Chiffres")
        Intersect(.Range("E2:E65536").SpecialCells(xlCellTypeConstants, 23).EntireRow, .Range("A:C,E:E")).Copy Sheets("DAG").Range("A2")
    [COLOR=NAVY]End With
End Sub[/COLOR]
Cordialement,
 
Re : Besoin d'une macro plus simple en Excel

Bonjour à tous,
MDF que te dire, quand on lit tes codes, si ce n'est bravo! Mais toutes ces instructions pour arriver à les connaître comme toi, c'est pas impossible mais long trés long.
Enfin merci de tous ces codes d'un autre monde, moi la dernière fois que tu m'en as fait un j'avais planché 3 jours sur un petit projet que tu as démélé en 2 minutes, quand on sait c'est pas comme quand on sait pas.
Enfin il faut apprendre à marcher avant de savoir courir (c'est ma seule consolation)
merci pour tout
Papou
 
Re : Besoin d'une macro plus simple en Excel

Bonjour le fil,


Tout simplement 😱

Je pensais bien qu'on pouvait enlever quelques trucs inutiles, mais tout en perdant en clarté, mais là 😱

A tout les niveaux, c'est impressionnant.

Chapeau bas MyDearFriend!
 
Re : Besoin d'une macro plus simple en Excel

Re Kid_kodac, Excel-lent,
Bonsoir Paritec, Jean-Marcel,

Tout d'abord, merci de vos messages de sympathie 🙂

En fait, 23 correspond à la somme des constantes xlErrors (16), xlLogical (4), xlNumbers (1) et xlTextValues (2). Autrement dit, on va prendre en compte n'importe quelle valeur dans les cellules (= cellule non vide).

Pour connaître les valeurs correspondant à ces constantes, dans l'éditeur VBE, tu fais F2 pour afficher l'explorateur d'Objets, puis une recherche sur SpecialCellsValue. En sélectionnant les différentes constantes présentées, tu obtiens leur valeur au bas de la fenêtre.

Mais, en réalité, si tu ne veux pas te prendre la tête avec ça, tu fais comme moi : tu actives l'enregistreur de macro (eh oui, la majorité de mes codes commence sur cette base 😉), et tu fais menu Edition / Atteindre... / Cellules. Puis tu sélectionnes "Constantes" en laissant tout ce qu'il y a de coché par défaut et tu valides.
Tu récupères ensuite le code VBA ainsi obtenu ! 🙄

Cordialement,
 
Dernière édition:
Re : Besoin d'une macro plus simple en Excel

Bonsoir,

sans passer par la copie d'une zone, mais par un filtre élaboré....

Pour peu que tes onglets ressemblent aux miens.....
et que les noms soient identiques

regarde le fichier joint...
 

Pièces jointes

Re : Besoin d'une macro plus simple en Excel

Bonjour;

Merci à topus et à toutes. Je vais essayer vos solutions avec grand intérêt. Vous êtes de loin le meilleur forum concernant les questions Excel qui m'a été donné de voir. Merci pour tous

Yanick
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
10
Affichages
603
  • Question Question
Microsoft 365 Code VBA
Réponses
10
Affichages
872
Réponses
1
Affichages
413
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…