Coller des colonnes les unes sous les autres !

  • Initiateur de la discussion Initiateur de la discussion Nono
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

N

Nono

Guest
Bonjour !

Je vous explose mon problème par l’exemple :
Dans « Feuil1 » j’ai les cellules suivante :
A1 : 1
A2 : 2
A3 : 3
A4 :
A5 :

Dans chaque cellule il y a une formule et dans le cas de A4 et A5 elle donne “” (vide)
Une macro copie A1 :A5 au même endroit dans « Feuil2 »

Ensuite j’ai les résultats suivants dans « Feuil1 »

A1 : 4
A2 : 5
A3 : 6
A4 : 7
A5 :

Je souhaite que ça soit copié (en valeur uniquement) sous les résultats précédents pour avoir dans Feuil2 :

A1 : 1
A2 : 2
A3 : 3 --------
A4 : 4
A5 : 5
A6 : 6
A7 : 7

Et cela X fois.

Problème : dans « Feuil2 » lorsque j’utilise la formule* pour sélectionner la dernière ligne de la colonne pour coller mes nouvelles données ça donne :

A1 : 1
A2 : 2
A3 : 3
A4 :
A5 : --------
A6 : 4
A7 : 5
A8 : 6
A9 : 7
A10 :

En gros ça prend en compte mes “” comme cellules non vide L

* Columns("a").End(xlDown).Offset(1).Select

Si vous avez une solution ça m’arrangerait beaucoup beaucoup !

Merci
 
Effectivement, c'est pour cela que je copie "en valeur uniquement" les cellules A1:A5 de la Feuil1 vers la Feuil2.

Quand on regarde dans les cellules de la Feuil2 (A4, A5) rien n'apparaît, ni valeur, ni formule. Pourtant il ne les considèrent aparemment pas comme vides 🙁
 
Une chaîne nulle "" n'est pas rien et donc la cellule n'est pas vide.
Solution : mettre en filtre automatique, sélectionner non vides dans le filtre (EXCEL utilise les mêmes termes mais n'y met pas les mêmes choses !!)
Puis copier collage spécial valeurs : les lignes ayant "" ne sont pas affichées et pas copiées.
Chris
 
Slt Nono, tu peux essayer de faire un truc comme ca :

Sub test()
Dim rg_fill As Range, rg_zone As Range, rg As Range

Set rg_zone = Sheets("Feuil1").Range("A:A").SpecialCells_(xlCellTypeConstants, xlNumbers)
For Each rg In rg_zone.Areas
Debug.Print rg.Address
If Not rg_fill Is Nothing Then
Set rg_fill = Union(rg_fill, rg)
Else
Set rg_fill = rg
End If
Next rg
rg_fill.Copy Destination:=Sheets("Feuil2").[A1]

End Sub
 
Suite a mon message precedent voici exactement ce que tu veux faire (+ fichier joint):

Sub test()
Dim rg_fill As Range, rg_zone As Range, rg As Range

Set rg_zone = Sheets("Feuil1").Range("A:A").SpecialCells(xlCellTypeConstants, xlNumbers)
For Each rg In rg_zone.Areas
Debug.Print rg.Address
If Not rg_fill Is Nothing Then
Set rg_fill = Union(rg_fill, rg)
Else
Set rg_fill = rg
End If
Next rg
rg_fill.Copy Destination:=Sheets("Feuil2").[A1].SpecialCells(xlCellTypeLastCell).Offset(1, 0)

End Sub
 

Pièces jointes

Trop fort !
Merci beaucoup Fred, c'est exactement ce que je cherchais... mais il y a un problème 🙁

En reprenant ton classeur :
Feuil1 :
A1 : 1
A2 : 2
A3 : 3
A4 : ""
A5 : ""

En appuyant sur le bouton TEST de ta formule 2 fois on a dans Feuil2 :
A1 :
A2 : 1
A3 : 2
A4 : 3
A5 : 1
A6 : 2
A7 : 3

Jusque là pas de problème.
Mais si tu effaces maintenant les cellules A1 à A7 de la feuille 2 pour entrer une nouvelle série de données et qu'ensuite tu rappuies sur le bouton test, tu as :
Feuil2 :
A1 :
A2 :
A3 :
A4 :
A5 :
A6 :
A7 :
A8 : 1
A9 : 2
A10 : 3

Ca repart en dessous des données effacées 🙁 hors je souhaite que ça reparte du haut !

Une petite modif dans ton programme à faire ?

merci en tout cas 🙂
 
Slt, bon alors fait ceci :

Sub test()
Dim rg_fill As Range, rg_zone As Range, rg As Range

Set rg_zone = Sheets("Feuil1").Range("A:A").SpecialCells(xlCellTypeConstants, xlNumbers)
For Each rg In rg_zone.Areas
Debug.Print rg.Address
If Not rg_fill Is Nothing Then
Set rg_fill = Union(rg_fill, rg)
Else
Set rg_fill = rg
End If
Next rg
rg_fill.Copy Destination:=Sheets("Feuil2").[A65536].End(xlUp).Offset(1, 0)

End Sub
 
Ah merci, ça marche super maintenant !

Sauf que… non tu vas dire que j’exagères, surtout que je sais contourner le problème.
Je te le dis quand même J
Dans la colonne A de la feuille 1, si tu remplaces les valeurs par des formules comme ça par exemple :
A1 : =SI(B1="";"";B1)
A2 : =SI(B2="";"";B2)
Etc.

Si tu appuies sur le bouton TEST, ça fait erreur et la ligne
Set rg_zone = Sheets("Feuil1").Range("A:A").SpecialCells(xlCellTypeConstants, xlNumbers)
S’illumine dans le deboggeur.

Bon en fait pour contourner le problème je vais mettre les formules ailleurs, copier en valeur les résultats dans la colonne A puis lancer la macro TEST.

Voilà, merci pour tout !
 
bonjour


crééez deux variables range, une pour les nombres constants et l'autre pour les nombres issus de formules et ajouter l'instruction on error resume next


on error resume next

dim rg_const_nr as zone, rg_formu_nr as range, rg_zone as range
set rg_const_nr=...specialcells(xlcelltypeconstants,xlnumbers)
set rg_formu_nr =...specialcells(xlcelltypeformulas,xlnumbers)


if not rg_const_nr is nothing then set rg_zone=rg_const_nr

if not rg_formu_nr is nothing then

if not rg_zone is nothing then
set rg_zone=union(rg_zone, rg_formu_nr)
else
set rg_zone=rg_formu_nr
end if
end if

if not rg_zone is nothing then rg_zone.select

be
Stéphane
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
3
Affichages
368
Réponses
10
Affichages
302
Réponses
7
Affichages
222
Réponses
10
Affichages
597
Retour