Bug avec code VBA lors d'une copie
#1
Débutant XLPages

Inscription: 26/05/2008
De Nantes

Messages: 18

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 29-05-2008 21h57
Rebonsoir, voilà lorsque je change de feuille j'ai une macro qui recopie certaines valeures sur cette feuille.
Or une erreure se produit à ce moment là : ' Erreur d'exécutione '13' incompatibilité de type
?>

Option Explicit
Dim MaValeur 
As Variant
Private Cell As Variant
Private Cel As Variant
Private As Variant
Private As Variant

Private flag As Boolean





Private Sub commandbutton1_Click()
Sheets("VERT").Visible True
Macro24 
'macro de copie de certaines valeures dans la feuilles "VERT"

End Sub





'
copie N° remplacé Ã  coté
Private Sub Worksheet_Change(ByVal Target As Range)



If 
flag Then Exit Sub
flag 
True
If flag And Not Intersect(TargetRange("C6:C26,H6:H30,M6:M37,R6:R39")) Is Nothing Then
    Target
.Offset(01) = MaValeur
  End 
If


flag False


End Sub


'copie N° remplacé Ã  coté
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If flag Then Exit Sub
flag = True

 If Target.Column = 3 Or Target.Column = 8 Or Target.Column = 13 Or Target.Column = 18 Then
If Target.Value <> "" And Target.Font.Color <> 8421504 Then
         For Each Cell In Sheets("PARC").Range("C7:C300")
           If Target.Value = Cell.Value Then
           
           x = Target.Borders.LineStyle
           y = Target.Borders.Value
           
           Cell.Copy
    Target.PasteSpecial Paste:=xlPasteAllExceptBorders
           
           Target.Borders.LineStyle = x
           Target.Borders.Value = y
           End If
         Next Cell
     End If
End If
flag = False

If Not Intersect(Target, Range("C6:C26,H6:H30,M6:M37,R6:R39")) Is Nothing Then
    MaValeur = Target.Value
  End If
 
End Sub


J'espère que j'ai bien procédé à la rédaction de ce sujet.
Aussi que faut-il faire quand un sujet est résolu ?

Merci à vous
Hors Ligne
Rapport   Haut 

Re: Bug avec code VBA lors d'une copie
#2
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 29-05-2008 22h37
Re ascal44,

Pour solder un fil résolu, il convient de faire comme indiqué ICI (j'avais mis le lien dans ton fil précédent)

Pourrais-tu joindre ton fichier zippé (80 ko maximum), exempt de données confidentielles et épuré à l'essentiel du présent problème STP ?
Ca serait sans aucun doute plus simple pour nous de te répondre ainsi.

Par ailleurs, dans le précédent fil je t'invitais aussi à compléter ton profil... un petit effort s'il te plait et on va finir par y arriver...

Cordialement,

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Bug avec code VBA lors d'une copie
#3
Débutant XLPages

Inscription: 26/05/2008
De Nantes

Messages: 18

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 30-05-2008 14h47
Bonjour , doucement et sûrement je vais y arriver !!!

Je joint un extrait épuré de mon fichier en espérant qu'il est assez compréhensif.
Pièce jointe:
zip Problème VBA en copie.zip   [ Taille: 56.77 Ko - Téléchargements: 585 ]
Hors Ligne
Rapport   Haut 

Re: Bug avec code VBA lors d'une copie
#4
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 30-05-2008 20h12
Bonjour ascal44,

Je viens d'analyser rapidement ton fichier. L'ensemble donne un traitement relativement complexe et je t'avoue que je n'ai ni le temps, ni l'envie de me plonger à fond dans ce projet. Cela dit, j'y vois déjà plusieurs erreurs de débutant qu'il conviendrait de rectifier si tu souhaites aller plus avant dans ton projet...

On va essayer d'y aller en douceur....

En premier lieu, tu rencontres l'erreur d'exécution 13 "type incompatible" sur la ligne de code suivante :
If Target.Value <> "" And Target.Font.Color <> 8421504 Then
Pourquoi ?
Tout simplement parce qu'à ce moment du déroulement de ton programme, Target n'est pas une cellule isolée mais une plage de cellules ("C6:C26") et qu'un test du type If Target.Value <> "" Then... ne veut rien dire dans ce cas ! Tu ne peux pas comparer la valeur de plusieurs cellules en même temps (dans cette plage, certaines cellules peuvent être vides, d'autres non).

Ensuite, on ne le répètera jamais assez dans les forums, en VBA tu n'as pas besoin de faire de Select de feuilles, plages ou cellules pour pouvoir agir dessus.
Plutôt que :
Sheets("ROSE").Select
    Range
("C6:C26").Select
    Selection
.Copy
    Sheets
("VERT").Select
    Range
("C6").Select
    Selection
.PasteSpecial Paste:=xlPasteValuesOperation:=xlNoneSkipBlanks _
        
:=FalseTranspose:=False
Il conviendrait d'écrire simplement :
Sheets("ROSE").Range("C6:C26").Copy
    Sheets
("VERT").Range("C6").PasteSpecial Paste:=xlPasteValuesOperation:=xlNoneSkipBlanks _
        
:=FalseTranspose:=False
Quels avantages à faire comme ça ?
Eh bien, en t'affranchissant des Select :
[list]
[*]tu gagnes en rapidité d'exécution puisque VBA n'a plus besoin de gérer l'affichage de la sélection (ce qui évite aussi le clignotement désagréable de l'écran quand ton programme s'exécute).
[*]tu évites que des procédures évènementielles comme Worksheet_SelectionChange() se déclenchent inopinément et sèment le bazar dans ton programme (c'est d'ailleurs ce qui t'arrive là !)
[*]tu optimises ton code et le rends plus léger et plus fluide.
[/list]
Dans le cas présent, tu fais des copier-coller des valeurs de cellule seulement... L'enregistreur de macro te propose effectivement le fameux PasteSpecial Paste:=xlPasteValues comme indiqué plus haut :
Sheets("ROSE").Range("C6:C26").Copy
    Sheets
("VERT").Range("C6").PasteSpecial Paste:=xlPasteValuesOperation:=xlNoneSkipBlanks _
        
:=FalseTranspose:=False
En fait, tu auras gros avantage à te passer du Copy-Paste dans ce cas et à affecter directement les valeurs dans la plage réceptrice, comme ça :
Sheets("VERT").Range("H6:30").Value Sheets("ROSE").Range("H6:30").Value
Une seule ligne de code suffit cette fois !

Il y a encore d'autres choses à te dire sur le code de ton classeur (et notamment concernant les protect-unprotect), mais je pense que tu vas déjà avoir pas mal à faire pour comprendre, tester, assimiler et mettre en oeuvre dans ton projet (j'espère) ce que je t'indique ci-dessus...

Image redimensionnée

Cordialement,

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Bug avec code VBA lors d'une copie
#5
Débutant XLPages

Inscription: 26/05/2008
De Nantes

Messages: 18

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 06-06-2008 17h30
Merci pour tes explications, j'ai bien travaillé dessus. Celà m'a fait progresser en espérant qu'avec le temps je n'oublie pas......
Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes