Macro supression colonnes

Bonjour,

Tout d'abord un grand merci à James007 pour le code (Masquer une ou plusieurs colonnes). A partir de celui-ci, j'ai la version (Supprimer une ou plusieurs colonnes).

Le seul soucis, c'est que je dois rentrer les colonnes en ordre décroisant.

Ex : je sélectionne les colonnes L,J,D sinon dans l'autre sens, je n'efface pas les bonnes données (quand le contenu dans D est effacé, tout se décale donc les données de J deviennent E etc...)

Y a t il une formule pour pouvoir rentrer n'importe quelle lettre ?

Et est - il possible d'avoir le CTRL+Z car si je me trompe de colonne(s), je ne peux revenir en arrière.

Merci beaucoup pour votre aide

voici le code :

Sub SupprimerColonnes()
Dim colLetter As String
Dim vCol As Variant
Dim c As Long

    colLetter = InputBox("Lettres des Colonnes à supprimer (séparées par des Virgules)et dans un ordre Décroissant  :")
    If colLetter = "" Then MsgBox "Opération Annulée": Exit Sub

     If Len(colLetter) > 1 Then
        vCol = Split(colLetter, ",")
        For c = 0 To UBound(vCol)
            Range(vCol(c) & ":" & vCol(c)).EntireColumn.Delete
        Next c
     Else
        Range(colLetter & ":" & colLetter).EntireColumn.Delete
     End If
End Sub

Bonjour,

Effectivement ... Supprimer des lignes ou des colonnes induit de commencer par la fin ...

Dans ton cas précis, puisque tu demandes à l'utilisateur de saisir les lettres des colonnes à supprimer, et qu'il peut donc les lister dans n'importe quel ordre ... ta macro doit se substituer à l'utilisateur ... et elle va devoir effectuer le tri par ordre décroissant ...avant de passer à l'étape de suppression ...

Idéalement, une UDF fera correctement cet ajustement ...

J'espère que l'explication est assez claire ...

P.S. En ce qui concerne le Undo ... il ne faut pas dire que c'est impossible ... mais çà entre dans la catégorie 'assez complexe' ...

Re,

Ci-dessous .. ton package complet ... prêt-à-l'emploi ...

Option Explicit

Sub SupprimerColonnes()
Dim colLetter As String
Dim vCol As Variant
Dim c As Long

     colLetter = InputBox("Lettres des Colonnes à Supprimer(séparées par des Virgules):")
     If colLetter = "" Then MsgBox "Opération Annulée": Exit Sub

     If Len(colLetter) > 1 Then
        vCol = Split(colLetter, ",")
        vCol = TrierZA(vCol)
        For c = 0 To UBound(vCol)
            Range(vCol(c) & ":" & vCol(c)).EntireColumn.Delete
        Next c
     Else
        Range(colLetter & ":" & colLetter).EntireColumn.Delete
     End If
End Sub

Function TrierZA(maPlage As Variant)
Dim i As Long
Dim j As Long
Dim Temp
For i = LBound(maPlage) To UBound(maPlage) - 1
    For j = i + 1 To UBound(maPlage)
        If UCase(maPlage(i)) < UCase(maPlage(j)) Then
            Temp = maPlage(j)
            maPlage(j) = maPlage(i)
            maPlage(i) = Temp
        End If
    Next j
Next i
TrierZA = maPlage
End Function

En espèrant que cela t'aide ..

Bonjour coxloud, James

Concernant

coxloud a écrit :

Et est - il possible d'avoir le CTRL+Z car si je me trompe de colonne(s), je ne peux revenir en arrière.

la réponse est NON. Toute action réalisée par VBA ne peut pas (plus) être controlezèdisée (annulée en français)

Le seul moyen de pouvoir annuler une erreur serait de faire un historique des "colonnes effacées" mais encore faut-il aussi conserver ce qu'il y avait dedans, donc un seul conseil avant de supprimer des colonnes fait une sauvegarde (sous un autre nom éventuellement et éventuellement encore toujours le même) et supprime tes colonnes. Si une erreur est faite tu peux revenir en arrière en rechargeant ce fichier ?

PS/ Cette solution peut tout à fait être intégrée au code VBA, éventuellement avec des noms de fichiers horodatés pour retracer l'historique et revenir en arrière à l'infini...

Bonjour NCC,

Attention de ne pas trop t'emporter avec des déclarations définitives ...

Concernant le Undo ...Si on veut réellement aller au fond des choses ... et qu'il s'agit de savoir si des gens pointus se sont frottés à la question ... et bien ... plusieurs Gurus l'ont déjà implémentés avec succès... et, pour tout dire... c'est impressionnant ...

Cela dit ... concernant ce fil ...ce n'est qu'une toute petite remarque subsidiaire et anodine glissée dans un message ...

Le sujet reste Comment Supprimer des Colonnes en saisissant des Lettres dans n'importe quel ordre ...

(..)

Certes James

Mais (je ne suis pas un Guru de ce genre de choses) mais je pense qu'ils doivent (les Gurus) passer par des fonctions relativement compliquées mais dans ce cas l'idée de l'historique me paraissait le plus adapté

As-tu des références de ces Gurus juste pour voir "comment y font ça" ?

NCC 1701 a écrit :

(..)

Certes James

Mais (je ne suis pas un Guru de ce genre de choses) mais je pense qu'ils doivent (les Gurus) passer par des fonctions relativement compliquées mais dans ce cas l'idée de l'historique me paraissait le plus adapté

As-tu des références de ces Gurus juste pour voir "comment y font ça" ?

Non ... les fonctions sont simples ...

Mais ... évitons les Hors-Sujets ... Laissons çà à d'autres ...

Le sujet reste Comment Supprimer des Colonnes en saisissant des Lettres dans n'importe quel ordre ...

Que dire...

Un grand merci pour ce code et le temps que vous passez à nous aider.

coxloud a écrit :

Que dire...

Un grand merci pour ce code et le temps que vous passez à nous aider.

Ravi que cela puisse t'aider ...

Merci .. pour tes remerciements ...

Bonjour

Ces remerciements là j'en prends (parce que ça fait toujours plaisir) Mais James je te laisse la plus grosse part parce que je n'ai pas fait grand chose

Merci coxloud à bientôt...

Happy to share ...

(..)

So do I James

You are welcome ...

Rechercher des sujets similaires à "macro supression colonnes"