Déplacer une colonne d'un onglet dans un autre
Bonjour,
Petit sujet bien tordu :
j’essaie de créer un tableau excel pour mes relances client :
Mon idée : j'ai des onglets En Cours 0-1000 / En cours 1001 - 2000 ......
et des onglets : Résolus 0-1000 / Résolus 1001-2000
Dans un premier temps pour chaque client qui n'a pas payé (ho pas bien....) je crée ces coordonnées dans une colonne dans un onglet En cours ... en fonction de son numéro de client interne, avec historique des relances. Une fois que le client à payé, j'indique en ligne 17, 26 ou ligne 35 le montant réglé.
Mon idée est quand cette ligne est égale à ce que le client doit, ce qu'elle disparaisse de l'onglet En cours ... et que cette colonne se crée dans l'onglet Résolus.....
Je ne sais pas comment faire pour vérifier si le montant est égal à ce que doit le client et de la couper / collé dans un autre onglet
Merci de votre aide
Franck.
Bonjour
Dans la colonne E de l’onglet « En cours 1001-2000 » on trouve un Montant exprimé en texte : « 371,31 + 896,91 »
On ne peut donc pas se servir de cette valeur pour faire des tests sur les montants ou les additionner.
Si on y avait des valeurs numériques, quitte à ajouter une ligne, au besoin, ton problème serait relativement facile à résoudre.
Est-ce possible ?
A te lire.
Bonjour et merci a vous de ce pencher a mon problème
effectivement sur cette ligne il y a 2 chiffres en texte mais c'est une erreur
dans cette ligne ( ligne 8) tous les montants sont en numéraires et pas d’addition a faire
Au plaisir de te lire
Franck
Bonjour,
Ca fait un moment que je cherche, alors je me permets de vous présenter ma solution.
Cordialement.
Merci Yvouille pour ta solution
ce tableau n'est qu'un exemple de la réalité, si je regarde ton code il faut que je rajoute autant de "boucle" que d'onglet c'est a dire pour les En cours et Résolut j'en ais 5 donc pour le code il faut que je rajout :
Je ne sais pas si en rajoutant des Else cela suffit
If ActiveSheet.Name = "En cours 0-1000" Then
DerCol = Sheets("Résolus 0-1000").Cells.SpecialCells(xlCellTypeLastCell).Column
Cells(1, Target.Column).EntireColumn.Cut
j = Target.Column ' A la ligne ci-dessous, la Target.Column prend la valeur de la target de la feuille dans laquelle sont collées les données, il faut dont l'enregistrer auparavant.
Sheets("Résolus 0-1000").Columns(DerCol + 1).Insert Shift:=xlToRight
Cells(1, j).EntireColumn.Delete Shift:=xlToLeft
Else
DerCol = Sheets("Résolus 1000-2000").Cells.SpecialCells(xlCellTypeLastCell).Column
Cells(1, Target.Column).EntireColumn.Cut
j = Target.Column ' A la ligne ci-dessous, la Target.Column prend la valeur de la target de la feuille dans laquelle sont collées les données, il faut dont l'enregistrer auparavant.
Sheets("Résolus 1000-2000").Columns(DerCol + 1).Insert Shift:=xlToRight
Cells(1, j).EntireColumn.Delete Shift:=xlToLeft
Else
DerCol = Sheets("Résolus 2001-3000").Cells.SpecialCells(xlCellTypeLastCell).Column
Cells(1, Target.Column).EntireColumn.Cut
j = Target.Column ' A la ligne ci-dessous, la Target.Column prend la valeur de la target de la feuille dans laquelle sont collées les données, il faut dont l'enregistrer auparavant.
Sheets("Résolus 2001-3000").Columns(DerCol + 1).Insert Shift:=xlToRight
Cells(1, j).EntireColumn.Delete Shift:=xlToLeft
Else
DerCol = Sheets("Résolus 3001-4000").Cells.SpecialCells(xlCellTypeLastCell).Column
Cells(1, Target.Column).EntireColumn.Cut
j = Target.Column ' A la ligne ci-dessous, la Target.Column prend la valeur de la target de la feuille dans laquelle sont collées les données, il faut dont l'enregistrer auparavant.
Sheets("Résolus 3001-4000").Columns(DerCol + 1).Insert Shift:=xlToRight
Cells(1, j).EntireColumn.Delete Shift:=xlToLeft
Else
DerCol = Sheets("Résolus 4001-5000").Cells.SpecialCells(xlCellTypeLastCell).Column
Cells(1, Target.Column).EntireColumn.Cut
j = Target.Column ' A la ligne ci-dessous, la Target.Column prend la valeur de la target de la feuille dans laquelle sont collées les données, il faut dont l'enregistrer auparavant.
Sheets("Résolus 4001-5000").Columns(DerCol + 1).Insert Shift:=xlToRight
Cells(1, j).EntireColumn.Delete Shift:=xlToLeft
End If
Merci
Franck
Normalement oui, as-tu fait des essais ?Kisscool25 a écrit :Je ne sais pas si en rajoutant des Else cela suffit
Mais si tu as un si grand nombre de feuilles, il serait peut-être bien de modifier un peu le code. Je regarde ça à l'occasion ?
A te relire.
je m’aperçois qui me manque tous mes En Cours
Comment dois je me rajouter au code : - En rajoutant autant de IF que de "En cours ....." et la dernière solution ce finira avec un Else ? comme ci dessous dans le code
If ActiveSheet.Name = "En cours 0-1000" Then
DerCol = Sheets("Résolus 0-1000").Cells.SpecialCells(xlCellTypeLastCell).Column
Cells(1, Target.Column).EntireColumn.Cut
j = Target.Column ' A la ligne ci-dessous, la Target.Column prend la valeur de la target de la feuille dans laquelle sont collées les données, il faut dont l'enregistrer auparavant.
Sheets("Résolus 0-1000").Columns(DerCol + 1).Insert Shift:=xlToRight
Cells(1, j).EntireColumn.Delete Shift:=xlToLeft
if ActiveSheet.Name = "En cours 1001-2000" Then
DerCol = Sheets("Résolus 1001-2000").Cells.SpecialCells(xlCellTypeLastCell).Column
Cells(1, Target.Column).EntireColumn.Cut
j = Target.Column ' A la ligne ci-dessous, la Target.Column prend la valeur de la target de la feuille dans laquelle sont collées les données, il faut dont l'enregistrer auparavant.
Sheets("Résolus 1001-2000").Columns(DerCol + 1).Insert Shift:=xlToRight
Cells(1, j).EntireColumn.Delete Shift:=xlToLeft
if ActiveSheet.Name = "En cours 2001-3000" Then
DerCol = Sheets("Résolus 2001-3000").Cells.SpecialCells(xlCellTypeLastCell).Column
Cells(1, Target.Column).EntireColumn.Cut
j = Target.Column ' A la ligne ci-dessous, la Target.Column prend la valeur de la target de la feuille dans laquelle sont collées les données, il faut dont l'enregistrer auparavant.
Sheets("Résolus 2001-3000").Columns(DerCol + 1).Insert Shift:=xlToRight
Cells(1, j).EntireColumn.Delete Shift:=xlToLeft
if ActiveSheet.Name = "En cours 3001-4000" Then
DerCol = Sheets("Résolus 3001-4000").Cells.SpecialCells(xlCellTypeLastCell).Column
Cells(1, Target.Column).EntireColumn.Cut
j = Target.Column ' A la ligne ci-dessous, la Target.Column prend la valeur de la target de la feuille dans laquelle sont collées les données, il faut dont l'enregistrer auparavant.
Sheets("Résolus 3001-4000").Columns(DerCol + 1).Insert Shift:=xlToRight
Cells(1, j).EntireColumn.Delete Shift:=xlToLeft
Else
DerCol = Sheets("Résolus 4000-7000").Cells.SpecialCells(xlCellTypeLastCell).Column
Cells(1, Target.Column).EntireColumn.Cut
j = Target.Column ' A la ligne ci-dessous, la Target.Column prend la valeur de la target de la feuille dans laquelle sont collées les données, il faut dont l'enregistrer auparavant.
Sheets("Résolus 4000-7000").Columns(DerCol + 1).Insert Shift:=xlToRight
Cells(1, j).EntireColumn.Delete Shift:=xlToLeft
A vous lire pour la correction
Merci
Franck
Regarde dans le fichier ci-joint comment j’ai modifié mon code afin que ça joue pour une troisième paire de feuilles. J’ai mis les nouveautés en commentaires majuscules.
N’oublie pas d’aller voir également la ligne qui commence par If ActiveSheet.Name = "En cours 0-1000" Or …..
Mais comme je te l’ai déjà dit, pour rajouter encore 2 ou 3 paires de feuilles, ça risque d’être très laborieux. Il vaut mieux partir dans une autre direction selon moi. Je peux faire ça d’ici demain soir je pense.
Si j’ai ton feu vert, peux-tu me confirmer que toutes les feuilles comment bien par ‘En cours’ ou par ‘Résolus’ uniquement ?
A te relire.
Si j’ai ton feu vert, peux-tu me confirmer que toutes les feuilles comment bien par ‘En cours’ ou par ‘Résolus’ uniquement ?
d'avance merci
Oui tous mes onglets commence par En cours ou Résolus
dans le détail ça donne ça :
En cours 0-1000
En cours 1001-2000
En cours 2001-3000
En cours 3001-4000
En cours 4000-....
Résolus 0-1000
Résolus 1000-2000
Résolus 2000-3000
Résolus 3500-4000
Résolus 4000-....
Grand merci
Franck
Salut Frank,
Je n’ai pas très bien compris pourquoi à la feuille ‘En cours 3001-4000‘ correspondait la feuille ‘Résolu 3500-4000‘ mais bon, tu fais ce que tu veux
Voici un nouveau code - dans le fihcier ci-joint - à tester :
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim j As Integer, DerCol As Integer, Feuille_Base As String, Feuille_Correspondante As String
If Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
If Left(ActiveSheet.Name, 8) = "En cours" Then
Feuille_Base = ActiveSheet.Name
Select Case Feuille_Base
Case Is = "En cours 0-1000"
Feuille_Correspondante = "Résolus 0-1000"
Case Is = "En cours 1001-2000"
Feuille_Correspondante = "Résolus 1000-2000"
Case Is = "En cours 2001-3000"
Feuille_Correspondante = "Résolus 2000-3000"
Case Is = "En cours 3001-4000"
Feuille_Correspondante = "Résolus 3500-4000"
Case Else
Feuille_Correspondante = "Résolus 4000-...."
End Select
If Not Application.Intersect(Target, Range("D17:IV17,D26:IV26,D35:IV35")) Is Nothing Then
If Cells(17, Target.Column) + Cells(26, Target.Column) + Cells(35, Target.Column) = Cells(8, Target.Column) Then
DerCol = Sheets(Feuille_Correspondante).Cells.SpecialCells(xlCellTypeLastCell).Column
Cells(1, Target.Column).EntireColumn.Cut
j = Target.Column ' A la ligne ci-dessous, la Target.Column prend la valeur de la target de la feuille dans laquelle sont collées les données, il faut dont l'enregistrer auparavant.
Sheets(Feuille_Correspondante).Columns(DerCol + 1).Insert Shift:=xlToRight
Cells(1, j).EntireColumn.Delete Shift:=xlToLeft
End If
End If
End If
Application.EnableEvents = True
End Sub
Bonnes salutations.
Bonjour et Merci Yvouille
Effectivement, moi non plus je ne sais pas pourquoi la feuille ‘En cours 3001-4000‘ correspondait la feuille ‘Résolu 3500-4000‘
correction apporté au fichier, en plus j'avais un espace dans le nom d'un onglet et donc je ne comprenais pas pourquoi cela ne fonctionnais sur cette onglet.
Mais tous fonctionne c'est Génial
Un Grand MERCi
Bonne continuation et au plaisir
Franck