[VBA] Aide à creer une macro qui copie uniquement cellules non-vides

INFINITY100

XLDnaute Occasionnel
Bonjour à tous!

Je débute en VBA, et je suis face à un petit problème de prise de tête.

J'ai une colonne "A16:M16" avec certaines cellules vides et non-vides, donc je voudrai bien avoir une macro qui me copie les cellules non-vides et cette copie prend en charge aussi une nouvelle cellule à chaque fois cette dernière se rempli

j'ai eu une macro qui réalise ça seulement quand je change les cellules de copie dans la macro je n’obtiens pas ce que je veux car elle me fait copier les cellules vides et non-vides

Voici la macro :

Code:
Option Explicit
'

Sub CopieDepuisA2()
Dim F As Worksheet, Te(), Ts() As String, Le As Long, Ls As Long
Set F = ActiveSheet
Te = F.Range(F.[A2], F.Cells(F.Rows.Count, "A").End(xlUp)).Value
For Le = 1 To UBound(Te)
   If Not IsEmpty(Te(Le, 1)) Then ReDim Preserve Ts(0 To Ls): Ts(Ls) = Te(Le, 1): Ls = Ls + 1
   Next Le
PressePapier = Join(Ts, vbCrLf)
End Sub
'

Rem. Important: Cochez "Microsoft Forms 2.0 Object Library" dans la liste Références disponibles, menu Outils, Références…
Property Get PressePapier() As String
Dim DOb As New DataObject
On Error Resume Next
DOb.GetFromClipboard: PressePapier = DOb.GetText
If Err Then MsgBox "Pas de données récupérées", vbCritical, "PressePapier"
End Property
Property Let PressePapier(Z As String)
Dim DOb As New DataObject
DOb.SetText Z: DOb.PutInClipboard
End Property

PS : les cellules que je change dans la macro sont :
Sub CopieDepuisA2()
Te = F.Range(F.[A2], F.Cells(F.Rows.Count, "A").End(xlUp)).Value

je joins avec cette demande le fichier pour plus de détails

Merci à vous tous

Cordialement
 

Pièces jointes

  • Macro de la copie.xlsx
    20.4 KB · Affichages: 84
  • Macro de la copie.xlsx
    20.4 KB · Affichages: 88
  • Macro de la copie.xlsx
    20.4 KB · Affichages: 92

Dranreb

XLDnaute Barbatruc
Re : [VBA] Aide à creer une macro qui copie uniquement cellules non-vides

Bonsoir
Tiens, je reconnais quelque chose !
Chez moi en remettant le module (pourquoi joint en .xlsx et pas en .xlsm ? ou mieux en .xls pour moi.) et la référence nécessaire ça marche toujours en mettant juste ça :
VB:
Te = F.Range(F.[A16], F.Cells(F.Rows.Count, "A").End(xlUp)).Value

Notez, en l'écrivant comme ça ce serait peut être d'un usage plus large, avec juste une manoeuvre en plus d'abord: sélectionner la cellule de départ :
VB:
Sub CopieDepuisSélection()
Dim Cel As Range, F As Worksheet, Te(), Ts() As String, Le As Long, Ls As Long
Set Cel = Selection(1, 1) ' le (1,1) c'est surtout au cas où ce serait une plage fusionnée sur plusieurs colonnes.
Set F = Cel.Worksheet
With F.Range(Cel, F.Cells(F.Rows.Count, Cel.Column).End(xlUp))
   If .Rows.Count = 1 Then ReDim Te(1 To 1, 1 To 1): Te(1, 1) = .Value Else Te = .Value
   End With
For Le = 1 To UBound(Te)
   If Not IsEmpty(Te(Le, 1)) Then ReDim Preserve Ts(0 To Ls): Ts(Ls) = Te(Le, 1): Ls = Ls + 1
   Next Le
PressePapier = Join(Ts, vbCrLf)
End Sub
 
Dernière édition:

INFINITY100

XLDnaute Occasionnel
Re : [VBA] Aide à creer une macro qui copie uniquement cellules non-vides

Merci Dranreb

il me semble que j'ai trouvé ce qui me cause l'erreur effectivement la macro est correcte mais dans le cas ou le contenue des cellules vides se génère via une formule la copie de la cellule est prise en considération même si elle est vide réellement, je te joins le fichier en format que tu veux pour être plu claire

Donc s'il y a moyen de me convertir cette formule en macro ça serai génial

Code:
=SI(Feuil2!$F$27>Feuil2!$F$29;"Erreur ! Index de ne doit pas être supérieur à index à";SI(Feuil2!$F$29="";"";SI(LIGNE()-16>Feuil2!$F$29-Feuil2!$F$27;"";SI(Feuil2!$D$13=2;CONCATENER("C: ";Feuil2!$F$19;" ";Feuil2!$F$21;" ";Feuil2!$F$23;Feuil2!$F$27+LIGNE()-16;" ";Feuil2!$F$25);CONCATENER("N: ";Feuil2!$F$19;" ";Feuil2!$F$21;" ";Feuil2!$F$23;Feuil2!$F$27+LIGNE()-16;" ";Feuil2!$F$25;" ";Feuil2!$F$31)))))

Merci encore
 

Pièces jointes

  • Macro de la copie.xlsm
    27.3 KB · Affichages: 57
  • Macro de la copie.xlsm
    27.3 KB · Affichages: 62
  • Macro de la copie.xlsm
    27.3 KB · Affichages: 65

Dranreb

XLDnaute Barbatruc
Re : [VBA] Aide à creer une macro qui copie uniquement cellules non-vides

Par définition une cellule contenant une formule n'est pas vide réellement !
Cependant si vous voulez aussi ignorer les formules qui rendent une chaine vide remplacez le test If Not IsEmpty(Te(Le, 1)) par If Te(Le, 1) <> ""
Quand à la formule, je ne vois pas ce qu'elle vient faire là, je n'en vois pas trace dans le classeur joint.
 

INFINITY100

XLDnaute Occasionnel
Re : [VBA] Aide à creer une macro qui copie uniquement cellules non-vides

Merci Dranreb

Chapeau là je peux dire que la macro est parfaite, et pour la formule oui tu as raison elle n'est pas présente dans mon classeur mais tout de même c'est elle qu j'envisage de mettre dans 10000 cellules c'est beaucoup certes, et c'est pour cela que je cherche si je peux dire à la résumer sous forme de macro pour éviter de la répéter 10000 fois

Voici le classeur avec formule ci-joint
 

Pièces jointes

  • Macro de la copie.xlsm
    28.7 KB · Affichages: 56
  • Macro de la copie.xlsm
    28.7 KB · Affichages: 66
  • Macro de la copie.xlsm
    28.7 KB · Affichages: 69
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16