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 :

Nb de colonne non vide - NBVAL en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    technicien de bureau d'etude
    Inscrit en
    Juillet 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : technicien de bureau d'etude

    Informations forums :
    Inscription : Juillet 2015
    Messages : 15
    Par défaut Nb de colonne non vide - NBVAL en VBA
    Bonjour,

    Je suis débutant mais j'arrive à me débrouille avec toutes les sources sur internet.

    Mais je suis un peux embêter pour cette fois si.

    Ma formule cherche dans la ligne 4 une valeur entre la 1er colonne et la 33eme colonne et il supprime la colonne qui dispose de ma valeur cherchée.

    actuellement j'utilise cette valeur script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim I As Integer
        For I = 33 To 1 Step -1
        If Cells(4, I).Value = "XXXX" Then Columns(I).Delete
        Next I
    Pouvez-vous m'indiquer comment rendre la valeur 33 dynamique, c'est-à-dire:

    Aujourd'hui je dispose de 33 colonnes dans mon fichier excel, voudrait si possible qu'une formule rende possible d’âcrement le 33 si je rajoute encore 60 colonnes dernières.

    J'ai peur que la colonne qui dois être effacé passe au-delà de la colonne 33 un jour ou l'autre.

    Je sais que sur Excel j'aurais fait =NBVAL sur la ligne 4 mais je sais pas comment le retranscrire sur VBA.

    Merci de votre coup de main les amies.

    Et toutes mes excuses mon mauvais français.

    Filipe Da Silva

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Felipe, bonjour le forum,

    Essaie comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Macro1()
    Dim DC As Integer
    Dim I As Integer
     
    DC = Cells(4, Application.Columns.Count).End(xlToLeft).Column
    For I = DC To 1 Step -1
        If Cells(4, I).Value = "XXXX" Then Columns(I).Delete
    Next I
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    technicien de bureau d'etude
    Inscrit en
    Juillet 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : technicien de bureau d'etude

    Informations forums :
    Inscription : Juillet 2015
    Messages : 15
    Par défaut
    Citation Envoyé par Thautheme Voir le message
    Bonjour Felipe, bonjour le forum,

    Essaie comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Macro1()
    Dim DC As Integer
    Dim I As Integer
     
    DC = Cells(4, Application.Columns.Count).End(xlToLeft).Column
    For I = DC To 1 Step -1
        If Cells(4, I).Value = "XXXX" Then Columns(I).Delete
    Next I
    End Sub
    Perfecto Réponse Ultra rapide et 100 % fonctionnel :p

    MERCI BEAUCOUP.

    Petite question si j'ai le même bout de script derrière avec une valeur différente (plusieurs colonne à supprimé) je dois réintégré DC ou je dois juste le faire avant Next ?

    Merci encore

  4. #4
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Re,

    Pas vraiment compris ta question... Mais puisque tu boucles de la dernière colonne utilisée à la première, tu ne dois connaître la dernière colonne DC qu'une seule fois, avant la boucle...

    [Édition]
    Arf ! En relisant j'ai enfin compris. Si tu relances une nouvelle boucle derrière, comme DC aura changé, il faudra la recalculer avec le même code que tu répèteras juste avant la nouvelle boucle...

  5. #5
    Membre averti
    Homme Profil pro
    technicien de bureau d'etude
    Inscrit en
    Juillet 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : technicien de bureau d'etude

    Informations forums :
    Inscription : Juillet 2015
    Messages : 15
    Par défaut
    Quel version est la plus correcte :
    Solution 1
    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
    Sub Macro1()
    Dim DC As Integer
    Dim I As Integer
     
    DC = Cells(4, Application.Columns.Count).End(xlToLeft).Column
    For I = DC To 1 Step -1
        If Cells(4, I).Value = "XXXX" Then Columns(I).Delete
    Next I
    Dim DC As Integer
    Dim I As Integer
     
    DC = Cells(4, Application.Columns.Count).End(xlToLeft).Column
    For I = DC To 1 Step -1
        If Cells(4, I).Value = "YYYY" Then Columns(I).Delete
    Next I
    End Sub
    Ou cette solution 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Macro1()
    Dim DC As Integer
    Dim I As Integer
     
    DC = Cells(4, Application.Columns.Count).End(xlToLeft).Column
    For I = DC To 1 Step -1
        If Cells(4, I).Value = "XXXX" Then Columns(I).Delete
        If Cells(4, I).Value = "YYYY" Then Columns(I).Delete
    Next I
    End Sub
    J'ai plusieurs colonne à supprimé donc plusieurs argument à trouvé dans parmi toutes les colonnes.
    Donc je cherche à simplifié au maximum, les scripte que je commence à comprendre.

    [edition ] je pense pas utile de refaire un DC puisque la valeur sera inferieur donc au pire des cas il trouveras toujours ma colonne a l'inverse si je devais ajouté sa aurais pu posé probleme mais la non .

  6. #6
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Re,

    le bon code serait plutôt :
    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
    Sub Macro1()
    Dim DC As Integer
    Dim I As Integer
     
    DC = Cells(4, Application.Columns.Count).End(xlToLeft).Column
    For I = DC To 1 Step -1
        If Cells(4, I).Value = "XXXX" Then Columns(I).Delete
    Next I
     
    DC = Cells(4, Application.Columns.Count).End(xlToLeft).Column
    For I = DC To 1 Step -1
        If Cells(4, I).Value = "YYYY" Then Columns(I).Delete
    Next I
    End Sub
    Dans une procédure, la déclaration des variables se fait, par convention, au début et une seule fois...

  7. #7
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Si la ligne 1 d'une colonne est toujours renseignée, tu peux chercher sur la ligne 1 la dernière colonne utilisée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub test()
        Dim derniere_colonne As Long
        derniere_colonne = ActiveSheet.Cells(1, Application.Columns.Count).End(xlToLeft).Column
    End Sub
    Autre solution s'il n'y a rien à droite de tes colonnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub test()
        Dim rg As Range: Set rg = ActiveSheet.UsedRange
        Dim derniere_colonne As Long: derniere_colonne = rg.Cells(rg.Cells.Count).Column
    End Sub

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/06/2015, 12h54
  2. Compter Nb de colonne non Vide dans une ligne
    Par deaqu1 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/01/2008, 15h13
  3. Obtenir la lettre de la derniere colonne non vide pour faire un tri.
    Par arnold95 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/10/2007, 15h25
  4. dernière ligne et colonne NON VIDE
    Par k-eisti dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/07/2007, 18h10
  5. [MEGA DEBUTANT] Compter le nombre de colonne non vide
    Par drikse dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/09/2006, 10h59

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