Copier cellules dans classeur si cellule contient nombre

Résolu/Fermé
ludabo Messages postés 6 Date d'inscription mercredi 18 mai 2016 Statut Membre Dernière intervention 20 mai 2016 - Modifié par ludabo le 18/05/2016 à 22:18
 Utilisateur anonyme - 21 mai 2016 à 14:15
Bonjour chers internautes.

J'ai depuis peu un intérêt croissant pour excel. Malgré quelques connaissances, je n'arrive pas à résoudre le problème qui suit.

Je vous remercie d'avance de bien vouloir y apporter un certain intérêt.

J'aimerai copier certaines cellules de feuil1 dans feuil2 si une cellule de la même ligne (de feuil1) contient un nombre>0.

J'aimerai aussi qu'il n'y ai pas de lignes vides dans feuil2.

J'aimerai vous joindre le fichier excel mais je ne sais comment m'y prendre.

C'est pourquoi je joint 1 image avec le résultat désiré.

Merci de votre soutien.




1 réponse

Utilisateur anonyme
19 mai 2016 à 05:18
Bonjour ludabo,

Je te propose de résoudre ton problème de façon plus simple,
sans copier les données en feuille 2 :

Va en cellule A1, puis dans le Ruban (menus de Excel) :
Onglet « Données », groupe « Trier et filtrer », cliques sur
l'entonnoir avec le mot « Filtrer » en dessous.

Si tu as bien fait cela correctement, des petites flèches doivent
s'ajouter sur la ligne d'en-têtes (ne t'inquiètes pas, c'est normal).

Pour ta colonne Mvt, cliques sur la petite flèche située juste à droite :
une liste apparaît, dans laquelle tu dois regarder les cases à cocher :
Vérifies que celle de « (Sélectionner tout) » est bien cochée,
puis décoche celle de « (Vides) » et cliques sur le bouton OK :

Seules seront alors affichées les lignes de ton tableau dont la colonne
Mvt contient des valeurs non vides, donc ici : les 3 lignes avec pour
Mvt : 90, 20, et 50.

Surtout, n'aies pas peur : tes autres lignes n'ont pas été supprimées :
elles sont seulement masquées (= cachées).

Pour tout faire réapparaître, 2 solutions :

1) Cliques sur la même petite flèche droite de la colonne Mvt
puis dans la liste, coches « (Vides) » et valides (bouton OK).

2) Cliques sur l'entonnoir mentionné au début (ça désactive
le filtre automatique, et les petites flèches des en-têtes de
colonne disparaissent).

Si cela te convient, mets le sujet en « Résolu » : regardes tout en haut
de ta page écran, sous ton 1er titre : lien « Marquer comme Résolu ».

-------------------------------------------

Ensuite, si tu tiens absolument à avoir le résultat obtenu plus haut
en feuille 2, c'est tout à fait possible ; indiques-le moi et je te
décrirai alors comment faire. Je ne le fais pas ici, car c'est inutile
si la solution n° 1 te convient.

-------------------------------------------

Comme ta copie d'écran me suffit, je n'ai pas besoin de ton fichier
Excel, mais merci quand même de l'avoir proposé. S'il le faut pour
une prochaine fois (pour cet exercice ou un autre), voici comment
faire :

Pour joindre un fichier, le plus simple est de le faire via le site
cjoint.com : il suffit de glisser le fichier à joindre dans la grande
case, indiquer ton adresse mail (qui restera privée), et cliquer
sur le bouton « Créer le lien Cjoint ». Dernière étape : faire un
copier / coller de ce lien dans le message que tu écriras ensuite
sur le forum.

Cordialement.  😊
 

-1
ludabo Messages postés 6 Date d'inscription mercredi 18 mai 2016 Statut Membre Dernière intervention 20 mai 2016
19 mai 2016 à 06:18
Bonjour Albkan,

Tout d'abord, merci pour cette réponse très rapide.

Grâce à toi je viens d'apprendre la fonction "dissimuler les colonnes vides" et joindre le lien d'un fichier. Merci

Cependant, si tu le veux bien, j'ai vraiment besoin de la création de feuil2.

D'apprendre à copier uniquement les cellules que je souhaite dans une ligne, dans une autre feuille, dans l'ordre que je souhaite ( Et non pas dans celui de "feuil initial"), selon une condition. Ici, un nombre > 0.

Je ne connais pratiquement rien en Macro, et bien évidemment rien en VBA. Si l'on pouvais répondre à mon interrogation sans ces deux dernières fonctions, il me serai plus facile de pouvoir comprendre la résolution.

Avec ma plus grande gratitude

Fichier : https://www.cjoint.com/c/FEtepL7Pehw
0
Utilisateur anonyme > ludabo Messages postés 6 Date d'inscription mercredi 18 mai 2016 Statut Membre Dernière intervention 20 mai 2016
19 mai 2016 à 10:33
Rebonjour ludabo,

J'ai bien lu ton dernier message et te remercie d'avoir joint ton fichier.

En 2ème solution, j'avais pensé te proposer d'utiliser un filtre élaboré,
mais je n'avais pas remarqué que l'ordre des colonnes change, donc
ce n'est plus possible !

Je ne vois pas d'autre solution que passer par le VBA, donc avec
une macro ! Je joins le fichier correspondant, appelé "Quantités".

Fichier Excel 2003 Quantités

Attention : comme indiqué, c'est un fichier Excel 2003 : *.xls

La conversion a fait perdre certaines couleurs. Je joins ce fichier
seulement pour démo : sur la 2ème feuille, fais < Ctrl >< P >
et tu verras s'afficher le résultat voulu.

Cette macro ne s'exécute pas sur la 1ère feuille, mais c'est normal :
je l'ai conçue ainsi.

Note : je ne peux pas joindre un fichier Excel 2007 via Cjoint,
d'où mon fichier Excel 2003.

============================

Voici comment le transposer sur ton fichier Excel initial :

1) Ton fichier initial porte l'extension .xlsx : cela signifie qu'il ne peut pas
prendre en charge les macros. Il faut donc que tu le transformes en un
fichier avec extension .xlsm (qui lui prend en charge les macros).

Pour cela : ouvre ton fichier initial .xlsx et appuie sur la touche < F12 >,
ce qui équivaut à la commande « Enregistrer sous ».

Dans la boîte de dialogue qui s'est ouverte, tout en bas, il y a une très
longue case avec devant « Type de fichier : » ; cliques sur la petite
flèche tout au bout à droite de la longue case, et dans la liste, choisis
le type « Classeur Excel (prenant en charge les macros) ».

Dans la très longue case juste au-dessus, mets le nom de fichier que
tu veux, et valide : bouton « Enregistrer » ou touche < Entrée >.

Et voilà, ton fichier initial *.xlsx est converti en un fichier *.xlsm !

------------------------------------------------

2) Sur ton nouveau fichier *.xlsm, feuille 1 ou 2 (peu importe), appuie sur
< Alt >< F11 > : ça passe de Excel à « Microsoft Visual Basic », qu'on
appelle aussi « Éditeur VBA ».

VBA est le sigle de « Visual Basic for Application ».

Sur le côté gauche, fais un clic droit sur la ligne du haut : « VBAProject (x) »
où x est le nom de ton fichier ; juste après ton clic droit, choisis l'option
« Insertion », puis plus à droite la 2ème option « Module ».

Ça crée un Module1 (côté gauche, sous « Modules »), dont la page blanche
s'est ouverte côté droit. C'est sur cette page blanche qu'on peut écrire du
texte VBA.

Mets-y, par copier / coller, le code VBA suivant (c'est le même que celui
du classeur Excel 2003, mais ça t'évite de remettre les couleurs perdues
à cause de la conversion 2007 en 2003) :


Option Explicit


Sub PdtsQté()
  If ActiveSheet.Index <> 2 Then Exit Sub
  Dim OF As String, Mvt As Integer, dv As Long
  Dim lig As Long: lig = 2 ' lig destination !
  With Worksheets(1).[B2]
    Do
      OF = .Offset(dv): If OF = "" Then Exit Do
      Mvt = .Offset(dv, 1)
      If Mvt > 0 Then
        Cells(lig, 1) = OF
        Cells(lig, 2) = .Offset(dv, 8) ' Produit
        Cells(lig, 3) = Mvt
        lig = lig + 1
      End If
      dv = dv + 1
    Loop
  End With
End Sub

Après avoir fait le copier / coller, comme tu n'as plus besoin de rien
changer sur cette feuille, tu peux la refermer avec < Ctrl >< F4 >.

Tu pourrais retourner à Excel par < Alt >< F11 >, ce qu'on fait quand
on a l'intention de retourner sur l'Éditeur VBA : ça passe donc de l'un
à l'autre, sans fermer l'éditeur VBA.

Mais comme on en a terminé côté programmation VBA, fais ceci :
< Alt >< q > pour quitter : ça ferme l'Éditeur VBA et retourne à Excel.

------------------------------------------------

3) On va maintenant ajouter le raccouci clavier < Ctrl >< P > pour ta nouvelle
macro (ce n'est pas obligatoire, mais ça facilite le lancement de la macro).

Fais < Alt >< F8 > pour ouvrir la boîte de dialogue « Macros » ;
fais < Alt >< a > puis < ↓ > pour choisir « Ce classeur » et < Entrée > ;

Dans la fenêtre, tu vois toutes les macros de ton classeur uniquement.
Il n'y en a qu'une : celle que tu as copié / collé : PdtsQté.

Sélectionne cette ligne, et cliques sur le bouton « Options... » OU < Alt >< t > :
Dans la petite case, juste à droite de « Ctrl+ », mets la lettre du raccourci
clavier que tu veux, ici p (pour < Ctrl >< P >).

Tu n'es pas obligé pour ça non plus, mais c'est mieux d'ajouter dessous,
dans la grande case, une description : cliques sur cette case OU < Alt >< d >.
Ajoutes cette description : ^p - liste des produits dont Qté > 0
ou une autre description de ton choix. Le signe ^ est fait par < Alt Gr >< 9 >.
La touche < Alt Gr > est la même que celle que tu utilises pour faire @ ou #
et le 9 n'est pas celui du pavé numérique.

Valides la fenêtre « Options de macro » : clic sur bouton OK ou < Entrée >.
Tu reviens à la 1ère fenêtre « Macro », et si la ligne de ta macro est bien
sélectionnée, tu peux voir tout en bas la description que tu viens de mettre,
et qui est utile pour toi-même et les autres utilisateurs de ton classeur.

Ferme cette fenêtre, va sur la 2ème feuille, et fais < Ctrl >< P >.

Ça va ? Ça n'a pas été trop long ? Te voilà un pro, maintenant !
Tu vas pouvoir me remplacer et faire tous mes codes VBA ! 😉
Bon, allez, je te laisse : tu as bien mérité de te reposer !

Cordialement.  😊
 
0
ludabo Messages postés 6 Date d'inscription mercredi 18 mai 2016 Statut Membre Dernière intervention 20 mai 2016 > Utilisateur anonyme
19 mai 2016 à 16:59
Re bonjour Albkan.

Je suis époustouflé par ta réactivité et tes compétences.
Mais aussi par ton optimisme pantagruélique :D

Tes directives sont exhaustives mais cependant claires.

Avant d'y plonger, j'ai fais la manipulation "Alt+p" sur ton fichier joint. Et ça marche !

Cependant, j'aimerai te demander certaines choses...

1) Le fait de devoir effectuer "Alt+p" pour mettre à jour la liste de Feuil2 ne me dérange pas.
Mais serait-il possible que ce soit automatique ? (Simple curiosité, pas besoin de m'expliquer la manière de le faire. Pas pour l'instant ;) )

2) "Alt+p" affiche les valeurs désirées. Mais lorsque je supprime la valeur dans la colonne "mvt" (C) de Feuil1, et que je fais à nouveau "Alt+p" dans Feuil2 pour mettre à jour le fichier, ça fait monter les valeurs et dupliquer la dernière ligne. Je ne sais pas si je suis clair...

https://www.cjoint.com/c/FEto6kZZfYw
0
Utilisateur anonyme > ludabo Messages postés 6 Date d'inscription mercredi 18 mai 2016 Statut Membre Dernière intervention 20 mai 2016
Modifié par albkan le 19/05/2016 à 19:15
Re bonjour ludabo,

D'abord, je suis ravi que tu aies réussi à créer ton premier programme VBA,
et que ça marche !!! Quand je te le disais, que tu deviens un pro !!!  😉

=====================================

A) Attention : la touche < Alt > sert pour accéder aux menus des logiciels
style Excel 2003 ou pour les commandes d'Excel 2007 qui sont sur le Ruban !

Et j'avais bien indiqué la touche < Ctrl > (Contrôle), qui est pour exécuter des
commandes telles < Ctrl >< S >, qui est le raccourci clavier de la commande
« Sauvegarder » un fichier.

Rappelles-toi aussi que pour la boîte « Macro », bouton « Options... », devant
la petite case où tu as mis la lettre p, il est justement marqué « Ctrl+ », pas
« Alt+ » ! Le nouveau raccourci clavier est donc < Ctrl >< p >, pas < Alt >< p >,
qu'on peut aussi noter plus simplement : ^p (c'est strictement équivalent).

----------------------------------------------------------------

J'en profite pour rappeler que normalement, ^p ouvre la boîte de dialogue
« Imprimer » ; mais que ça ne le fait plus maintenant, puisque tu as
surchargé (et donc réaffecté) ce raccourci pour lancer ta nouvelle macro.

L'action d'origine est donc perdue, mais uniquement pour ce fichier Excel.
Pour retrouver l'action d'origine, il faut supprimer la lettre p que tu avais
mise ou la remplacer par une autre lettre (et toujours au même endroit).

Mais c'est tellement pratique que je te recommande de laisser tel que.

Et ça ne t'empêche nullement d'imprimer ton fichier : c'est seulement
le raccourci clavier correspondant qui n'ouvre plus la fenêtre Imprimer.
Tu peux toujours faire une impression via la commande d'impression
(Fichier / Imprimer dans Excel 2003 ; pour 2007 : bouton Office...).

=====================================

B) Pour ton point 1) : Même si c'est pour plus tard, je ne pense pas que
ce soit utile de le rendre automatique ! Toutefois, ce serait possible que
ça soit automatique une seule fois, seulement à l'ouverture du classeur.
Et je peux le faire très facilement.

Il y a même une autre méthode bien plus compliquée qui pourrait le
rendre automatique en fonction du temps (par exemple toutes les
dix minutes) via la gestion d'une procédure événementielle. Mais ça,
même pour moi, c'est trop technique !

=====================================

C) Pour ton point 2), j'ai bien compris, et ce que tu dis est normal car
ma macro était pour un tableau vide : elle n'efface pas les anciennes
données (tout cela pour Feuil2). Donc :

Quand tu effaces un Mvt en Feuil1, il y a une ligne de moins pour
la liste des résultats, et les résultats sont affichés correctement à
partir de la ligne 2 jusqu'à l'avant-dernière ligne que tu vois.

La dernière ligne n'a pas été affichée par la macro : c'est seulement
le « résidu » de l'exécution précédente. Si au contraire la liste des
résultats est plus longue (car il y a plus de Mvt), tous les anciens
résultats sont « recouverts » : pas de phénomène de « rémanence »,
donc aucun inconvénient.

Je pensais que tu allais toi-même effacer le tableau manuellement
avant exécution de la macro, mais puisque ce n'est pas le cas,
il faut bien sûr le faire automatiquement.

Dans ta sub PdtsQté, après la 1ère ligne If... et avant le With...
remplaces toutes les lignes par les 4 suivantes :

  Dim OF As String, Mvt As Integer, lig As Long, dv As Long
  lig = Columns("A").Find("*", , , , , xlPrevious).Row
  If lig > 1 Then Range("A2:D" & lig).ClearContents
  lig = 2 ' lig destination !

Tout le reste est inchangé, et tu ne verras aucune différence si la longueur
de la liste des résultats est la même, ou plus longue ! Seulement si elle
est plus courte !

ATTENTION

Ça efface aussi les données de la colonne D « Code Comp », si tu en as mis.
Si tu ne préfères pas, remplace la lettre D par C dans la 3ème des nouvelles
lignes du code indiqué plus haut ; ce qui donne cette ligne :

  If lig > 1 Then Range("A2:C" & lig).ClearContents

Cordialement.  😊
 
0
ludabo Messages postés 6 Date d'inscription mercredi 18 mai 2016 Statut Membre Dernière intervention 20 mai 2016
19 mai 2016 à 20:20
Oops. Je voulais dire "CTRL+" et non pas "ALT+". Mon esprit s'est un peu emmêlé, désolé.

Et non, je n'ai pas fait le programme VBA, je me suis juste permis de tester ton fichier test, ce qui m'a permis de remarquer ces quelques soucis.

Je l'aurai un jour, je l'aurai ;)

Et sans vouloir te manquer de respect, je crois avoir trouvé une solution sans utiliser de la programmation.

Je te fais parvenir le fichier. Lors de chaque modification dans feuil1, il faut appuyer sur le bouton de feuil2 pour rafraîchir cette dernière (masquer les lignes vides de la colonne A).

Qu'en penses-tu ?

https://www.cjoint.com/c/FEtsszpHWMw
0