XL 2019 Insérer le contenu copié au dessus de la ligne sélectionnée

Anthonymctm

XLDnaute Occasionnel
Bonjour à tous,

J'ai cherché sur internet et bizarrement j'ai pas trouvé ma réponse.. :confused:

Voilà, je travaille sur un onglet protégé, certaines cellules sont volontairement verrouillé pour éviter les erreurs de manipulation.
J'ai déjà fait une partie du code mais je sèche sur la partie insertion

Je souhaite que :
1-l'utilisateur sélectionne la ou les lignes qu'il souhaite copié/coller
2-Il fait un copier ou ctrl+C
3-Il sélectionne la ligne où il souhaite insérer ce qu'il a copié
4-Il clique sur un bouton qui :
1-Fait sauter la protection (ça semble obligatoire pour coller quelque chose)
2-Vérifie que la sélection soit bien une ligne et pas un cellule pour éviter de coller n'importe où
3-Insère le contenu copié au dessus de la ligne sélectionnée
4-Réactive la protection de la feuille


Le code déjà fait :
VB:
Sub coller_install()
ActiveSheet.Unprotect ""

If Selection.Rows.Count = 1 And Selection.Columns.Count = 16384 Then 'Vérifie que la selection soit une ligne'

Selection.Insert Shift:=xlDown   'partie qui ne fonctionne pas'
Application.CutCopyMode = False   

    Else
    MsgBox "Selectionner la ligne en dessous de laquelle vous souhaitez coller"
End If

With ActiveSheet
                .EnableAutoFilter = True
                .EnableOutlining = True
                .Protect Contents:=True, UserInterfaceOnly:=True, AllowFormattingCells:=True, AllowInsertingRows:=True, AllowDeletingRows:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True
             End With 'réactive la protection'

End Sub

Je ne sais pas si ça se fait d'office, mais il faudrait que les lignes collées reprenne les zones autorisées ou non des lignes copiées

Merci :D
 

Lolote83

XLDnaute Barbatruc
Salut,
Cela fonctionn chez moi.
Juste la partie copie était oubliée
VB:
Sub coller_install()
    ActiveSheet.Unprotect ""
    If Selection.Rows.Count = 1 And Selection.Columns.Count = 16384 Then        'Vérifie que la selection soit une ligne'
        Selection.Copy                                                          'Copie de la selection (donc ligne)
        Selection.Insert Shift:=xlDown                                          'Insere une nouvelle ligne
        Application.CutCopyMode = False
    Else
        MsgBox "Selectionner la ligne en dessous de laquelle vous souhaitez coller"
    End If
    With ActiveSheet
        .EnableAutoFilter = True
        .EnableOutlining = True
        .Protect Contents:=True, UserInterfaceOnly:=True, AllowFormattingCells:=True, AllowInsertingRows:=True, AllowDeletingRows:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True
    End With
End Sub
@+ Lolote83
 

Anthonymctm

XLDnaute Occasionnel
Salut,
Cela fonctionn chez moi.
Juste la partie copie était oubliée
VB:
Sub coller_install()
    ActiveSheet.Unprotect ""
    If Selection.Rows.Count = 1 And Selection.Columns.Count = 16384 Then        'Vérifie que la selection soit une ligne'
        Selection.Copy                                                          'Copie de la selection (donc ligne)
        Selection.Insert Shift:=xlDown                                          'Insere une nouvelle ligne
        Application.CutCopyMode = False
    Else
        MsgBox "Selectionner la ligne en dessous de laquelle vous souhaitez coller"
    End If
    With ActiveSheet
        .EnableAutoFilter = True
        .EnableOutlining = True
        .Protect Contents:=True, UserInterfaceOnly:=True, AllowFormattingCells:=True, AllowInsertingRows:=True, AllowDeletingRows:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True
    End With
End Sub
@+ Lolote83
Salut Lolote,

En fait la copie est déjà faite avant de lancer la macro, puisque je dois pouvoir coller ailleurs qu'au dessus de la ligne copiée.

Par exemple je sélectionne ligne 6, je la copie et je veux l'insérer entre la 15 et la 16 donc je sélectionne la 16 et la je lance la macro.

Je sais pas si je suis très clair ^^'
 
Dernière édition:

GALOUGALOU

XLDnaute Accro
bonsoir anthonymctm bonsoir le forum bonsoir le fil

copier coller peut poser problème quand on se "promène dans le classeur" et qu'on multiplie les procédures. excel oublie le copier

pour cela j'ai créé un onglet intermédiaire nommé INSTANCE. sa vocation accueillir le temps de la macro les données copiées de n'importe où. (autre feuille autre classeur, tout ce qui se trouve dans le presse papier). la prodédure récupere les données dans cette feuille juste avant le coller
mais attention uniquement une ligne.
ensuite la procédure demande des confirmations, ce qui permets d’arrêter le coller si une erreur à été commise.

la problèmatique une feuille insérée au dessus est respectée.

en fin de procédure la feuille instance est effacée et donc, aucune donnée ne sont visibles, mais surtout ne pas supprimer cette feuille.
j'ai supprimé les conditions if pour passer par des boites de dialogues.
cordialement
deux feuilles sont utiles au fonctionnement du classeur, BASE et INSTANCE
galougalou
 

Pièces jointes

  • test v1.xlsm
    26.6 KB · Affichages: 7

Anthonymctm

XLDnaute Occasionnel
bonsoir anthonymctm bonsoir le forum bonsoir le fil

copier coller peut poser problème quand on se "promène dans le classeur" et qu'on multiplie les procédures. excel oublie le copier

pour cela j'ai créé un onglet intermédiaire nommé INSTANCE. sa vocation accueillir le temps de la macro les données copiées de n'importe où. (autre feuille autre classeur, tout ce qui se trouve dans le presse papier). la prodédure récupere les données dans cette feuille juste avant le coller
mais attention uniquement une ligne.
ensuite la procédure demande des confirmations, ce qui permets d’arrêter le coller si une erreur à été commise.

la problèmatique une feuille insérée au dessus est respectée.

en fin de procédure la feuille instance est effacée et donc, aucune donnée ne sont visibles, mais surtout ne pas supprimer cette feuille.
j'ai supprimé les conditions if pour passer par des boites de dialogues.
cordialement
deux feuilles sont utiles au fonctionnement du classeur, BASE et INSTANCE
galougalou
Bonjour Galougalou,

Merci pour ton aide.

Ca me parait bien complexe mais c'est peut-être la seule solution..
Je précise que la ou les lignes copiées sont toujours sur le même onglet que la ou ce sera coller.
Donc pas de notion de se "promener" ^^
J'ai besoin de copier/coller, les formules et la mise en forme.
Comme un "copier/insérer cellules copiées" standard en fait.
Ni plus ni moins ^^
 

GALOUGALOU

XLDnaute Accro
bonjour anthonymctm bonjour le fil
l'apparence est complexe, ça a l'air complexe mais ce n'est pas complexe.

se promener est une image ou j'ai voulu dire multiplier les procédures dans le code VBA
A l'éxécution du code, je n'ai pas su garder les informations copier. (je suis autodidacte en informatique, je suis loin de tout maitriser)
c'est pour cela que je propose dans le code de stocker les informations dans un onglet d'attente qui se nomme instance ........ mais qui sécurise le transfert et n'autorise qu'une seule ligne
les différentes alertes luttent contre la maladresse des opérateurs
cordialement
galougalou
 

GALOUGALOU

XLDnaute Accro
Enrichi (BBcode):
   remplacer au début et à la fin de la macro
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        par
            ActiveSheet.Paste

si le choix est de coller avec mfc & formules, il faut modifier le traitement de la feuille instance.
la modification est effectuée dans la version 4

il me semble bon de vous préciser que le collage des formules va déplacer les références si elles ne sont pas figées.
si la référence est dans la ligne, ça devrait coller, mais si la référence est une cellule fixe n'oubliez pas de l'entourer avec le signe $
ex : figer ligne et colonne $D$3
figer colonne $D3
figer ligne D$3
mais peut-être que vous connaissez et mes remarques sont alors inappropriées.
cordialement
galougalou
 

Pièces jointes

  • test v4.xlsm
    29.9 KB · Affichages: 3

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 925
Membres
101 841
dernier inscrit
ferid87