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 :

si cellule vide supprimer colonne entière VBA [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 353
    Points : 184
    Points
    184
    Par défaut si cellule vide supprimer colonne entière VBA
    Bonjour,

    J'ai un classeur 'donnees' qui renvoie des données triées dans le classeur 'program'.
    Je voudrais ajouter au code du classeur 'donnees' un code qui permet de supprimer la ligne entière, dans le cas où il trouve que la cellule de la colonne A est vide .

    Pour cela je pense qu'il faudrait ajouter le code suivant au code du classeur 'donnees':
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Sub effacer()
    For Each c In Sheets("feuil1").Range("A1:A" & Range("A65356").End(xlUp).Row)
    If c = "" Then c.EntireRow.Delete
    Next c
    End Sub
    Mais comment l'intégrer au code déjà existant du classeur 'donnees' pour ne pas faire plusieurs exécutions de différents codes???

    Merci
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 652
    Points : 1 116
    Points
    1 116
    Par défaut
    Bonjour

    pour effacer sans boucler
    http://excel.developpez.com/faq/?pag...eCellLigneVide

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 353
    Points : 184
    Points
    184
    Par défaut
    Merci pour ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    'Supprime la ligne complète si les cellules de
    'la colonne A sont vides.
    Dim x As Long
     
    x = Range("A65536").End(xlUp).Row
    Cells.Range("A1:A" & x). _
        SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    c'est bien ce résultat que je voulais mais où l'insérer exactement pour que lorsque j'execute le petit algo. du classeur 'donnees' ça me renvoi bien les données vers le classeur 'program' (comme il fait très bien actuellement) puis qu'il me supprimer ensuite les lignes correspondantes (aux données renvoyés) à la fin automatiquement?

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut
    bonjour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells.Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    c'est a toi de decider a quel moment tu veux excuter cette fonction
    on ne peut pas deviner a ta place

    maintenant cette fonction supprime la ligne entiere ou ce trouve les cellules blanche(vide)

    mais dans ton titre c'est la colonne que tu veux supprimer
    est ce une erreur du titre ou du 1 er code que tu a proposé???????

    si c'est le cas alors pour la colonne en entier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells.Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeBlanks).EntireColumn.Delete

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 353
    Points : 184
    Points
    184
    Par défaut
    Actuellement j'ai deux fichier 'donnees' et 'program' :

    lorsqu'on execute le fichier 'donnees' et qu'on selectionne le fichier 'program' qui fait office de fichier de destination, il trie les données qu'il a pour ensuite les envoyés dans le fichier 'program' mais le probleme est qu'on trouve des cellule vide dans la colonne A.

    C'est pour ça que j'aimerais introduire ce code dans le fichier 'donnees' pour qu'il l'execute ce code uniquement après avoir envoyé les données triés dans le fichier 'program'.

    et c'est ça mon probleme maintenant , comment integrer le code que vous me donner pour que lorsque j'execute le fichier 'donnees' ça me revoi les données dans le fichier 'program' d'une part puis ça me supprimer les lignes correspondantes aux cellules de la colonne A vide afin de resulter d'une plage de données complète (sans cellule vide de la colonne A)

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    Dans ce cas là c'est à la fin quand les données sont dans le fichier program qu'il faut lancer cette fonction, car je suppose que tu veux garder l'autre fichier intact.
    Alors attention travailles avec des variables classeurs pour ne pas te tromper.

    Au plaisir

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 353
    Points : 184
    Points
    184
    Par défaut
    Oui c'est bien ça que je veux, une fois que les données sont arrivée dans le fichier 'program'

    mais pouvez vous svp me faire un exemple de ça??

    Citation Envoyé par patricktoulon Voir le message
    re
    dans ce cas la c'est a la fin quand les données sont dans le fichier program

    qui faut lancer cette fonction ....

    au plaisir
    n'est il donc pas possible d'intégrer ce code à la fin pour que ça me fais tout d'un seul coup (renvoi de valeurs + supprimer les lignes ensuite)?

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    C'est ce que je t'ai dit dans ma dernière réponse.

    Tu mets cette ligne de code à la fin de celui qui transfère les données.

  9. #9
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 353
    Points : 184
    Points
    184
    Par défaut
    j'essaye mais il y a un problème...

    j'ai bien mis à la fin de ce code le code qui permet de supprimer les lignes mais ça m'indique un problème (je pense qu'il faut rajouté des variables)???

    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
    Option Explicit
     
    '/!\ Active la Référence Microsoft Scripting Runtime
     
    Sub Traiter()
    Dim Wbk As Workbook
    Dim Fichier
     
    Fichier = Application.GetOpenFilename("Excel Files (*.xlsm*), *.xlsm*")
    If Fichier <> False Then
        Set Wbk = Workbooks.Open(Fichier)
        Recap Wbk.Worksheets(2).Range("A3")
        Wbk.Close True
        Set Wbk = Nothing
    End If
    MsgBox "Traitement terminé..."
     
    Cells.Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeBlanks).EntireColumn.Delete
     
    End Sub
     
    Private Sub Recap(ByVal Rng As Range)
    Dim LastLig As Long, I As Long, j As Long, N As Long
    Dim Dico As Scripting.Dictionary
    Dim Tb, Tmp, Res()
    Dim Str As String
     
    Application.ScreenUpdating = False
    With ThisWorkbook.Worksheets("Feuil1")
        LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
        Tb = .Range("A2:D" & LastLig)
    End With
     
    Set Dico = New Scripting.Dictionary
    For I = 1 To LastLig - 1
        Str = Tb(I, 2) & "µ" & Tb(I, 4)
        If Not Dico.Exists(Str) Then
            Dico.Add Str, CStr(I)
        Else
            Dico(Str) = Dico(Str) & ";" & CStr(I)
        End If
    Next I
     
    N = Dico.Count
    If N > 0 Then
        ReDim Res(1 To N, 1 To 6)
        For j = 1 To N
            Tmp = Split(Dico.keys(j - 1), "µ")
            Res(j, 1) = Tmp(0)
            Res(j, 6) = Tmp(1)
            Res(j, 5) = Nb(Dico.Items(j - 1))
        Next j
        Rng.Resize(N, 6) = Res
    End If
    Set Dico = Nothing
    End Sub
     
    Private Function Nb(ByVal Str As String, Optional ByVal Sep As String = ";") As Integer
     
    Nb = Len(Str) - Len(Replace(Str, Sep, "")) + 1
    End Function
     
    Sub supprimer()
    With Workbooks("program").Worksheets("Data")
    Cells.Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeBlanks).EntireColumn.Delete
    End With
    End Sub

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    Bonjour

    Quand tu utilises un "with /end with" l'élément enfant est précédé d'un point.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Workbooks("program").Worksheets("Data")
    .Cells.Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeBlanks).EntireColumn.Delete
    End With
    au plaisir

  11. #11
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 353
    Points : 184
    Points
    184
    Par défaut
    ok merci pour cette correction

    mais svp essayez d'introduire ce code dans le fichier 'donnees' car chez moi ça ne fonctionne pas du tout...

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    Bonsoir

    Je viens de télécharger tes deux fichiers, j'ai lancé ta macro et la boum!!!!!!. Tout Excel a planté j'ai été obligé de faire appel à l'exécuteur de tâches.

    D'ailleurs j'ai même l'impression que tu travailles à l'envers.
    Lequel de ces deux fichiers se met à jour régulièrement ?

    Alors pour faire court, dis moi en français ce que tu veux faire exactement du fichier données au fichiers program. Je dis bien en français par en langage informatique.

    edit:!!!! c'est le fichier program qui ne va pas. Il fait planter Excel. Je ne sais s'il y a des macros dedans mais en tout cas il ne démarre pas chez moi.
    Au plaisir

  13. #13
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 353
    Points : 184
    Points
    184
    Par défaut
    Bonsoir, tout d'abord je suis dsl que cela vous ai arrivé (ça ne m'a jamais encore fais cela perso.)

    Je vais donc essayer d'être le plus clair possible:

    le fichier 'donnees' renvoi ses données triés (selon la date et le lieu) au fichier 'program' ( avant de l'éxecuter il faut bien veiller à ce que Microsoft Scripting Runtime soit activer en allant dans outil ==> reference et cocher la case en question) car lors de l'execution il nous demandera de lui trouver le chemin du fichier 'program' afin qu'il renvoi bien les données dans ce fichier (le fichier program se referme automatiquement une fois les données rentrées).
    Bref le probleme étant que lorsque j'ouvre ensuite le fichier 'program', il se peut qu'il y a des cellules de la colonne A vides (et donc inutile pour moi) c'est pour cette raison que je tiens absolument à rajouter ce petit code à la fin pour avoir comme résultat non seulement les données triées mais aussi ne plus avoir de cellule de la colonne A vide entre les données.

    De plus j'aimerais bénéficier de tout ce résultat en une seul exécution (c'est à dire à partir du fichier 'donnees').

  14. #14
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 353
    Points : 184
    Points
    184
    Par défaut
    Merci beaucoup patricktoulon! c'est bon je viens de trouver l'emplacement du code exact.

    en fait il suffisait de l'intégrer comme suit dans le code du fichier 'donnees':

    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
     
    Sub Traiter()
    Dim Wbk As Workbook
    Dim Fichier
     
    Fichier = Application.GetOpenFilename("Excel Files (*.xlsm*), *.xlsm*")
    If Fichier <> False Then
        Set Wbk = Workbooks.Open(Fichier)
        Recap Wbk.Worksheets(2).Range("A3")
       With Sheets("Data")
     On Error Resume Next
     .Cells.Range("A3:A" & .Range("A" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
     Err.Clear
       End With
       Wbk.Save
        Wbk.Close True
        Set Wbk = Nothing
    End If
    MsgBox "Traitement terminé..."
    End Sub

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

Discussions similaires

  1. Suppression de toutes les lignes avec cellule vide en colonne A
    Par Cyclemmanuel dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/05/2012, 19h43
  2. [XL-2007] recherche cellule vide dans colonne
    Par dandy87 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 27/11/2010, 16h33
  3. Recherche de cellule vide par colonne
    Par ceres02 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/10/2008, 11h05
  4. Copy premiere Cellule vide dans colonne
    Par dvguy dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/12/2006, 16h32
  5. [VBA-E]supprimer des cellules vide
    Par garn dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 13/02/2006, 11h56

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