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

Kisscool25 a écrit :

Je ne sais pas si en rajoutant des Else cela suffit

Normalement oui, as-tu fait des essais ?

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

Rechercher des sujets similaires à "deplacer colonne onglet"