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
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
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
- Si et excel - Guide
- Calculer une moyenne sur excel - Guide
- Comment aller à la ligne sur excel - Guide
10 réponses
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 706
Modifié par gbinforme le 2/06/2011 à 06:56
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" :
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
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 706
3 juin 2011 à 09:06
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 ?
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 ?
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 !!
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 706
6 juin 2011 à 10:00
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.
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.
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 706
6 juin 2011 à 11:41
6 juin 2011 à 11:41
bonjour
Avec qu'elle version fonctionnes-tu ?
Avec qu'elle version fonctionnes-tu ?
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.
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é.
@+
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é.
@+
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 706
7 juin 2011 à 00:29
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.