IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Macro qui supprime une colonne involontairement


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 12
    Par défaut Macro qui supprime une colonne involontairement
    Bonjour à tous,

    Voilà j'ai une macro qui me tire toutes les formules de mes colonnes sur mon classeur. Seulement quand je l'exécute, elle me supprime une colonne alors que je ne veux pas. J'ai donc trouvé une alternative qui est de rajouter une colonne avant celle que la macro va me supprimer et d'ajouter dans la macro l'action de supprimer cette colonne ajoutée. Mais cela n'est pas pratique et j'aimerai retrouver une macro qui ne me supprime pas de colonne tant que je ne lui demande pas.

    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    Sub Délimiter_components_Tirer_formules()
    '
    ' Tirer_Formules Macro
    '
    Columns("L:L").Select
        Selection.TextToColumns Destination:=Range("AM1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1))
        ActiveWindow.ScrollColumn = 24
        Range("AM1").Select
        ActiveCell.FormulaR1C1 = "Component1"
        Range("AN1").Select
        ActiveCell.FormulaR1C1 = "Component2"
        Range("AO1").Select
        ActiveCell.FormulaR1C1 = "Component3"
        Range("AP1").Select
        ActiveCell.FormulaR1C1 = "Component4"
        Range("AQ1").Select
        ActiveCell.FormulaR1C1 = "Component5"
        Range("AR1").Select
        ActiveCell.FormulaR1C1 = "Component6"
     
     
    Dim DernLigne As Long
    DernLigne = Range("A" & Rows.Count).End(xlUp).Row
     
     
    Range("AD2").Select
    Selection.AutoFill Destination:=Range("AD2:AD" & DernLigne), Type:=xlFillDefault
    Range("AE2").Select
    Selection.AutoFill Destination:=Range("AE2:AE" & DernLigne), Type:=xlFillDefault
    Range("AF2").Select
    Selection.AutoFill Destination:=Range("AF2:AF" & DernLigne), Type:=xlFillDefault
    Range("AG2").Select
    Selection.AutoFill Destination:=Range("AG2:AG" & DernLigne), Type:=xlFillDefault
    Range("AH2").Select
    Selection.AutoFill Destination:=Range("AH2:AH" & DernLigne), Type:=xlFillDefault
    Range("AI2").Select
    Selection.AutoFill Destination:=Range("AI2:AI" & DernLigne), Type:=xlFillDefault
    Range("AJ2").Select
    Selection.AutoFill Destination:=Range("AJ2:AJ" & DernLigne), Type:=xlFillDefault
    Range("AK2").Select
    Selection.AutoFill Destination:=Range("AK2:AK" & DernLigne), Type:=xlFillDefault
    Range("AL2").Select
    Selection.AutoFill Destination:=Range("AL2:AL" & DernLigne), Type:=xlFillDefault
    Range("AS2").Select
    Selection.AutoFill Destination:=Range("AS2:AS" & DernLigne), Type:=xlFillDefault
    Range("AT2").Select
    Selection.AutoFill Destination:=Range("AT2:AT" & DernLigne), Type:=xlFillDefault
    Range("AU2").Select
    Selection.AutoFill Destination:=Range("AU2:AU" & DernLigne), Type:=xlFillDefault
    Range("AV2").Select
    Selection.AutoFill Destination:=Range("AV2:AV" & DernLigne), Type:=xlFillDefault
    Range("AW2").Select
    Selection.AutoFill Destination:=Range("AW2:AW" & DernLigne), Type:=xlFillDefault
    Range("AX2").Select
    Selection.AutoFill Destination:=Range("AX2:AX" & DernLigne), Type:=xlFillDefault
    Range("AY2").Select
    Selection.AutoFill Destination:=Range("AY2:AY" & DernLigne), Type:=xlFillDefault
    Range("AZ2").Select
    Selection.AutoFill Destination:=Range("AZ2:AZ" & DernLigne), Type:=xlFillDefault
    Range("BA2").Select
    Selection.AutoFill Destination:=Range("BA2:BA" & DernLigne), Type:=xlFillDefault
    Range("BB2").Select
    Selection.AutoFill Destination:=Range("BB2:BB" & DernLigne), Type:=xlFillDefault
    Range("BC2").Select
    Selection.AutoFill Destination:=Range("BC2:BC" & DernLigne), Type:=xlFillDefault
    Range("BD2").Select
    Selection.AutoFill Destination:=Range("BD2:BD" & DernLigne), Type:=xlFillDefault
    Range("BE2").Select
    Selection.AutoFill Destination:=Range("BE2:BE" & DernLigne), Type:=xlFillDefault
    Range("BF2").Select
    Selection.AutoFill Destination:=Range("BF2:BF" & DernLigne), Type:=xlFillDefault
    Range("BG2").Select
    Selection.AutoFill Destination:=Range("BG2:BG" & DernLigne), Type:=xlFillDefault
    Range("BH2").Select
    Selection.AutoFill Destination:=Range("BH2:BH" & DernLigne), Type:=xlFillDefault
    Range("BI2").Select
    Selection.AutoFill Destination:=Range("BI2:BI" & DernLigne), Type:=xlFillDefault
    Range("BJ2").Select
    Selection.AutoFill Destination:=Range("BJ2:BJ" & DernLigne), Type:=xlFillDefault
    Range("BK2").Select
    Selection.AutoFill Destination:=Range("BK2:BK" & DernLigne), Type:=xlFillDefault
    Range("BL2").Select
    Selection.AutoFill Destination:=Range("BL2:BL" & DernLigne), Type:=xlFillDefault
    Range("BM2").Select
    Selection.AutoFill Destination:=Range("BM2:BM" & DernLigne), Type:=xlFillDefault
     
    Columns("AS:AS").Delete Shift:=xlToLeft
     
    End Sub
    Merci pour votre réponse !

  2. #2
    Membre Expert Avatar de jerome.vaussenat
    Homme Profil pro
    Formateur Bureautique
    Inscrit en
    Janvier 2011
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur Bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 629
    Par défaut
    Salut,

    Si tu parles, ou lit un peu l'anglais, tu peux deviner à quoi sert cette ligne, à la fin du code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Columns("AS:AS").Delete Shift:=xlToLeft
    Après, effectivement, tout le monde n'est pas à l'aise avec l'anglais.

    Donc, cette instruction demande la suppression de la colonne AS. Si tu ne veux pas, efface cette ligne. Et le tour est joué.

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 12
    Par défaut
    En fait c'est moi qui ait rajouté cette ligne exprès.

    Quand j'enlève cette ligne de la macro et que j'exécute celle-ci, elle me supprime la colonne la colonne AS alors que je ne lui donne pas cette instruction. Du coup pour éviter qu'elle me la supprime, je rajouter une colonne avant AS à la main puis je rajoute dans ma macro une instruction pour qu'elle la supprime (car celle-ci est vide).

    Ce que je ne comprends pas, c'est pourquoi ma macro me supprime cette colonne AS (avant que je rajoute l'instruction de le faire) alors que je ne lui ai pas demandé.

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par AudreyAQF Voir le message
    Ce que je ne comprends pas, c'est pourquoi ma macro me supprime cette colonne AS (avant que je rajoute l'instruction de le faire) alors que je ne lui ai pas demandé.
    Je ne comprends pas vraiment ce que tu as dans cette colonne AS mais, à mon avis, elle n'est pas supprimée. C'est son contenu qui est écrasé par de nouvelles données, en particulier par l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("AS2").Select
    Selection.AutoFill Destination:=Range("AS2:AS" & DernLigne), Type:=xlFillDefault
    Et par le fait que ton TextToColumns va sans doute plus loin que tu le souhaites.
    Je ne sais pas exactement ce que tu as en colonne L avant de lancer la macro, mais même si le TextToColumns envoie une valeur vide en colonne AS, ça n'empêche pas cette cellule vide d'être ensuite copiée par les deux lignes citées ci-dessus et donc d'écraser les données qui pourraient se trouver en AS.

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Déjà, je te conseille vivement de consulter des didacticiels sur les boucles en VBA, ça te simplifiera grandement la vie.
    http://bidou.developpez.com/article/VBA/
    http://silkyroad.developpez.com/vba/boucles/

    Autre conseil : éviter les Select / Selection lorsqu'ils ne sont pas indispensables.
    L'enregistreur automatique de macro a tendance en mettre partout mais, bien souvent, ils ne sont pas utiles (voir ci-dessous).


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Sub Délimiter_components_Tirer_formules()
    '
    ' Tirer_Formules Macro
    '
        Dim MaCell as Range
        Dim DernLigne As Long
     
        Columns("L:L").TextToColumns Destination:=Range("AM1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1))
        ActiveWindow.ScrollColumn = 24
     
        For Each MaCell In Range("AM1:AR1").Cells
            MaCell.FormulaR1C1 = "Component1"
        Next MaCell    
     
        DernLigne = Range("A" & Rows.Count).End(xlUp).Row
     
        For Each MaCell In Range("AD2:BM2").Cells
            MaCell.AutoFill Destination:=Range(MaCell, MaCell.OffSet(DernLigne - 2, 0)), Type:=xlFillDefault
        Next MaCell
     
        Columns("AS:AS").Delete Shift:=xlToLeft
     
    End Sub
    Ca ne résoud pas ton problème mais c'est quand même une belle amélioration, non ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/06/2016, 17h33
  2. [XL-2007] Macro qui copie une colonne selon son entête vers une autre colonne ayant la même
    Par TonyBennett dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/09/2014, 21h04
  3. Une macro qui supprime les macros ?
    Par GodOfTrolls dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/06/2008, 10h03
  4. Réponses: 1
    Dernier message: 12/12/2007, 13h38
  5. Instruction SQL qui supprime une colonne d'une table
    Par tseg dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/10/2003, 20h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo