Menu

MACRO - Copier cellules si conditions (et sans espace) [Résolu]

Messages postés
10
Date d'inscription
mercredi 15 mai 2019
Statut
Membre
Dernière intervention
21 mai 2019
-
Bonjour à tous,

Dans un onglet "Listing Adh." , j'ai une liste des numéro de clients (colonne D) et de nom de groupes (colonne M).
Dans un onglet "Analyses", en cases B1 , j'indique le nom du groupe que je souhaite analyser. Pour cette analyse, j'ai besoin que se copie (via macro), la liste des numéro de clients de ce groupe dans un 3e onglet "Détails" (en colonne A, à partir de A5), mais sans copier les cases vides (ou ne correspondant au groupe à analyser).

Etant vraiment novice en macro, ma solution actuelle est de passer via un onglet supplémentaire ("Adh. Grpmt") dans lequel j'applique en colonne A une formule
=SI(Analyses!$B$1='Listing Adh.'!M2;'Listing Adh.'!D2;0)
. Ensuite, s'applique une macro demandant de copier la colonne A de l'onglet "Listing Adh" en colonne A de l'onglet détails. Ca manque cruellement d'élégance et de pragmatisme, et ça prend une plombe.

Je souhaite donc alléger l'ensemble.

Auriez-vous des idées?

Vous trouverez le fichier ci-joint simplifié :)

https://www.cjoint.com/c/IEpkSY2muAK

D'avance merci pour votre aide ! :)

KEUSTI
Afficher la suite 

Votre réponse

3 réponses

0
Merci
Bonjour,

Tu peux utiliser un filtre avancé
https://www.cjoint.com/c/IEpqEj6qHRC

Cordialement.
Keusti_001
Messages postés
10
Date d'inscription
mercredi 15 mai 2019
Statut
Membre
Dernière intervention
21 mai 2019
-
Bonjour Gyrus,
C'est exactement ça qu'il me faut !

Est-il indispensable que les cases "Nom Matrice" et le critère soient l'un au dessus de l'autre?

Si oui, doivent-ils être dans le même onglet que le résultat du filtre, ou cela peut-il être placé dans un autre onglet?

Si non, est-il possible de modifier
CriteriaRange:=.Range("A1:A2")
pour lui demander d'aller chercher le critère directement dans la case "B1" de l'onglet "Détails"?

Un grand merci pour votre aide :).

Keusti
Keusti_001
Messages postés
10
Date d'inscription
mercredi 15 mai 2019
Statut
Membre
Dernière intervention
21 mai 2019
-
Rebonjour Gyrus,

Je viens de trouver réponse à mes questions en fouillant et chipotant un peu.
J'ai du coup essayé ce code dans mon fichier d'origine.

Sub A_Filtrer()
Dim Plage As Range
With Sheets("Listing Adh.")
Set Plage = .Range("D1", .Range("M" & Rows.Count).End(xlUp))
End With
With Sheets("Détails")
Plage.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Worksheets("Procédures").Range("P24:P25"), CopyToRange:=.Range("A5"), Unique:=False
End With
End Sub


J'obtiens systématiquement :
"Erreur d'exécution '1004' :
Le nom de champ est incorrect ou manquant dans le zone d'extraction."

Dans le menu "Débogage", il me mets en jaune, la ligne ci-dessous :
Plage.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Worksheets("Procédures").Range("P24:P25"), CopyToRange:=.Range("A5"), Unique:=False


Je ne comprends pas, car quand je fais le test dans ton fichier, ça fonctionne parfaitement.

Peux-tu encore m'aider sur ce point?
Si le fonctionnement est correct avec mon fichier, reste à voir les différences avec ton fichier d'origine.
J'ai fait un test avec le fichier simplifié que tu as joint initialement et j'obtiens bien le résultat attendu.
Keusti_001
Messages postés
10
Date d'inscription
mercredi 15 mai 2019
Statut
Membre
Dernière intervention
21 mai 2019
-
Bonjour Gyrus,

Autant pour moi...j'ai été distrait.

Toujours pour ce même fichier, est-il possible de copier les cases non-vides comprises entre A5 et A1000 d'un onglet dans un autre onglet ?

J'ai trouvé plein de codes mais tous implique une histoire de taille de tableau que je ne comprends pas...

J'imagine que c'est tout bête en plus...

Merci de ton aide ! :)
Commenter la réponse de gyrus
0
Merci
Bonjour,
Comme précédemment, tu peux utiliser un filtre avancé.
Voir la procédure Copier_A()
https://www.cjoint.com/c/IErsJbQPJjC

Cordialement.
Keusti_001
Messages postés
10
Date d'inscription
mercredi 15 mai 2019
Statut
Membre
Dernière intervention
21 mai 2019
-
Hello !
Oui, j'y ai pensé, mais est-ce que ça n'alourdit pas le traitement de refaire tourner un filtre avancé?

Si pas, j'adapte ça à mon tableau ! :)
Keusti_001
Messages postés
10
Date d'inscription
mercredi 15 mai 2019
Statut
Membre
Dernière intervention
21 mai 2019
-
Ah non, je me souviens pourquoi cette solution ne convenait pas !
Ces cellules doivent être copiée en conservant le même ordre.
Par exemple, je dois copier de A5 à A4 et la le 1e cellule vide sera en A46. Donc je dois copier jusqu'à la 1e cellule vide non comprise sauf que le nombre de cellule non vide à copier (donc avant la 1e cellule vide) est susceptible de varier de 1 case à 999 cases environ.
Commenter la réponse de gyrus
0
Merci
Bonjour,

Désolé, mais je ne comprends pas la finalité de ton traitement.
Dans un premier temps, tu dis souhaiter copier les cases non-vides comprises entre A5 et A1000 d'une feuille dans une autre feuille. J'ai donc compris qu'il y a des cellules vides dans cette plage A5:A1000 et qu'il faut copier uniquement les cellules renseignées.
Dans un second temps, tu parles de copie d'une plage limitée par la première cellule vide.
Je ne saurais que t'inciter à mettre un peu d'ordre dans tout ça et proposer un fichier avec un exemple d'organisation de tes données et quelques explications sur la finalité de l'opération.

Cordialement.
Commenter la réponse de gyrus