Macro paramétrée

  • Initiateur de la discussion Sophie
  • Date de début
S

Sophie

Guest
Bonjour à tout le forum,

(Ce message est la suite d'un message écrit 5 pages plus loin; je me permets donc de créer un nouveau sujet car je crains que personne ne le voit...merci de votre compréhension)
La macro donnée par Myta m'a intéressée pour mon travail...surtout qu'elle fonctionne! Je réponds à ce message car j'aurais besoin d'une aide un peu dans le style de Carine.
Je m'explique: j'ai des fichiers qui ont une dizaine de colonnes pour parfois 50 000 lignes (!). Parmi ces colonnes, j'en choisis 5 par exemple et je voudrais ne conserver des 50 000 lignes d'origine que celles qui ont entre 2 et 3 "A" (donc supprimer toutes les autres). Donc par rapport à Carine, le problème à mon avis est plus compliqué car j'ai besoin d'un intervalle.
Quelqu'un saurait-il m'aider dans mon entreprise??
Si oui, ce serait vraiment sympa car j'avoue que mon niveau Excel ne me permet pas de parvenir à mes fins!
Merci à tous ceux qui se pencheront sur mon problème.

Bonne journée à tous (en plus il fait beau!)
A+
Sophie
 
M

Mytå

Guest
Bonsoir Sophie et le forum

Voila je t'ai mis en piece jointe un debut vite fait
a voir si cela pourrait te convenir

smiley_417.gif
 

Pièces jointes

  • Masquerligne.xls
    32.5 KB · Affichages: 79
S

Sophie

Guest
Bonsoir Myta,

Effectivement, il semblerait que ce soit exactement ce que je demande! C'est parfait! Je te remercie pour ton aide, c'est vraiment super.

Bonne nuit à tous (même aux insomniaques)!
 
J

Jon

Guest
bonjour

il faudrait rajouter l'instruction application.screenupdating=false à ton code myta pour que ce soit plus efficace.


sinon, voilà une autre manière de faire :
Sub d()
Dim col
For Each col In [B:E].Columns 'selection.columns
If Application.CountIf(col, "A") >= 2 Then col.Hidden = True
Next col
End Sub

'pour réafficher les colones
Sub dsfqsdfsdd()
Dim col
For Each col In ActiveSheet.UsedRange.Columns
col.Hidden = False
Next col
End Sub
 
S

Sophie

Guest
Bonjour Myta et Jon,

Merci Jon pour ta contribution. Cependant, j'ai utilisé le code que Myta m'a fait parvenir avec son fichier joint car ça fonctionne.
Sauf que j'aimerais juste une petite précision: j'ai créé un bouton derrière lequel j'ai glissé le code dont tu m'as fait part mais je suis obligé de sélectionner des colonnes consécutives. Saurais-tu ce qu'il faudrait modifier pour réaliser le traitement que je souhaite à savoir ne conserver que les lignes qui ont de 2 à 3 "A" sur des colonnes non consécutives.
Par exemple, si j'ai 6 colonnes et je sélectionne les colonnes A, C, D et F?
Merci de ta réponse (si tu en as une?), après je t'embêterai plus!!
Merci d'avance!
 
S

STéphane

Guest
tu n'es pas obligé si tu remplaces [B:E].columns par selection.columns dans quel cas tu ne serais même pas obligé de sélectionner les colonnes entières

For Each col In [B:E].Columns 'selection.columns
 
S

Sophie

Guest
Bonjour à vous 2,

J'ai vu que mon message n'est pas resté lettre morte et je vous remercie de vos réponses. Pour ce qui est de la version 2 de l'application de Myta, le problème, c'est que le traitement n'est plus réalisé...la sélection conserve 1 "A" par exemple ou 4 "A". Je vais m'arranger autrement, c'est à dire qu'à force de couper/coller, je vais rendre les colonnes que je veux traiter, contiguës. Puis une fois, le traitement réalisé, je leur rendrai leur place. C'est pas très beau mais c'est efficace...et j'ai promis de ne plus vous embêter car je comprends que je ne suis pas la seule à vous poser des questions!!
Merci beaucoup pour votre disponibilité et la mise à disposition de vos compétences.
 
S

Sophie

Guest
Bonjour Myta,

Désolé mais j'ai l'impression, si tu le veux bien, que je vais devoir demander ton aide. En effet, j'ai repris la 1ère version que tu m'as fournie, elle fonctionne bien (il faut juste que je positionne les colonnes de façon à ce qu'elles soient contiguës mais ça, c'est pas grave) mais je préfèrerais éliminer les lignes plutot que de les masquer. Je pense que ça ne doit pas être très compliqué pour toi, c'est pour cela que j'ai fait un copier/coller du code de façon à ce que tu fasses la modification directement si tu le veux bien (ne pas masquer les lignes mais les supprimer):

Dim Nbre_1 As Byte, ligne As Long, tag As Boolean
Dim fin As Long, cellule As Range
tag = False
Nbre_1 = 0
ligne = 1
fin = Range("A65535").End(xlUp).Row + 1
For Each cellule In Selection
If cellule.Row = ligne And tag = False Then tag = True
If ligne <> cellule.Row And (Nbre_1 < 2 Or Nbre_1 > 3) And tag = True Then
Rows(ligne & ":" & ligne).EntireRow.Hidden = True
End If
If ligne <> cellule.Row And tag = True Then
ligne = ligne + 1
Nbre_1 = 0
End If
If ligne = cellule.Row And cellule.Value = "1" And tag = True Then Nbre_1 = Nbre_1 + 1
If ligne = fin Then Exit Sub
saut:
Next cellule

Voilà, je te remercie à l'avance pour l'aide que tu voudras bien m'apporter (ou quelqu'un d'autre pourquoi pas!).
 
S

Sophie

Guest
Merci pour la modification que tu as effectuée sur la version 3 qui permet effectivement de masquer des lignes en sélectionnant des colonnes qui ne sont pas contiguës.
Le "must" maintenant serait, si ça ne te prend pas trop de temps et que ça ne te dérange pas, de supprimer purement et simplement les lignes au lieu de les masquer. En effet, mon problème est qu'en les masquant, si j'ouvre le fichier traité dans un nouveau document, les lignes masquées réapparaissent comme si je n'avais rien fait (puisqu'elles ne sont pas supprimées).
Si tu pouvais faire cette ultime modification, je t'en serais éternellement reconnaissante...
Merci d'avance!
 
C

carine

Guest
bonjour,

Je découvre ici un sujet qui m'interesse également. Je vois que myta donne encore de son temps pour répondre à une grande part d'internaute. C'est dèjà toi myta qui m'avait sortie de la panade il y a quelques temps: je te tire mon chapeau pour toutes ces réponses à titre gratuit (c'est tellement rare aujourd'hui).

Pour le problème technique j'aurai le même besoin spécifique que Sophie (solidarité féminine surement!!!): en effet, j'ai aussi besoin de faire disparaitre des lignes selon le même type de selection que dans les exemples "masquer ligne" mais bien de les SUPPRIMER complétement et pas de les masquer (car elle existe de façon sous jacente) car c'est pénalisant pour le reste de mon application où je dois faire des copié-collé de la selection (le collé reprenant l'ensemble des données du tableau de base et pas uniqement la selection...)

j'espere avoir été claire, de toute façon Sophie avait déjà très bien expliquée le problème je pense.


Merci par avance à notre sauveur : myta.

a+


Ps: myta, juste une petite question pour satisfaire ma curiosité féminine naturelle: es tu modérateur ou as tu un rôle bien spécifique sur ce site pour apporter un soutien continu et quasi-instantané à l'ensemble des désespérés d'excel? ;-). En tout cas, je te renouvelle mes sincères félicitations.
 
M

Mytå

Guest
Bonsoir Sophie, Carine et le forum

Voir en piece jointe j'ai refait la macro.

A suivre
smiley_417.gif


P.S. Carine je suis comme tous, qu'un simple mordu d'excel qui donne de son temps bénévolement pour aider les autres.

Regarde les Posts tu verras que nous sommes beaucoup.
 

Pièces jointes

  • Effacerligne.xls
    43.5 KB · Affichages: 68

Discussions similaires

Réponses
4
Affichages
289

Statistiques des forums

Discussions
312 182
Messages
2 086 002
Membres
103 084
dernier inscrit
Hervé30120