[vba] la methode pasteSpecial de la classe Range a echoue

djedje13

Nouveau membre
bonjour,
depuis quelque jours j'essai de faire quelque petit programme pour apprendre

la je butte sur une erreur d'execution '1004'

voici mon programme pouriez vous m'aider merci

[vba]

Sub transpose_dans_tableau()

'modifier par gerald le 17/04/07

'attendre le formulaire et mémoriser les données
Sheets("formulaire").Select
Range("b1:b4").Select
Selection.Copy
'oter protection feuille + deverouillage cellule
Sheets("Base de donnée").Select
ActiveSheet.Unprotect Password:="mon_code"
Columns("A:D").Select
Selection.Locked = False
'Test pour déterminer la ligne ou coller les infos dans tableau
valeurA2 = Range("A2").Value
If valeurA2 = "" Then
Range("A2").Select
Else
Range("A1").Select
Selection.End(xlDown).Select
ligne_active_base = ActiveCell.Row
Range("A" & ligne_active_base + 1).Select
End If
'Memorise le N° de la ligne ou coller les données
ligne_active_base = ActiveCell.Row
'collage avec transposition
Range("A" & ligne_active_base).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
'verroillage + protection base de donner
Sheets("Base de donnée").Select
Columns("A:D").Select
Selection.Locked = True
ActiveSheet.Protect Password:="mon_code"
'rendre vierge le formulaire
Sheets("formulaire").Select
Range("B2:B4").Select
Selection.ClearContents
Range("B2").Select

End Sub




juste si vous pouvez eviter le langage trop technique merci a tous

 

djedje13

Nouveau membre
je l'ai lu mais quand il a mis ccp je lai changer en vba

je le serai

desolé
 

djedje13

Nouveau membre
j'ai suprimé des code qui au final ne servait pas

maintenant j'ai mon probleme 1 fois sur 2 si quelqu'un a une idée

[cpp]
Sub transpose_dans_tableau()

'modifier par gerald le 17/04/07

'attendre le formulaire et mémoriser les données
Sheets("formulaire").Select
Range("b1:b4").Select
Selection.Copy
'oter protection feuille + deverouillage cellule
Sheets("Base de donnée").Select
ActiveSheet.Unprotect Password:="secu"
Columns("A:D").Select
'Test pour déterminer la ligne ou coller les infos dans tableau
Sheets("Base de donnée").Select
valeurA2 = Range("A2").Value
If valeurA2 = "" Then
Range("A2").Select
Else
Range("A1").Select
Selection.End(xlDown).Select
ligne_active_base = ActiveCell.Row
Range("A" & ligne_active_base + 1).Select
End If
'Memorise le N° de la ligne ou coller les données
ligne_active_base = ActiveCell.Row
'collage avec transposition
Range("A" & ligne_active_base).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
'verroillage + protection base de donner
Sheets("Base de donnée").Select
Columns("A:D").Select
ActiveSheet.Protect Password:="secu"
'rendre vierge le formulaire
Sheets("formulaire").Select
Range("B2:B4").Select
Selection.ClearContents
Range("B2").Select

End Sub
[/cpp]

merci d'avance
 

zeb

Modérateur
Gros intérêt de mettre en forme, il y a des numéros de lignes.
Alors, à quelle ligne ça plante ? + Message d'erreur complet stp.
 

Freeman23

Expert
Salut,

Alors déjà il y a qq règle de mise en forme à connaitre afin de faciliter la lecture de ton programme. Genre mettre des tabulations dans tes boucles ou condition (if then end if)
Et il y a quelques lignes inutiles ou que tu peux condenser. Par exemple les sheets("").select il n'y a pas besoin de les mettre plusieur fois mais seulement qd tu veux changer d'onglet.

Code:
' attendre le formulaire et mémoriser les données
Sheets("formulaire" ).Select
Range("b1:b4" ).Select
Selection.Copy
' oter protection feuille + deverouillage cellule
    Sheets("Base de donnée" ).Activate
With Sheets("Base de donnée")
    .Unprotect Password:="secu"
    .Columns("A:D" ).Select
    ' Test pour déterminer la ligne ou coller les infos dans tableau
    If .Range("A2" ) = "" Then
          .Range("A2" ).Select
    Else
          .Range("A1" ).Select
          ligne_active_base = Selection.End(xlDown).row
          .Range("A" & ligne_active_base + 1).Select
    End If
    ' Memorise le N° de la ligne ou coller les données
    ligne_active_base = ActiveCell.Row
    'collage avec transposition
    .Range("A" & ligne_active_base).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=True
    'verrouillage + protection base de donner
    .Columns("A:D" ).Select
    .Protect Password:="secu"
End with    
'rendre vierge le formulaire
Sheets("formulaire" ).Activate
Range("B2:B4" ).Select
Selection.ClearContents
Range("B2" ).Select

A mon avis ton erreur provient de ces Select, pour un changement d'onglet préfère la méthode Activate plutot que le select tu auras moins de problème avec les range.
 

djedje13

Nouveau membre
merci bien pour tous vos conseille

on ma donner une reponse sur un autre forum qui a resolus mon probleme

pour ceux qui aurait le meme pb que moi
l'erreur etait que je copiai la cellule B1:B4 avant d'oter la protection de la feuil base_de_donnée (ce qui me fesait perdre la selection a copier)

merci pour votre attention


gerald
 

alain121

Nouveau membre


salut c alain
j'ai le meme probleme et je n'arrive pas a debloquer cette erreur peux tu me doner la solution et me copier ta macro
merci par avance
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 064
Membres
1 586 394
Dernier membre
Manoushk
Partager cette page
Haut