Sélection d'une plage variable sans formules vides

Bonjour à tous,

Je rencontre un problème avec des cellules contenant un résultat de formule "vide". Je m'explique :

Dans une feuille de calcul j'ai deux tableaux.

Le premier (AG13:AL29) comporte des formules dans l'ensemble des cellules. Certaine de ces formules affichent un résultat, d'autres n'affiche rien (résultat d'une condition =SI avec ""). Les cellules ne sont donc pas "vides".

Dans mon second tableau (AN13:AS29), j'ai copié le contenu du premier tableau et je l'ai collé avec la fonction "coller valeur" afin de ne pas coller les formules.

Ensuite je tri ce tableau par ordre alphabétique en vu d'exporter le résultat vers un autre classeur.

Le problème est que mes valeurs se retrouve en bas du tableau car Excel ne considère pas les cellules "coller valeur" comme vide. Le problème persiste lorsque que je souhaite sélectionner les cellules non vide de mon tableau pour les exporter : les cellules "vide" sont sélectionnées également

Je souhaiterais savoir comment faire (en VBA bien sûr) pour soit :

1- Ne pas prendre en compte les cellules contenant un résultat de formule "vide" lors d'un copier/coller valeur ?

2- Supprimer ou ne pas tenir compte des cellules résultant du copier/coller valeur "vide" lors de mon tri alphabétique dans mon second tableau ?

3- Ne pas tenir compte des cellules résultant du copier/coller valeur "vide" lors de ma sélection de plage variable pour mon export vers mon autre classeur après mon tri ?

Voici un extrait de ma macro reprenant ce que j'ai expliqué au dessus :

' Copie et colle les valeurs des factures dans le tableau de tri
    Range("AG13:AL29").Select
    Selection.Copy
    Range("AN13").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
'
' Tri par ordre alphabétique les valeurs des factures du tableau de tri
    ActiveWorkbook.Worksheets("FA").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("FA").Sort.SortFields.Add Key:=Range("AN13:AN29"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("FA").Sort
        .SetRange Range("AN12:AS29")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
'
' Copie des valeurs du tableau en vue de l'export
    ' Définition de la plage de cellule
        'Ne pas afficher les cellules vides
            ActiveSheet.Range("$AN$13:$AS$29").AutoFilter Field:=1, Criteria1:="<>"
        'Selectionner toutes les cellules pleines
            Dim MaPlage As Range
            Set MaPlage = Range("AN13:AS" & Range("AN13").End(xlDown).Row)
            MaPlage.Select
        'Retirer les filtres
            ActiveSheet.Range("$AN$13:$AS$29").AutoFilter Field:=1
    ' Copie de la plage de cellule
        Selection.Copy

Merci d'avance pour vos réponses

Clément

Bonsoir,

Il faudrait épurer ton code (des Select et des éléments inutiles...) et commencer à oublier l'enregistreur. Les cellules qui n'affichent rien ne sont pas vides, elles contiennent du texte (la valeur "" est une valeur texte), et il est inévitable qu'en copiant on la copie et donc on la colle. Conclusion : ne pas copier coller mais composer un tableau (VBA) auquel on n'affectera que les valeurs souhaitées.

Et si la copie ne servait qu'à traiter les données avant de les exporter, rien n'empêche de les traiter entièrement hors Excel en VBA...

Cordialement.

Bonjour,

Un début de réponse pour appréhender la question.

Cdlt.

Public Sub DEMO()
Dim tbl, Arr()
Dim I As Long, J As Long, k As Long
    [AN13].CurrentRegion.ClearContents
    tbl = [AG13:AL29]
    For I = 1 To UBound(tbl, 1)
        If Len(tbl(I, 1)) > 0 Then
            ReDim Preserve Arr(6, k + 1)
            For J = 0 To 5
                Arr(J, k) = tbl(I, J + 1)
            Next J
            k = k + 1
        End If
    Next I
    With [AN13]
        .Resize(UBound(Arr, 2), 6).Value = Application.Transpose(Arr)
        .CurrentRegion.Sort _
                key1:=[AN13], _
                Order1:=xlAscending, _
                Header:=xlYes
    End With
    Erase Arr
End Sub

Salut Jean-Eric !

Bonjour MFerrand et Jean-Eric,

Bonne Année a vous, désolé de ne pas vous avoir répondu plus tôt...

Pour tout vous dire mon problème s'est résolu bêtement, j'ai réouvert mon classeur le lendemain et relancer la macro, elle fonctionne parfaitement depuis... je ne comprend pas pourquoi un redémarrage d'Excel à résolu le problème.

MFerrand en effet l'enregistreur est pratique pour les novices, et j'essaye désormais de faire sans du mieux que je peux.

Jean-Eric merci pour ce code, je l'essaye et te tiens au courant

Cdlt

Clément

MFerrand en effet l'enregistreur est pratique pour les novices

Je ne suis pas certain que son rôle soit majoritairement positif, il conduit par mimétisme à produire du mauvais code, et incite à délaisser l'apprentissage des bases par fausse facilité...

Il a un intérêt pour débusquer un point de syntaxe difficile à établir : on enregistre une opération et on va ensuite chercher le tiers ou le quart de ligne intéressant... dans la quantité produite ! (quoiqu'il m'est arrivé que ce que je cherchais ne soit pas enregistré !)

Bonne année à toi.

Rechercher des sujets similaires à "selection plage variable formules vides"