Problème de macro sur Excel
Résolu
Clemntinou54
-
gbinforme Messages postés 14946 Date d'inscription Statut Contributeur Dernière intervention -
gbinforme Messages postés 14946 Date d'inscription Statut Contributeur Dernière intervention -
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
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:
- Problème de macro sur Excel
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Comment trier par ordre alphabétique sur excel - Guide
- Comment calculer la moyenne sur excel - Guide
10 réponses
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" :
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
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
ç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
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
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...
"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...
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 ?
Quelqu'un a une idée ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 !!
Je suis en galère au secours !!
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.
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.
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.
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.
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.