Problème de macro sur Excel

Résolu/Fermé
Clemntinou54 - 1 juin 2011 à 15:49
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 7 juin 2011 à 00:29
Bonjour,

J'ai un fichier Excel qui récapitule des projets avec des dates etc... J'ai crée une macro pour que quand la cellule dans la colonne "X" est égale à x, la ligne disparait de la feuille actuelle pour apparaitre sur une autre feuille.
Le soucis, c'est que j'ai des cellules fusionnés... Donc quand j'inscris un x, il m'enlève qu'une seule ligne alors que ce sont deux lignes superposées qui doivent être transférer pour que ce soit compréhensible.
Je voudrais juste que l'on le me fasse une correction de ma macro pour que ça fonctionne nikel.

Merci d'avance

'Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lig As String
Dim nblig As String
Dim DerLigne As String
Dim i As Byte

Application.Volatile
Application.ScreenUpdating = False
On Error Resume Next
If Left(Target.Address, 2) = "$X" Then
If Target.Value = "X" Or Target.Value = "x" Then
lig = Target.Row
nblig = Sheets("Feuil1").Range("b65535").End(xlUp).Row + 1
For i = 1 To 20
Sheets("Feuil1").Cells(nblig, i).Value = Cells(lig, i).Value
Next i
Rows(lig).Delete Shift:=xlUp

End If
End If

'Sheets("Planning_suivi").Cells(1, 1).Activate
Application.ScreenUpdating = True
Sheets("Feuil1").Range("a65535").End(xlUp) = Now
End Sub

A voir également:

10 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 688
Modifié par gbinforme le 2/06/2011 à 06:56
bonjour

Le fait de gérer des cellules fusionnées sous excel n'est pas une bonne idée car cela complique la tache sérieusement comme tu t'en es rendu compte. Je te propose cette façon de faire qui devrait fonctionner "nickel" :

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim DerLigne As String 
Dim i As Byte 
If Target.Count = 1 Then 
    If Left(Target.Address, 2) = "$X" _ 
    And LCase(Target.Value) = "x" Then 
        With Sheets("Feuil1") 
            i = Target.Offset(1, 0).Row - Target.Row 
            DerLigne = .Cells(.Columns(1).Cells.Count, "B").End(xlUp).Row + 1 
            Cells(Target.Row, 1).Resize(i, 20).Copy Destination:=.Cells(DerLigne, 1)
            Rows(Target.Row).Resize(i).Delete Shift:=xlUp 
            .Range("A" & .Columns(1).Cells.Count).End(xlUp) = Now 
        End With 
    End If 
End If 

'Sheets("Planning_suivi").Cells(1, 1).Activate 
End Sub 

Plutôt qu'utiliser 65535 largement périmé depuis 2007, je t'ai mis une fonction qui est valable quelle que soit ta version excel (Columns(1).Cells.Count).
Tu n'es pas obligé d'enlever le rafraichissement de l'écran car il n'y a qu'une seule mise à jour qui sera faite en fin de toute façon.
Toujours zen
1
ça fonctionne nikel, comme tu l'as dit ! Merci beaucoup de ton aide !

Edit : Je suis allé un peu vite en besogne, j'ai un petit soucis de débogage: cette ligne là se surligne en jaune donc il doit y avoir une erreur mais je vois pas où...

Cells(Target.Row, 1).Resize(i, 20).Copy Destination:=.Cells(DerLigne, 1)

J'avais essayé de coller un "On Error Resume Next", le mess de débogage disparait et les les lignes aussi d'ailleurs mais ne réapparaissent pas. Si qqun a une idée... merci d'avance
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 688
3 juin 2011 à 09:06
bonjour,

Tu devrais regarder puisque tu vas en débogage, la valeur de i et le code erreur qui est fourni.

Dans quelle configuration cela apparait-il ?
Combien de cellules fusionnées en colonne X ?
0
Clementinou54
3 juin 2011 à 09:24
Code d'erreur :

"Erreur d'éxécution '1004':
Impossible de modifier une cellule fusionnée"

La veleur de i = 2

Dans la colonne X, je fusionne deux cellules ensemble pour qu'il prenne les deux lignes en question. Par contre, ce qui est bizarre, c'est que quand j'inscris un x dans la case la première fois, ça marche mais après j'ai cette histoire de débogage...
0
Clementinou54
3 juin 2011 à 11:05
J'ai trouvé le problème. Il ne me colle une seule ligne dans la feuille, il ne les superpose pas. Si je supprimes la ligne trasférée, lorsque je refais l'opération ça marche mais il faut que je supprime la ligne à chaque fois. Petit problème car j'aimerai bien avoir toutes mes lignes qui se superposent...

Quelqu'un a une idée ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Clementinou54
6 juin 2011 à 07:59
Je "Up" un petit coup, je n'ai pas eu de réponse depuis. Quelqu'un a-t-i l une idée ?
Je suis en galère au secours !!
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 688
6 juin 2011 à 10:00
bonjour

Si tu n'as pas eu de réponse, c'est d'abord parce que j'ai profité de ces jours pour faire autre chose que de l'assistance internet.

D'autre part ce que tu expliques n'est pas trop cohérent car tu dis devoir supprimer la ligne transférée alors que la macro le fait elle-même, si du moins tu l'a mise en place intégralement.

Si tu pouvais nous mettre un exemple de classeur, sans données identifiables et privées, mais avec la structure de tes données et la macro sur http://www.cijoint.fr/ puis nous mettre le lien généré ici ce serait plus facile.
0
Clementinou54
6 juin 2011 à 10:12
Salut,

Désolé je me doute bien que tu ne fais pas ça le WE.

Je suis au travail et le site cijoint.fr est bloqué donc j'attendrai d'être chez moi ce soir pour le faire. Par contre, je peux réexpliquais car moi aussi j'ai du mal à comprendre ce que j'ai écrit :-)

Donc : Quand je mets un X dans ma case, la ligne se transfères automatiquement dans l'autre feuille (projets term), y'a pas de soucis. Et oui elle se supprime automatiquement de la feuille d'origine(planning_suivi).
Le problème, si je veux transférer une autre ligne, j'ai ce problème de débogage. Si je n'ai rien sur la feuille "Projets term", ça marche et si j'ai déjà une ligne, ça ne marche pas.

Est-ce que c'est plus compréhensible ?

Si j'ai pas résolu mon problème d'ici ce soir, je joindrai le fichier.
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 688
6 juin 2011 à 11:41
bonjour

Avec qu'elle version fonctionnes-tu ?
0
Clementinou54
6 juin 2011 à 11:59
Oui, c'est vrai que j'ai oublié de préciser : je suis sur Windows XP et je travaille avec Excel 2000. Oui je sais c'est vieux mais j'ai pas le choix.
0
Clementinou54
6 juin 2011 à 15:35
Problème résolu : Il fallait juste remplacer la valeur dans une des lignes

DerLigne = .Cells(.Columns(1).Cells.Count, "B").End(xlUp).Row + 1 ( il faut remplacer le 1 en fin de ligne par 2) pour que les lignes se transferent et se collent sans problème.)

Voilà, merci de m'avoir aidé.

@+
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 688
7 juin 2011 à 00:29
Il y a certainement des particularités dans ta structure de données que tu as oublié de mentionner et tu n'avais pas mis le test sur la bonne colonne car sinon tu aurais des lignes vides.
0