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.
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 ?
@ 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 ?
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.
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...
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)
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.