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 :

"Suppression de colonne si cellule contient" probleme


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Par défaut "Suppression de colonne si cellule contient" probleme
    Bonjour à tous,

    Dans une macro qui marchait tres bien une sequence me permettait de supprimer la colonne E de la feuille "Dépose Extraction".

    J'aimerais l'améliorer en supprimant cette colonne uniquement si la case E5 contient le mot "Fournisseurs" sinon ne rien faire.

    Je pense l'avoir bien codé mais pourtant ca ne marche pas, pire ça stop la macro et le reste des actions ne s'enchaine pas

    Je précise au passage que ma case E5 dispose d'une mise en forme, est-ce que ca joue ? ("Fournisseurs" est en gras sur un fond coloré)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      If UCase([E5]) Like "Fournisseurs" Then
        Columns("E:E").Select
        Selection.Delete Shift:=xlToLeft
        End If
    aucun code d'erreur mais pas de suppression de la colonne

    Merci d'avance.

    Guillaume

  2. #2
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,
    La procédure "Like" est sensible à la casse. UCase("gnagna") transforme "gnagna" en majuscules : "GNAGNA". Dans ton code tu dis :
    SI E5 transformé en majuscule est identique à "Fournisseurs" alors ...
    Cela ne peux donc pas fonctionner.
    De plus, nous allons essayer d'éviter les .Select (pour ne pas ralentir l'exécution des macros)...
    Essaye plutôt ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If UCase([E5]) Like "FOURNISSEURS" Then
        Columns("E:E").Delete Shift:=xlToLeft
    End If

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    salut

    - maladroit d'utiliser Like là où il s'agit d'une égalité (utiliser =)
    - Ucase passe en majuscules et le retournera donc jamais de minuscules telles celles dans "Fournisseurs" !
    - ne pas sélectionner pour détruire ! :

    saura détruire directement la colonne E

  4. #4
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Ton souci doit être d'obtenir un résultat quelque soit la casse de FourNiSeur, ce qui est bien vu, mais il faut égaliser les parties

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub destrroy()
    'vu que la feuille n'a pas besoin d'être active pour la suppression, il est prudent
    'd'être explicite en la désignant par son nom mieux que par l'index. Préciser le classeur
    'peut se révéler utile aussi suivant le contexte.
    With Worksheets(1).Range("E5")
       If UCase(.Value) = UCase("fournisseurs") Then .EntireColumn.Delete
    End With
    End Sub
    Tu peux t'affranchir des conversions avec en haut de module, mais son niveau module peut-être une contrainte selon le contexte.

    cordialement,

    Didier

  5. #5
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Par défaut
    Merci beaucoup ! Je début avec le vba, mon code est donc pas toujours super. En tout cas j'apprécie beaucoup ce forum et votre aide. Vous êtes géniaux !
    J'aimerais bien avoir le même niveau ^^ En attendant je m'entraine...

    Sinon ca marche avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If UCase([E5]) Like "FOURNISSEURS" Then
        Range("E:E").Delete
    End If
    Je suppose donc que UCase detecte aussi les minuscules ("Fournisseurs") si dans mon code j'inscris le mot en majuscule (Like "FOURNISSEURS") ? C'est uniquement pour vraiment comprendre ce que je fais et reutiliser Ucase au besoin.

    Et par contre la partie 'Effacer Feuille TDC si feuille Existe' ne marche plus. Une idée de pourquoi ? 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
        'Test suppression colonne E si Fournisseurs inscrit dans E5'
     
        If UCase([E5]) Like "FOURNISSEURS" Then
        Columns("E:E").Delete Shift:=xlToLeft
        End If
     
        'Sequence pour effacer le tableau dans tat semaine'
     
        Sheets("TAT de la semaine").Select
        Columns("A:F").Select
        Selection.ClearContents
        Application.DisplayAlerts = False
     
        'Delete Feuille TDC si feuille existe'
     
        For i = 1 To ThisWorkbook.Sheets.Count
     
    If ThisWorkbook.Sheets.Item(i).Name = "Feuil1" Then
        Application.DisplayAlerts = False
        ThisWorkbook.Sheets("TDC").Delete
        Application.DisplayAlerts = False
        Exit For
    End If
     
    Next
    Ok je viens de regler tout seul le problème... Il suffisait de remplacer "Feuil1" par "TDC". dans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If ThisWorkbook.Sheets.Item(i).Name = "Feuil1" Then
        Application.DisplayAlerts = False
        ThisWorkbook.Sheets("TDC").Delete
        Application.DisplayAlerts = False
        Exit For
    End If
    Je suis receptif à toute explication ou conseil sur comment éviter ce genre de probleme à l'avenir et progresser en vba.

    Merci encore.

    Guillaume

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Pour la fonction UCASE, vous trouvez ceci dans l'aide VBA /


    UCase, fonction


    Renvoie une valeur de type Variant (String) contenant la chaîne indiquée, convertie en majuscules.
    Syntaxe
    UCase(string)
    L'argument string peut être toute expression de chaîne valide. Si l'argument string contient une valeur de type Null, Null est renvoyé.
    Remarques
    Seules les lettres minuscules peuvent être converties en majuscules. Toutes les lettres majuscules et les caractères qui ne sont pas des lettres demeurent inchangés.
    [/quote]Vous pouvez regarder aussi l'aide sur la fonction LCASE (et sur bien d'autres fonctions).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA-E] Savoir si une cellule contient un commentaire.
    Par $p00ky dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 02/08/2022, 17h57
  2. Suppression de ligne si cellule contient "prov"
    Par mathis86 dans le forum Excel
    Réponses: 3
    Dernier message: 06/07/2015, 14h47
  3. suppression dans une table qui contient une clé etrangère
    Par zana74 dans le forum Décisions SGBD
    Réponses: 13
    Dernier message: 08/08/2006, 10h58
  4. ADO : ajout suppression de colonne
    Par tyarcaouen dans le forum MFC
    Réponses: 5
    Dernier message: 25/04/2006, 13h17
  5. [Excel] Comment savoir si la cellule contient un lien hypertexte ?
    Par Millenod dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 16/12/2004, 11h01

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