Coller un tableau

CISCO

XLDnaute Barbatruc
Bonsoir

Sur une feuille j'ai une plage de données, par exemple en B4:C10, avec une ligne sur deux vides. J'aimerai copier cette plage dans un tableau et ne recoller ailleurs que les lignes contenant des données à partir de E4, exactement dans le même ordre.

Pour le moment, j'ai écrit ça :

Code:
Sub transfert()
Dim tablo(), tablo2()

tablo = Range("B4:C10").Value
tablo2 = Range("E4:F7").Value

        For col = 1 To 2
                For i = 1 To UBound(tablo) Step 2
                lig = Int(i / 2) + 1
                tablo2(lig, col) = tablo(i, col)
                Next i
         Next col

Range("E4").Select
.......

End Sub

Bien sûr, il manque des lignes.
On pourrait obtenir le résultat désiré en mettant une ligne de code du style Range(...,...) = tablo (i, col) à la place de tablo2 (lig, col) = tablo (i, col).
Je pourrais aussi coller ces valeurs avec deux boucles à la place des pointillés, mais j'aimerai savoir s'il est possible de coller le tablo2 en une seule fois, sans utiliser une ou des boucles, histoire de gagner en rapidité.

@ plus

P.S : Dans la réalité, les plages initiales contiennent une soixantaine de lignes, et il faut faire cela à partir de 120 feuilles.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

@CISCO
Cette syntaxe n'est pas envisageable pour toi?
Code:
Sub Macro1()
[B4:C10].SpecialCells(xlCellTypeConstants, 2).Copy: [E4].PasteSpecial Paste:=-4104, SkipBlanks:=-1
End Sub
NB: Ici dans cet exemple, les données en B4:C10 sont du texte.
 

CISCO

XLDnaute Barbatruc
Bonjour à tous, bonjour Victor21, bonjour Staple1600

@ Victor21 : Effectivement, je n'avais pas pensé à cette possibilité, filtrer... Je vais y réfléchir...

@ Staple1600 : Vraiment très pratique, cette solution. Seulement, elle ne fonctionne, apparemment, qu'avec du texte. Cela me convient, puisque c'est mon cas. Pour ma culture, est-ce que tu aurais une solution aussi concise fonctionnant dans le cas du transfert de valeurs numériques ?

Merci à vous deux

@ plus
 

job75

XLDnaute Barbatruc
Bonjour CISCO, Patrick, JM,
@ Staple1600 : Vraiment très pratique, cette solution. Seulement, elle ne fonctionne, apparemment, qu'avec du texte. Cela me convient, puisque c'est mon cas. Pour ma culture, est-ce que tu aurais une solution aussi concise fonctionnant dans le cas du transfert de valeurs numériques ?
JM n'a pas fini sa liqueur de prunes :
Code:
Sub Macro1()
[B4:C10].SpecialCells(xlCellTypeConstants).Copy: [E4].PasteSpecial Paste:=-4104, SkipBlanks:=-1
End Sub
A+
 

CISCO

XLDnaute Barbatruc
Rebonjour

Apparemment, cela plante s'il y a une ou des listes déroulantes dans la plage initiale.


Est-ce qu'il y a une solution pour copier-transférer uniquement les valeurs de cette plage, du texte dans mon cas, sans garder les listes déroulantes ? Toujours, pour ma culture, sans utiliser de boucle si possible.

@ plus
 

Pièces jointes

  • message d'erreur.PNG
    message d'erreur.PNG
    5 KB · Affichages: 28

job75

XLDnaute Barbatruc
Re,

Chez moi pas de problème pour le copier-coller avec des listes de validation.

Maintenant si l'on veut copier uniquement les valeurs :
Code:
Sub Macro1()
[B4:C10].SpecialCells(xlCellTypeConstants).Copy
[E4].PasteSpecial xlValues
End Sub
A+
 

CISCO

XLDnaute Barbatruc
Bonjour

Effectivement, le problème ne vient pas des listes déroulantes, mais de cellules fusionnées.
De plus, je viens de voir qu'il ne faut pas supprimer toutes les cellules vides, mais uniquement celles des lignes vides, une ligne sur deux en pratique. Cf. un tout petit exemple en pièce jointe. Avec une ou des boucles, je sais faire, mais j'aurai bien aimé trouver autrement, pour gagner en rapidité, et histoire d'en apprendre un peu plus sur le sujet. S'il ni a pas moyen sans boucle, il ne faut pas vous prendre la tête avec ça...

@ plus
 

Pièces jointes

  • essai transfert sans lignes vides2.xlsm
    20.3 KB · Affichages: 27
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum, CISCO, Victor21, job75

Bonjour CISCO, Patrick, JM,
JM n'a pas fini sa liqueur de prunes

A 19h49, j'en suis pas à la liqueur de prunes mais au potage d'orties ;)

Donc en tenant compte de la correction de job75, mais en mode "raccourci"
(c'est juste histoire de voir les syntaxes possibles)
Code:
Sub Macro1a()
On Error Resume Next
[B4:C10].SpecialCells(2).Copy: [E4].PasteSpecial Paste:=-4104, SkipBlanks:=-1
Application.CutCopyMode = False
End Sub

EDITION:
@CISCO
Rien compris à ton fichier exemple ;)
(Il y a de macro dedans, ni de lignes vides)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

@CISCO
Tu m'en voudras pas de cette petite taquinerie ;)
Code:
Sub Macro1b()
[B:C].SpecialCells(-4174).Copy: [Z1].PasteSpecial -4163: [Z:AA].SpecialCells(4).Delete -4162
End Sub

NB: Je te laisse retrouver à quoi correspond -4174, -4163, 4 et -4162
(C'était là que j'ai mis du VBA en Option Taquin ;) )

PS: La copie se fait bien, mais chuis pas sur que ce soit le résultat final escompté, non ?
 

CISCO

XLDnaute Barbatruc
Bonjour

Bonsoir le fil, le forum, CISCO, Victor21, job75
Rien compris à ton fichier exemple ;)
(Il y a de macro dedans, ni de lignes vides)

Vu que les macros que j'ai essayé ne fonctionnaient pas, je les ai effacées...
Et pour ce qui est des lignes vides, effectivement, il ni en a pas car l'exemple que j'ai mis ne contenait que des cas avec des cellules fusionnées.

Je modifie ma précédente pièce jointe en y mettant ce que j'aimerai obtenir automatiquement avec la macro, et si possible sans boucle.

Merci
 

CISCO

XLDnaute Barbatruc
Rebonjour

Re

NB: Je te laisse retrouver à quoi correspond -4174, -4163, 4 et -4162
(C'était là que j'ai mis du VBA en Option Taquin ;) )

Heureusement qu'il y a l'aide de MS Office... :)
Je suppose que c'est -4175+12 = -4163 et -4175+12+1 = -4162.

Pour autant, dire que je comprend tout ce que cela signifie...

Je teste et reteste pour essayer de comprendre tout cela de ce pas...

@ plus
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 035
Messages
2 084 810
Membres
102 676
dernier inscrit
LN6