XL 2013 Coller seulement dans les cellules visibles

EveDesLys

XLDnaute Nouveau
Bonjour à tous,

J'ai des données dans une colonne que je veux copier et coller dans un autre onglet. Mais, dans mon autre onglet, il y a des cellules masquées et je veux qu'il les ignorent pour coller seulement sur les cellules visibles.

Merci d'avance de votre aide!
 

EveDesLys

XLDnaute Nouveau
Je l'ai corrigé mais ça fait un "coller" ordinaire, il met une donnée dans ma 10e ligne qui est masqué au lieu de coller la dernière donnée dans la 12e ligne (exemple). Je n'ai pas mis le fichier Excel car il contient beaucoup de données personnelles. Merci.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
1112.gif

Même avec un effort, trop fort pour moi.
 

soan

XLDnaute Barbatruc
Inactif
@EveDesLys, le fil,

ajout :

1) comme c'est avec ...Operation:=xlNone, SkipBlanks:=False, Transpose:=False

tu peux abréger en : Selection.PasteSpecial Paste:=xlPasteValues

2) comme le 1er argument de PasteSpecial est justement Paste, tu peux enlever le nom Paste, car il se trouve en 1ère position dans l'ordre d'apparition des paramètres de PasteSpecial ; ça devient donc :​

Selection.PasteSpecial xlPasteValues

3) si en plus tu utilises la constante numérique de xlValues à la place de xlValues, ça devient :

Selection.PasteSpecial -4163

4) ah ben non, c'est fini : y'a plus d'optimisation possible ! ... à part celle mentionnée par @Marcel32 dans son post #13 ; c'était à propos de [B62].Select et Selection.PasteSpecial... ; donc l'instruction entière est :

[B62].PasteSpecial -4163



et on était parti de quoi, déjà ? ah oui, de ça :

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

comme qui dirait, m'est avis que ça vient tout droit de l'Enregistreur de macros !!! 😄

soan​
 

soan

XLDnaute Barbatruc
Inactif
@EveDesLys

ajout : le nom de toutes les constantes Excel commence par xl ; par exemple xlPasteValues ou xlValues ; toute constante Excel a une valeur numérique qu'on appelle "constante numérique" ; et justement, le nombre de la constante numérique pour xlPasteValues ou xlValues est : -4163

conclusion : si tu écris :​

[B62].PasteSpecial xlPasteValues ou [B62].PasteSpecial xlValues

c'est comme si tu écrivais :

[B62].PasteSpecial -4163 ; c'est idem : c'est kif kif bourricot ! 😜

lors de la phase de compilation du projet VBA, le compilateur traduira toutes ces instructions par le même code machine ! mais j'saurais pas te dire en quel langage s'est traduit ! je ne crois pas que ce soit en assembleur ; ça doit plutôt être en C++ ; peut-être même que c'est traduit dans un langage intermédiaire P-Code, qui lui est traduit en C++ ; ce n'est pas moi qui est conçu Excel et VBA, alors ne m'en demande pas trop ! c'est à Microsoft qu'il faut demander des précisions ! 😛

soan
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
@EveDesLys

autre exemple : False a la valeur 0 ; donc :

Application.CutCopyMode = False

peut être remplacé par :

Application.CutCopyMode = 0



à partir de ton code VBA, voici un un autre exemple amusant :

Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

* comme les 2 paramètres indiqués sont dans l'ordre naturel de leur apparition, ça devient :​

Selection.Insert xlToRight, xlFormatFromLeftOrAbove

* xlFormatFromLeftOrAbove peut être remplacé par le nombre 0

* xlToRight peut être remplacé par le nombre 2

donc ça devient :

Selection.Insert 2, 0

c'est bien plus court, hein ? y'a pas photo ! 😄

soan
 

EveDesLys

XLDnaute Nouveau
Ça ne fonctionne pas. J'ai mis ici une image ou on voit mon tableau. J'essaie de prendre la sélection surlignée en jaune et la copier à partir de la case B62. Mais je ne veux pas que ça "colle" de valeur dans la case B70 qui est masquée, je voudrais que ça passe la ligne masquée et que ça mette la donnée dans la case B71. C'est peut-être plus clair avec une image.
 

Pièces jointes

  • Sans titre.png
    Sans titre.png
    30.2 KB · Affichages: 23

TooFatBoy

XLDnaute Barbatruc
A défaut d'un classeur (pas forcément utile ;)), est-ce que tu peux donner un exemple ?

C'est un truc du genre : copier B2:B6 d'une feuille, en C3;C7:C9;C12 de l'autre feuille ???
Donc en gros, tu aurais répondu à cette question en #12, ça aurait éviter à l'ami @sylvanu de se péter désespérément les neurones sur sa boule de cristal en #20...
 

TooFatBoy

XLDnaute Barbatruc
Perso je ne sais pas faire avec une instruction VBA, alors j'essaierai de faire un bout de code qui colle chaque cellule de la sélection selon si la cellule de la colonne cible est affichée ou non.
Mais ce serait du VBA, donc bonjour la lenteur...

Je tente une nouvelle question : est-ce que ici "B62" veut en fait dire "première cellule non masquée de la colonne B" ???
 

EveDesLys

XLDnaute Nouveau
C'est que les données dans l'onglet sont déjà "importées" avec une macro, donc je ne peux pas créer de formule dans la/les cases.
Je veux juste faire un "copier-coller" qui copie tel quel, mais colle en sautant les lignes masquées, et ça doit être dans la macro.
 

Discussions similaires