Probleme avec Selection.Insert Shift:=xlToRight

R

Renaud

Guest
Bonjour,

Lorsque j'utilise cette ligne de commande :

Selection.Insert Shift:=xlToRight

, la mise en forme des colonnes est aussi décalée, or j aimerai décaler la ligne vers la droite, mais en gardant la mise en forme de départ (qu'elle ne soit pas décalée elle aussi)

Pouvez vous m'aider ?

Merci bien.
 

myDearFriend!

XLDnaute Barbatruc
Bonsoir Renaud,

Si la sélection est bien une cellule (et non une plage), si la ligne à déplacer ne contient pas de formule ni de cellule fusionnée, alors tu peux peut-être utiliser la procédure suivante en lieu et place de ton instruction Selection.Insert Shift:=xlToRight :
Sub InsertRight()
Dim Ligne As Variant
      With Selection
            If .Count > 1 Then Exit Sub
            Ligne = Range(Cells(.Row, .Column), Cells(.Row, 255)).Value
            .ClearContents
            Range(Cells(.Row, .Column + 1), Cells(.Row, 256)).Value = Ligne
      End With
End Sub
Cordialement,
 
R

Renaud

Guest
La selection est effectivement une cellule, puisqu' à chaque fois que je copie une ligne, je rajoute une cellule à gauche de la première.

par conséquent en code ça donne ça :

'Copier la ligne

Set BIBdest = ActiveCell.EntireRow
BIBdest = BIBsource.Value

'Décaler la ligne :
'Je cherche la première cellule de la ligne

While ActiveCell.Column <> 1
ActiveCell.Offset(0, -1).Select
Wend
'Puis je décale la ligne

Selection.Insert Shift:=xlToRight

J'ai remplacé cette dernière par ton programme sans le sub ; ) et en ayant déclaré la variable en préambule de mon code, mais je me vois renvoyé l'erreur suivante :

Erreur d execution 13
Type incompatible.

Pour l'instant je me sors de mon problème de la façon suivante :
je décalle la mise en forme sur la feuille ou je copie les lignes, mais ce n'est pas très élgant, je pourrais aussi au lieu de copier la ligne directement, la copier de cellule en cellule mais je trouve ça fastidieux, j'aiamerai avoir une technique plus jolie.

En tout cas, my dear friend, je suis touché par le fait que tu te sois penché sur mon problème à plus d'une heure du matin !!!

Je précise que j'utilise excel 97 j'aurai peut etre du le faire avant
:S
 

myDearFriend!

XLDnaute Barbatruc
Bonsoir Renaud, le Forum.


J'avoue que ton problème me laisse perplexe Renaud... je viens de tester ma procédure sur XL97 sans rencontrer d'erreur quelconque.


De plus, j'ai du mal à comprendre tes lignes de code :
Set BIBdest = ActiveCell.EntireRow
BIBdest = BIBsource.Value
Quel en est le but ?


D'autre part, plutot que :
While ActiveCell.Column <> 1
      ActiveCell.Offset(0, -1).Select
Wend
je te conseillerais plutôt simplement cette ligne en remplacement de l'ensemble :
Cells(ActiveCell.Row,1).Select

Peut-être devrais-tu copier ici l'ensemble de ta procédure pour qu'on puisse y voir un peu plus clair ?
(ou joindre ton classeur épuré des données inutiles ou confidentielles, zippé de 50 Ko maximum et dont le nom ne comportera pas de caractères accentués ou spéciaux)

Cordialement,
 
R

Renaud

Guest
Bonjour Bonjour,

Je pense effectivement ne pas être très clair,
Concernant ces deux lignes de conde, ce sont deux lignes qui me permettent de copier la ligne de données qui étaient dans un autre classeur,
Une fois une ligne copiée, je veux la décaller sur la droite afin de remplir le nouvel emplacement par un chiffre.
Mais je rencontre à ce moment le problème que j'ai expliqué au départ.

Je te remercie pour le :
Cells(ActiveCell.Row,1).Select

Il me parrait compliquer d'envoyer le fichier, puisque je fais appelle à un .xlt

c'est peut etre un peu long mais j'ai essayé d'épurer et d'expliquer

Le principe est le suivant : Le code va chercher dans une 'Grande bibliothèque des articles choisis par l'utilisateur et va les copier dans un nouveau classeur afin d'en faire une bibliotheque plus restreinte.
Nous sommes dans un userform ou l on a demandé le nom du classeur a l utilisateur et si celui ci clique sur ok il se crée le classeur avec les articles. voici le code


Dim nom As String
Private Sub CommandButton1_Click()
If Creerclasseur.TextBox1.Text <> '' Then

Dim Mypath As String
Mypath = CurDir

Unload Me
'Créer un nouveau classeur
Workbooks.Add Template:= _
'C:\\Program Files\\MSOffice\\Modèles\\ModèlepourDQEBPU.xlt'
'
Sheets('Biblio').Select
nom = TextBox1.Text
'Donne le nom au classeur
ActiveWorkbook.SaveAs ('NOUVEAU DQE BPU')
Mypath = CurDir
MsgBox 'A été enregistré dans' & Mypath
'remplit la bilio courante à partir de la grande biblio
Dim ligne As Integer
Dim colonne As Integer
Dim ws As Worksheet
Dim BIBsource As Range
Dim BIBdest As Range

'Selectionner la grande biblio
Workbooks('TestDED30.xls').Activate
'Atteindre la colone de zone de test de chaque chapitre.
For Each ws In Sheets
Sheets(ws.Name).Select
Range('D2').Select
'Test pour savoir si l'article a été selectionné
While ActiveCell.Value <> 'FIN'
If ActiveCell <> '' Then
'Enregistrer l'adresse complete de la cellule
ligne = ActiveCell.row
colonne = ActiveCell.Column
'Enregistrer la ligne
Set BIBsource = ActiveCell.EntireRow
'Atteindre la place libre de la feuille Biblio du classeur & nom
Workbooks('NOUVEAU DQE BPU.xls').Activate
Worksheets('Biblio').Select
Range('A1').Select
While ActiveCell <> ''
ActiveCell.Offset(1, 0).Select
Wend
'Copier la ligne
Set BIBdest = ActiveCell.EntireRow
BIBdest = BIBsource.Value
'décaler la ligne
While ActiveCell.Column <> 1
ActiveCell.Offset(0, -1).Select
Wend
Selection.Insert Shift:=xlToRight #############
While ActiveCell.Column <> 1
ActiveCell.Offset(0, -1).Select
Wend
ActiveCell.Value = '*'
'Retourner à la cellule suivante du chapitre en cours du classeur principal
Workbooks('TestDED30.xls').Activate
Worksheets(ws.Name).Select
Cells(ligne + 1, colonne).Select
Else
ActiveCell.Offset(1, 0).Select
End If
Wend

Next ws
Workbooks('NOUVEAU DQE BPU.xls').Activate
ActiveWorkbook.SaveAs (nom)
Kill 'NOUVEAU DQE BPU.xls'

Else
MsgBox 'Veuillez renseigner toutes les cases'
End If
End Sub

Private Sub UserForm_Click()

End Sub


Merci d'avoir lu jusque là
J'ai remplacé la ligne avec les dièses par le code de My dear friend et ça n a pas marché.
 

myDearFriend!

XLDnaute Barbatruc
Bonsoir Renaud,

Heu.... à vrai dire je n'ai pas tout compris dans tout ça... ne le prends pas mal Renaud, mais si je peux me permettre, ton code n'est pas spécialement un modèle de clarté. Une remarque notamment : on ne déclare jamais des variables au milieu d'une procédure. Les Dim, ça se place au tout début de la procédure.

Cela dit, la seule chose que je crois remarquer pour ton problème, c'est que précédemment tu as dit :
J'ai remplacé cette dernière par ton programme sans le sub ; ) et en ayant déclaré la variable en préambule de mon code, mais je me vois renvoyé l'erreur suivante :

Erreur d execution 13
Type incompatible.
La seule variable que j'ai utilisée dans mon code est la variable 'Ligne'. Or, quand je regarde ta procédure 'CommandButton1_Click()' ci-dessus, je m'aperçois que tu utilises déjà une variable 'ligne' mais cette dernière est déclarée en tant qu'Integer et non Variant comme moi je l'utilise... ton problème de 'Type incompatible' ne viendrait-il pas de ça ?

Désolé de ne pouvoir t'aider d'avantage, je te souhaite bon courage pour la suite...

Cordialement,
 
R

Renaud

Guest
Bonjour

Pour la variable ligne c est fort probable que l'erreur vienne de là !!!!

Pour le problème de clarté sois franc :

Est ce le code qui n'est pas bon?
Les explications qui ne sont pas suffisantes?
Le but n'est pas clairement expliqué?
Si c'est le code qui n'est pas clair peux tu me drie quells sont mes erreurs parce que je vais devoir faire un rapport sur ce que je fais et il faudra que ce soit clair !!!!

Merci beaucoup
 

Discussions similaires

Statistiques des forums

Discussions
312 344
Messages
2 087 444
Membres
103 546
dernier inscrit
mohamed tano