La méthode copy de la classe range a échoué

RONIBO

XLDnaute Impliqué
Bonjour,

J'aimerais éviter cette erreur (La méthode copy de la classe range a échoué) lorsque j'essaye d'insérer ou de supprimer une ligne à partir des cellules déverrouillées.

J'utilise un bouton de commande qui me permet d'insérer des lignes seulement dans mon tableau ou il y a "Qté" "Uté" "Désignation" etc...

Pour éviter les erreurs lorsque j'insère une ligne en dehors de mon tableau cité ci-dessus, j'aimerais qu'un message (msgbox) comme "Vous ne pouvez pas insérer des lignes ici" apparaisse à l'écran.

Voici le code et un fichier exemple :

Code:
Private Sub TAjouter_Click()
ActiveSheet.Unprotect
ligne = Selection.Row
Application.ScreenUpdating = False
For n = 1 To CInt(NombreLigne.Value)
Selection.Offset(1, 0).EntireRow.Insert Shift:=xlShiftDown
Range("A" & ligne & ":I" & ligne).Copy
Rows(ligne + 1).RowHeight = 15
Range("A" & ligne + 1).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("G" & ligne).Copy Destination:=Range("G" & ligne + 1)
Range("I" & ligne).Copy Destination:=Range("I" & ligne + 1)
ligne = ligne + 1
Next
Range("TotalH.T.").FormulaR1C1 = "=SUM(R21C:R[-1]C)"
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, _
AllowFormattingCells:=True, AllowFormattingRows:=True
Unload Me
End Sub
Private Sub TSupprimer_Click()
ActiveSheet.Unprotect
Selection.EntireRow.Delete
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, _
AllowFormattingCells:=True, AllowFormattingRows:=True
Me.Hide
End Sub

Merci d'avance aux personnes qui vont se pencher sur mon problème

a+
 

Pièces jointes

  • Facture N° - TEST ().xlsm
    195.9 KB · Affichages: 112
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : La méthode copy de la classe range a échoué

Re

J'ai testé mon code sur la feuille nommée Akisti Bat
Il n'est pas conseillé de fusionner les cellules (c'est source de problème en VBA)
(Utilises plutôt Centrer sur plusieurs colonnes)

Ce que j'en pense on s'en fiche ;)

C'est ton appli, c'est toi qui choises le code VBA que tu mets dedans ;)

Mais personnellement, je vois pas l'utilité d'utiliser une boucle et je préfère ma syntaxe ;)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : La méthode copy de la classe range a échoué

Re

RONIBO
Au fait, tu penseras à anonymiser ta PJ de ton premier message.
Je viens de mettre la feuille Clients visible et on y trouve des numéros de tel qui n'ont rien à faire sur un forum publique!
 

RONIBO

XLDnaute Impliqué
Re : La méthode copy de la classe range a échoué

Re,

ça marche, moi je m'en fiche pas, je prends tous tes conseilles ;)

Et tu as une solution pour les cellules de bas (ou il y a : total ht, tva, ttc, analyse de tva, mode de paiement) on peut empecher l'insertion de ligne (ou suppression)?
 

RONIBO

XLDnaute Impliqué
Re : La méthode copy de la classe range a échoué

Une petite idée

Dans gestion de nom, créer un nouveau nom avec tout les champs que l'on souhaite bloquer l'insertion de ligne (ou suppression)

Puis à partir de la l'intégrer dans le code.

Bonne idée?
 

Staple1600

XLDnaute Barbatruc
Re : La méthode copy de la classe range a échoué

Re

RONIBO
J'attendrais que tu remettes une PJ anonymisée (pour la lisibilité du fil) pour te répondre. ;)
(Tu l'as supprimée au lieu de simplement prendre le temps d'effacer les quelques données confidentielles qu'elle contenait, pffff !!!)
Et si d'autres membres du forum tombent sur ce fil, sur quel fichier feront-ils leur test?
 

Staple1600

XLDnaute Barbatruc
Re : La méthode copy de la classe range a échoué

Re

RONIBO
Merci pour le tit effort ;)
Donc maintenant ma réponse à ta précédente question est déjà dans le code que je t'ai soumis, non ?
Voir le NB dans ce message
Ne serait-ce pas une cellule nommée que j'utilise dans le code VBA, par hasard?
 

RONIBO

XLDnaute Impliqué
Re : La méthode copy de la classe range a échoué

Bonjour le forum,
Bonjour Staple1600 :)

Staple1600 :
Désolé hier je me suis endormi ^^

Je viens de réessayer ton code, c'est pas tout à fait s'que je veux,

Je souhaite utiliser le bouton de commande "Ajouter ou supprimer lignes" seulement dans mon tableau ou il y a "Qté", "Uté", "Désignation", "P.U.", "Total HT", "%" et Avancement.

(Avec ton code j'y arrive à insérer des lignes en bas de ma facture.)

C'est pour cela que j'ai crée un nouveau nom dans "Gestionnaire des noms" (BlocageInsertionSuppressionLigne) avec "Fait référence à :
='Akisti Bat'!$A$1:$I$20 <=== (haut de facture) ;'Akisti Bat'!$A$41:$I$50)<==== (bas de facture)

a+
 

Staple1600

XLDnaute Barbatruc
Re : La méthode copy de la classe range a échoué

Bonjour à tous

RONIBO:
J'ai bien compris
Donc tu peux chercher dans les archives du forum :
1) comment faire pour nommer une plage dynamiquement.
2) comment utiliser les plages nommées en VBA (les créer, y accéder, les redimensionner)

Je finis de préparer mon tartare tout en cuisant mon épeautre.
J'ingurgite le tout, en finissant par un petit fruit de saison et je repasse voir comment tu as progressé. ;)

Bon appétit à ceux qui passent/ront à table.
 

Staple1600

XLDnaute Barbatruc
Re : La méthode copy de la classe range a échoué

Re

RONIBO
Tu as toutes les infos en main.
Il suffit de lire attentivement les pas à pas qui pullulent sur le net à ce sujet puis de les expérimenter scrupuleusement sur une copie de ton classeur.

Evidemment, cela est quelque peu chronophage.

Mais chouette, on est dimanche, alors on a plein de temps libre à tuer ;).

Pas moi, pour le moment, faut d'abord que j'étende ma lessive puis que je passe la toile. ;)
 

Discussions similaires

Statistiques des forums

Discussions
312 165
Messages
2 085 882
Membres
103 010
dernier inscrit
Sys974