VBA - Suppression de colonnes

Bonjour à tous,

Ceci est mon premier topic, j'espère respecter les conditions de demandes.

Je suis au niveau zero en macro. Comme beaucoup je n'ai pas le temps de me plonger dedans, donc je ne fais que prendre des idées, copier-coller des lignes et adapter pour mon utilisation.

Aujourd'hui, j'ai un objectif de par un export.

J'ai un classeur composer de trois feuille.

Une feuille ou je viens copier coller un export.

Une feuille avec des boutons.

Une feuille où vient s'intégrer le résultat des boutons ayant agit sur l'export.

Voici mes attentes.

Les boutons devrait être là pour :

Un bouton pour supprimer les colonnes inutiles de l'export. (toujours les mêmes).

Un bouton pour supprimer des lignes. (si la date de telle colonne est égale à telle colonne, alors supprimer la ligne).

Un bouton pour convertir une date (L'une des colonnes affiche la date ainsi : "JJ/MM/AAAA 15:42". De ce fait je dois sans arrêt supprimer convertir la colonne pour séparer la date et pouvoir la traiter dans une formule..)

Voilà voilà, je prend tout conseil, formule ou piste de réflexion.

Je vous remercie par avance,

Cordialement,

Tesla

Salut,

Si vous voulez un exemple de fichier, c'est possible !

C'est même fortement souhaité

Bonjour,

C'est bon je l'ai intégré dans la demande

Re,

J’ai placé sur trois lignes en tout cas les mêmes dates dans les colonnes I et M (marquées en rouge). En cliquant sur le premier bouton, ces lignes de la feuille Export disparaissent à tout jamais. La feuille Export n’est pas activée, ni en cours, ni en fin de macro.

Dans la colonne L, il y a des dates au format qui te gêne. Au deuxième des boutons est relié un code qui transforme ce format, également sans activer la feuille traitée.

Au troisième bouton, j’ai affecté une macro qui supprime les colonnes C, D et F de la feuille Export sans l’activer. Pour faire des essais, je te conseille d’ajouter des colonnes C, D et F au préalable, autrement, en faisant plusieurs essais, tu as toutes tes colonnes qui disparaissent gentiment, trois par trois

Et il est bien entendu que si tu supprimes des colonnes existantes, les autres colonnes changent de place et les deux macros ci-dessus ne fonctionnent plus correctement. Si tu utilises ces trois codes à la suite, fait bien attention à leur ordre.

Je trouve peu logique de placer les boutons sur une autre feuille que celle traitée, sauf si c’est une nécessité.

Il y a tout plein d’autres actions qui seraient possible – comme de sélectionner une feuille bien précise la fin de la macro – mais ne comprenant pas très bien ton travail, il est difficile d’en faire plus pour l’instant.

Amicalement.

Bonjour,

Une proposition Récupérer et transformer (Power Query) natif Excel 2016.

Le résultat est conforme à la feuille Traitement de ton classeur.

A te relire.

Cdlt.

Re !

Merci beaucoup pour le temps passé sur mon fichier.

Pour t'expliquer mon travail, je recontextualise :

Ce fichier contient une liste de RDV client qui ont été placé hors délais par les SI.

De ce fait une action manuelle doit avoir lieu pour replacer les RDV dans les délais selon un catalogue de prestation.

Pour cela, on a un export que l'on prend chaque jour sur un site interne.

Cet export à beaucoup de colonnes mais seules certaines nous sont utiles :

La référence client (colonne A, référence PDS)

Et toutes les colonnes avec les dates suivantes

"DATE EFFET SOUHAITEE DEMANDE RETENUE" Colonne L

"DATE ENGAGEMENT" Colonne M

"DATE PLANIFIEE DEPLACEMENT" Colonne AH

Et voici le déroulement du traitement :

Si DATE EFFET SOUHAITEE DEMANDE RETENUE = DATE PLANIFIEE DEPLACEMENT alors on est bon, on peut suppr la ligne

Si PLANIFIEE DEPLACEMENT < DATE ENGAGEMENT alors on est bon, on peut suppr la ligne

(la date engagement est la date maximale autorisé pour un RDV. C'est notre date de péremption en gros )

Si "DATE PLANIFIEE DEPLACEMENT" < DATE EFFET SOUHAITEE DEMANDE RETENUE alors on est bon, on peut suppr la ligne

Si "DATE ENGAGEMENT =< à la date d'aujourd'hui alors c'est trop tard, on peut suppr la ligne

Si l'une de ces conditions est remplie, le catalogue de prestation est respecté ou déjà dépassé donc aucun traitement n'est nécessaire.

C'est pour ça que j'ai besoin de ces boutons, et la suppression des colonnes permet d'enlever du parasite visuel.

Ensuite, j'essaierai de créer un bouton pour copier coller l'export après traitement par bouton, dans la feuille "traitement".

Dans celle si, une colonne sera rajoutée pour que moi ou mes collègues laissions une trace de traitement. (comme RDV placé dans les délais, pas de réponse, message laissé le 20/12/2019....).

Je vais essayer demain matin à la première heure la V1 et je te fais un retour si j'ai des précisions ou des incompréhensions,

Merci beaucoup,

Cordialement,

Tesla

Salut Telsa,

Réponds-tu à Jean-Eric ou à moi ?

Dans tous les cas, ce serait bien que tu étudies les deux propositions et que tu choisisses l'une ou l'autre, afin que nous sachions comment continuer.

Chaleureusement.

Je te répondais à toi Yvouilles,

J'ai rapidement lu la réponse de Jean-Eric,

Je ne connais pas du tout cette façon de procéder donc demain je vais également me plonger dedans histoire d'apprendre quelques ficelles.

Donc merci à toi également Jean-Eric pour ta réponse.

Je vais partir dans un premier temps sur ta version Yvouilles étant donné qu'elle m'est plus familiere,

Cordialement,

Tesla

Salut Telsa,

Réponds-tu à Jean-Eric ou à moi ?

Dans tous les cas, ce serait bien que tu étudies les deux propositions et que tu choisisses l'une ou l'autre, afin que nous sachions comment continuer.

Chaleureusement.

Bonjour Yvouille,

Alors, j'ai regardé ce que tu avais fait ! les boutons marchent parfaitement, j'ai un peu modifier la suppression de colonne ainsi :

.Range("AI:AV,N:AG,B:K").Delete Shift:=xlToLeft

Afin qu'il ne reste plus que le vital.

Par contre, j'ai deux questions :

Pour la suppression de lignes, est-ce que je peux rajouter après "If .Range("I" & i) = .Range("M" & i) Then .Range("A" & i).EntireRow.Delete"

quelques choses comme ça : or "If .Range("I" & i) < .Range("L" & i) Then .Range("A" & i).EntireRow.Delete

Ou y'a t'il un mot de liaison spécifique peut-être ?

C'est pour rajouter les fameux :

Si DATE EFFET SOUHAITEE DEMANDE RETENUE = DATE PLANIFIEE DEPLACEMENT alors on est bon, on peut suppr la ligne

Si PLANIFIEE DEPLACEMENT < DATE ENGAGEMENT alors on est bon, on peut suppr la ligne

(la date engagement est la date maximale autorisé pour un RDV. C'est notre date de péremption en gros )

Si "DATE PLANIFIEE DEPLACEMENT" < DATE EFFET SOUHAITEE DEMANDE RETENUE alors on est bon, on peut suppr la ligne

Si "DATE ENGAGEMENT =< à la date d'aujourd'hui alors c'est trop tard, on peut suppr la ligne

Aussi, je n'arrive pas à faire fonctionner le bouton de conversion format de date /:

Merci par avance,

Cordialement,

Tesla

Salut,

Comme pour la fonction SI() d'Excel, tu peux combiner à l'envi If Then avec des AND ou des OR. Si tes conditions se compliquent un peu, tu peux utiliser des parenthèses afin de séparer les diverses parties. Par exemple

If 1 = 1 AND 2=2 AND ((3=3 OR 4=4) AND 5=5) then

Mais le mieux de tout - lorsque tu n'es pas sûr d'un truc - c'est de l'essayer OR d'aller chercher l'aide d'Excel à l'aide de F1 OR de fouiller un peu la toile

Aussi, je n'arrive pas à faire fonctionner le bouton de conversion format de date /:

Mais encore ? Tu n'arrives pas à cliquer sur le bouton en place ? Change de souris Si tu arrives à cliquer sur le bouton en place, es-tu certain qu'il y ait une colonne avec des dates qui correspondent à la macro, pas que tu aies changer l'ordre des colonnes par tes suppressions ? Et si tout ça joue, quel est le résultat que tu n'arrives pas à avoir ? Les dates sont effacées inopinément ? Elles prennent un format qui n'est pas celui désiré ? L'idéal est éventuellement de me fournir un fichier-modèle sur lequel tu n'arrives pas à appliquer mon code.

Amicalement.

Yvouille,

D'accord je comprend un peu mieux avec la comparaison fonction SI

Pour la fonction format date, j'ai tenté directement que la faire fonctionner sur la version 1 que tu m'a envoyé.

Désolé pour le manque d'info. En fait lorsque je clique sur le bouton, rien ne se passe. Il s'agit bien de la colonne L.

Ton code contient :

.Range("L2:L" & .Range("A" & Rows.Count).End(xlUp).Row).NumberFormat = "dd/mm/yyyy;@"

Donc j'imagine que c'est cela qui concerne la colonne choisie

Le reste du code par contre, je t'avoue avoir du mal à le comprendre lol.

L'idéal est éventuellement de me fournir un fichier-modèle sur lequel tu n'arrives pas à appliquer mon code.

Il est où ton fichier à problème ?

Chez moi, voici le résultat avant / après avoir lancé la macro. Le format de date 17.01.2020 13:42 est peut-être visible différemment chez toi, mais comme Excel travaille en arrière plan avec des dates internationnales, ça ne devrait pas créer de problème. D'ailleurs, vois-tu les dates comme je les vois moi ?

avant apres

.Range("L2:L" & .Range("A" & Rows.Count).End(xlUp).Row).NumberFormat = "dd/mm/yyyy;@"

Donc j'imagine que c'est cela qui concerne la colonne choisie

Oui, j'applique à une certaine plage un certain format de date.

Hop je te met ma version en PJ.

J'ai donc deux requêtes :/

Il faudrait que ce bouton de format date, traite la colonne AH, dans laquelle il y' a les heures. (petite erreur avec la colonne L, j'ai donc repris le fichier d'export original). Ta fonction marchait bien en fait (j'avais trop cafouillé) mais lorsque que je change L2:L par AH2:AH cela ne fonctionne pas sur mon fichier

J'ai un soucis avec la suppression des lignes. J'ai rajouter des conditions, mais cela supprime tout, comme si mes conditions concernait toutes les lignes.. Tu aurais une idée ?

Code :

Sub Supprimer_lignes()

Dim i As Integer

With Sheets("Export")

For i = .Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1

If .Range("AH" & i) = .Range("L" & i) Then .Range("A" & i).EntireRow.Delete

If .Range("AH" & i) < .Range("M" & i) Then .Range("A" & i).EntireRow.Delete

If .Range("AH" & i) < .Range("L" & i) Then .Range("A" & i).EntireRow.Delete

If .Range("M" & i) <= Date Then .Range("A" & i).EntireRow.Delete

Next i

End With

End Sub

Sub Nouveau_format_date()

With Sheets("Export")

.Range("AH2:H" & .Range("A" & Rows.Count).End(xlUp).Row).NumberFormat = "dd/mm/yyyy;@"

End With

End Sub

Sub Supprimer_Colonnes_CDF_Export()

With Sheets("Export")

.Range("AI:AV,N:AG,B:K").Delete Shift:=xlToLeft

End With

End Sub

Salut,

Tu sembles confondre le format des cellules et leur contenu. Le format des cellules est la manière dont tu les vois à l'écran, alors que leur contenu est ...... ce qu'elles contiennent.

Lorsque tu m'as demandé de changer le format des cellules de ton ancienne colonne L, j'ai changé la gueule que ça a à l'écran, mais non pas le contenu. Ainsi, si tu ne voyais plus les heures et minutes à l'écran, ces données étaient toujours bien présentes dans le contenu. Le format est ce que tu vois dans la cellule alors que le contenu est ce que tu vois dans la barre de formule, comme tu peux le voir pour la cellule AH2 du fichier ci-joint.

capture ter

Pour ta nouvelle colonne AH, la nouvelle macro du fichier ci-joint, placée derrière le bouton ''Dates sans heures'', modifie le contenu des cellules et non plus seulement son format.

Mais bon, ton fichier est quand même un peu bizarre.

En colonne L, tu as des données qui sont à un format de cellule "Standard" et qui semble ne pas être reconnu comme une date lorsque tu veux lancer ta macro pour la suppression de lignes. C'est la raison pour laquelle toutes tes lignes sont supprimées.

capture bis

J'ai voulu transformer ces ''textes'' non reconnus comme des dates en des dates et - oh surprise - au moment de copier la ligne de mon code du dessus - pour la colonne AH - afin de m'en servir comme base, ces cellules de la colonne L sont reconnues comme dates par la macro, lorsque je veux créer cette nouvelle DateSerial !!!!!!!!!

        .Range("AH" & i) = DateSerial(Year(.Range("AH" & i)), Month(.Range("AH" & i)), Day(.Range("AH" & i)))
        .Range("L" & i) = DateSerial(Year(.Range("L" & i)), Month(.Range("L" & i)), Day(.Range("L" & i)))

Une fois cette colonne L également transformée - d'une date à une date !!!!!!!! - la macro pour la suppression des lignes fonctionne différemment.

J'aurais donc dû renommer mon bouton ''Dates sans heures'' en ''Dates sans heures en colonne AH et traitement de la colonne L'', mais je préfère te laisser choisir le nom de ce bouton

Amicalement.

Je constate à l'instant que tu n'as pas été très courageux ou très courageuse en ce qui concerne l'utilisation des OR

Voici le code ainsi simplifié et qui fonctionne tout aussi bien que celui de la version 3 :

Sub Supprimer_lignes()
Dim i As Integer

With Sheets("Export")
    For i = .Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
        If .Range("AH" & i) = .Range("L" & i) Or .Range("AH" & i) < .Range("M" & i) Or .Range("AH" & i) < .Range("L" & i) Or .Range("M" & i) <= Date Then .Range("A" & i).EntireRow.Delete
    Next i
End With

End Sub

Hello,

Alors il ne faut pas critiquer les exports. Ils viennent de nos informaticiens adorés !

Je plaisante, j'ai abandonné. La logique est parfois relative.

Concernant la suppression des lignes, si, j'insiste, j'avais essayé avec OR et AND mais je sautais une ligne pour placer la nouvelle

condition. De ce fait cela j'affichais le mot de liaison en rouge avec un message d'erreur et un débogage..

Un grand merci pour la réalisation des trois macros ! je vais tester cela au boulot demain, et ensuite je viendrai cloturer le topic (si j'arrive à faire quelque chose de mes dix doigts) lol.

Un bon dimanche à toi,

Cordialement,

Tesla

Bonjour Yvouille,

Bonne année à toi !

Bon, le fichier marche parfaitement ! Je clos donc le topic.

Merci pour ton aide et le temps passer sur mon fichier !

Cordialement,

Tesla

Rechercher des sujets similaires à "vba suppression colonnes"