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.CopyMerci 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 SubSalut 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 !
Bonne année à toi.