Mise a jour automatique de tableaux a partir d'une liste
Bonjour a tous et merci d'avance pour lire mon message,
Voici ma problématique :
J'ai une feuille de classeur nommée "Analyse" qui regroupe plusieurs tableaux différents. J'ai également une autre feuille nommée "Liste" qui regroupe l'ensemble des clients sous une barre de formule nommée "client".
Je souhaiterai que lorsqu'un nouveau client est entrée dans la feuille "Liste", les tableaux de la feuille "Analyse" le prennent en compte et se mettent à jour (tout en se décalant vers le bas pour ne pas se superposer.
Je joins un exemple simple pour me faire comprendre plus facilement. L'exemple est simplifié au maximum, en vérité, la liste "client" est extraite via VGA d'une extraction de 15 feuilles différentes et la feuille "Analyse" est composée de 12 tableaux différents qui vont chercher les informations dans ces mêmes 15 feuilles. C'est pourquoi je cherche une façon automatique de faire tout cela sans changer la disposition des tableaux.
Merci d'avance pour votre aide.
Bonjour, chaque client doit aller dans chaque tableau ?
Bonjour,
Oui Monsieur
Les tableaux sont identiques (même formule) est-ce possible de ne créer qu'un seul tableau et de le dupliquer ensuite ?
Malheureusement non.
La 1ere colonne sera identique (nom du client) mais les autres sont différentes car elles vont chercher des données différentes (total pour un, total cumulé pour un autre, etc...)
Et vous envisagez de faire ça comment ou qu'est-ce que vous avez déjà fait pour arriver au résultat voulu ?
J'ai déja effectué les recherches matricielles qui permettent d'aller chercher les différentes informations d'un client sur les différentes feuilles et j'ai également dans l'onglet liste une macro qui actualise automatiquement la liste client grace a un bouton.
Il me manque donc plus qu'une solution qui permettra de mettre a jour la 1ere colonne des tableaux de l'onglet "analyse" avec cette liste actualisée de client.
tous les mois, on ajoute un onglet qui repertorie les différents clients et leurs résultats. Si on acquiert un nouveau client, il apparaitra donc dans l'onglet du mois suivant mais pas dans les précédents. De ce fait, grâce a la macro que je possede deja, il sera intégré dans la liste client. Maintenant, je souhaiterai que les tableaux soient egalement mis a jour mais garde la meme mise en forme (puisqu'ils sont les uns en dessous des autres pour un souci de lisibilité) et se decalent.
Suis-je clair dans mes propos? Lol
Désolé je ne vois pas comment faire, ça dépasse mes compétences en vba :/
Bonjour
Un début pour commencer ou un commencement pour débuter
A tester
Force rouge a écrit :Désolé je ne vois pas comment faire, ça dépasse mes compétences en vba :/
Pas de souci ! Merci de vous y être intéressé en tout cas !
Banzai64 a écrit :Bonjour
Un début pour commencer ou un commencement pour débuter
A tester
Un très bon début même, merci !
Peut-on insérer également une fonction qui supprime un nom de client des tableaux s'il est supprimé de la liste svp?
Bonjour
Pour le moment je ne sais pas comment faire
La liste est actualisée au fil de l'eau et ce n'est pas évident de supprimer un nom car il faut faire une recherche entre tous les noms de la liste et ceux du tableau
J'y réfléchi mais ne soit pas pressé
C'est gentil merci.
Je ne sais pas trop non plus comment faire mais ne peut-on pas imaginer cette macro sous forme de module lancée par un bouton qui commencera tout d'abord par enlever tout le contenu du tableau pour ensuite insérer?
J'ai d'ores et déjà cette macro présente dans mon document qui me permet d'aller chercher dans chaque onglet portant le nom d'une période (janvier, Fevrier,... Decembre, 2014,2013,2012) le nom des clients présents dedans pour les intégrer dans la liste client. Peut-être peut-on la réutiliser... (Au passage, si tu sais comment la simplifier cela serait top car il me faut 45 minutes pour qu'elle se termine")
Sub miseajourlisteclient()
'Définit les variables
Dim i&, j&, DerL&
Dim Ws1 As Worksheet, Ws2 As Worksheet, Ws3 As Worksheet, Ws4 As Worksheet, Ws5 As Worksheet, Ws6 As Worksheet, Ws7 As Worksheet, Ws8 As Worksheet, Ws9 As Worksheet, Ws10 As Worksheet, Ws11 As Worksheet, Ws12 As Worksheet, Ws13 As Worksheet, Ws14 As Worksheet, Ws15 As Worksheet, Ws16 As Worksheet
'Permet de donner un nom plus court à tes feuilles
Set Ws1 = Worksheets("Liste"): Set Ws2 = Worksheets("Janvier"): Set Ws3 = Worksheets("Fevrier"): Set Ws4 = Worksheets("Mars"): Set Ws5 = Worksheets("Avril"): Set Ws6 = Worksheets("Mai"): Set Ws7 = Worksheets("Juin"): Set Ws8 = Worksheets("Juillet"): Set Ws9 = Worksheets("Aout"): Set Ws10 = Worksheets("Septembre"): Set Ws11 = Worksheets("Octobre"): Set Ws12 = Worksheets("Novembre"): Set Ws13 = Worksheets("decembre"): Set Ws14 = Worksheets("2014"): Set Ws15 = Worksheets("2013"): Set Ws16 = Worksheets("2012")
'Avec la feuille 2
With Ws2
'Pour toutes les lignes de 1 à la fin de ta feuille 2
For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
'Dernière ligne de la feuille 1
DerL = Ws1.Cells(Rows.Count, 1).End(xlUp)(2).Row
'Si la valeur de la cellule de la feuille 2 de la colonne 1 ligne i est trouvée
'dans la colonne 1 de la feuille 1 alors on continu
If Not IsError(Application.Match(.Cells(i, 1), Ws1.Columns(1), 0)) Then
'Pour toutes les ligne j de la feuille 1 jusqu'à la dernière ligne
For j = 2 To DerL
'Si la cellule de la feuille 2 est égale à la cellule de la feuille 1, alors on continu
If Cells(j, 1) = .Cells(i, 1) Then
'On copie les cellules des colonnes 2 et 3 dans les cellules de la feuille 1 en colonne 4 et 5
Ws1.Cells(j, 1) = .Cells(i, 1)
End If
'Prochaine ligne de la feuille 1
Next
'Si l'on a pas trouvé la valeur de la feuille 2 alors on ajoute une ligne
Else
'On copie la valeur de la colonne 1, 2 et 3 dans la feuille 1 colonne 1, 4 et 5
Ws1.Cells(DerL, 1) = .Cells(i, 1)
'On ajoute 1 pour la dernière ligne
DerL = DerL + 1
End If
'Prochaine ligne i de la feuille 2
Next
End With
With Ws3
'Pour toutes les lignes de 1 à la fin de ta feuille 2
For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
'Dernière ligne de la feuille 1
DerL = Ws1.Cells(Rows.Count, 1).End(xlUp)(2).Row
'Si la valeur de la cellule de la feuille 2 de la colonne 1 ligne i est trouvée
'dans la colonne 1 de la feuille 1 alors on continu
If Not IsError(Application.Match(.Cells(i, 1), Ws1.Columns(1), 0)) Then
'Pour toutes les ligne j de la feuille 1 jusqu'à la dernière ligne
For j = 2 To DerL
'Si la cellule de la feuille 2 est égale à la cellule de la feuille 1, alors on continu
If Cells(j, 1) = .Cells(i, 1) Then
'On copie les cellules des colonnes 2 et 3 dans les cellules de la feuille 1 en colonne 4 et 5
Ws1.Cells(j, 1) = .Cells(i, 1)
End If
'Prochaine ligne de la feuille 1
Next
'Si l'on a pas trouvé la valeur de la feuille 2 alors on ajoute une ligne
Else
'On copie la valeur de la colonne 1, 2 et 3 dans la feuille 1 colonne 1, 4 et 5
Ws1.Cells(DerL, 1) = .Cells(i, 1)
'On ajoute 1 pour la dernière ligne
DerL = DerL + 1
End If
'Prochaine ligne i de la feuille 2
Next
End With
With Ws4
'Pour toutes les lignes de 1 à la fin de ta feuille 2
For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
'Dernière ligne de la feuille 1
DerL = Ws1.Cells(Rows.Count, 1).End(xlUp)(2).Row
'Si la valeur de la cellule de la feuille 2 de la colonne 1 ligne i est trouvée
'dans la colonne 1 de la feuille 1 alors on continu
If Not IsError(Application.Match(.Cells(i, 1), Ws1.Columns(1), 0)) Then
'Pour toutes les ligne j de la feuille 1 jusqu'à la dernière ligne
For j = 2 To DerL
'Si la cellule de la feuille 2 est égale à la cellule de la feuille 1, alors on continu
If Cells(j, 1) = .Cells(i, 1) Then
'On copie les cellules des colonnes 2 et 3 dans les cellules de la feuille 1 en colonne 4 et 5
Ws1.Cells(j, 1) = .Cells(i, 1)
End If
'Prochaine ligne de la feuille 1
Next
'Si l'on a pas trouvé la valeur de la feuille 2 alors on ajoute une ligne
Else
'On copie la valeur de la colonne 1, 2 et 3 dans la feuille 1 colonne 1, 4 et 5
Ws1.Cells(DerL, 1) = .Cells(i, 1)
'On ajoute 1 pour la dernière ligne
DerL = DerL + 1
End If
'Prochaine ligne i de la feuille 2
Next
End With
With Ws5
'Pour toutes les lignes de 1 à la fin de ta feuille 2
For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
'Dernière ligne de la feuille 1
DerL = Ws1.Cells(Rows.Count, 1).End(xlUp)(2).Row
'Si la valeur de la cellule de la feuille 2 de la colonne 1 ligne i est trouvée
'dans la colonne 1 de la feuille 1 alors on continu
If Not IsError(Application.Match(.Cells(i, 1), Ws1.Columns(1), 0)) Then
'Pour toutes les ligne j de la feuille 1 jusqu'à la dernière ligne
For j = 2 To DerL
'Si la cellule de la feuille 2 est égale à la cellule de la feuille 1, alors on continu
If Cells(j, 1) = .Cells(i, 1) Then
'On copie les cellules des colonnes 2 et 3 dans les cellules de la feuille 1 en colonne 4 et 5
Ws1.Cells(j, 1) = .Cells(i, 1)
End If
'Prochaine ligne de la feuille 1
Next
'Si l'on a pas trouvé la valeur de la feuille 2 alors on ajoute une ligne
Else
'On copie la valeur de la colonne 1, 2 et 3 dans la feuille 1 colonne 1, 4 et 5
Ws1.Cells(DerL, 1) = .Cells(i, 1)
'On ajoute 1 pour la dernière ligne
DerL = DerL + 1
End If
'Prochaine ligne i de la feuille 2
Next
End With
With Ws6
'Pour toutes les lignes de 1 à la fin de ta feuille 2
For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
'Dernière ligne de la feuille 1
DerL = Ws1.Cells(Rows.Count, 1).End(xlUp)(2).Row
'Si la valeur de la cellule de la feuille 2 de la colonne 1 ligne i est trouvée
'dans la colonne 1 de la feuille 1 alors on continu
If Not IsError(Application.Match(.Cells(i, 1), Ws1.Columns(1), 0)) Then
'Pour toutes les ligne j de la feuille 1 jusqu'à la dernière ligne
For j = 2 To DerL
'Si la cellule de la feuille 2 est égale à la cellule de la feuille 1, alors on continu
If Cells(j, 1) = .Cells(i, 1) Then
'On copie les cellules des colonnes 2 et 3 dans les cellules de la feuille 1 en colonne 4 et 5
Ws1.Cells(j, 1) = .Cells(i, 1)
End If
'Prochaine ligne de la feuille 1
Next
'Si l'on a pas trouvé la valeur de la feuille 2 alors on ajoute une ligne
Else
'On copie la valeur de la colonne 1, 2 et 3 dans la feuille 1 colonne 1, 4 et 5
Ws1.Cells(DerL, 1) = .Cells(i, 1)
'On ajoute 1 pour la dernière ligne
DerL = DerL + 1
End If
'Prochaine ligne i de la feuille 2
Next
End With
With Ws7
'Pour toutes les lignes de 1 à la fin de ta feuille 2
For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
'Dernière ligne de la feuille 1
DerL = Ws1.Cells(Rows.Count, 1).End(xlUp)(2).Row
'Si la valeur de la cellule de la feuille 2 de la colonne 1 ligne i est trouvée
'dans la colonne 1 de la feuille 1 alors on continu
If Not IsError(Application.Match(.Cells(i, 1), Ws1.Columns(1), 0)) Then
'Pour toutes les ligne j de la feuille 1 jusqu'à la dernière ligne
For j = 2 To DerL
'Si la cellule de la feuille 2 est égale à la cellule de la feuille 1, alors on continu
If Cells(j, 1) = .Cells(i, 1) Then
'On copie les cellules des colonnes 2 et 3 dans les cellules de la feuille 1 en colonne 4 et 5
Ws1.Cells(j, 1) = .Cells(i, 1)
End If
'Prochaine ligne de la feuille 1
Next
'Si l'on a pas trouvé la valeur de la feuille 2 alors on ajoute une ligne
Else
'On copie la valeur de la colonne 1, 2 et 3 dans la feuille 1 colonne 1, 4 et 5
Ws1.Cells(DerL, 1) = .Cells(i, 1)
'On ajoute 1 pour la dernière ligne
DerL = DerL + 1
End If
'Prochaine ligne i de la feuille 2
Next
End With
With Ws8
'Pour toutes les lignes de 1 à la fin de ta feuille 2
For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
'Dernière ligne de la feuille 1
DerL = Ws1.Cells(Rows.Count, 1).End(xlUp)(2).Row
'Si la valeur de la cellule de la feuille 2 de la colonne 1 ligne i est trouvée
'dans la colonne 1 de la feuille 1 alors on continu
If Not IsError(Application.Match(.Cells(i, 1), Ws1.Columns(1), 0)) Then
'Pour toutes les ligne j de la feuille 1 jusqu'à la dernière ligne
For j = 2 To DerL
'Si la cellule de la feuille 2 est égale à la cellule de la feuille 1, alors on continu
If Cells(j, 1) = .Cells(i, 1) Then
'On copie les cellules des colonnes 2 et 3 dans les cellules de la feuille 1 en colonne 4 et 5
Ws1.Cells(j, 1) = .Cells(i, 1)
End If
'Prochaine ligne de la feuille 1
Next
'Si l'on a pas trouvé la valeur de la feuille 2 alors on ajoute une ligne
Else
'On copie la valeur de la colonne 1, 2 et 3 dans la feuille 1 colonne 1, 4 et 5
Ws1.Cells(DerL, 1) = .Cells(i, 1)
'On ajoute 1 pour la dernière ligne
DerL = DerL + 1
End If
'Prochaine ligne i de la feuille 2
Next
End With
With Ws9
'Pour toutes les lignes de 1 à la fin de ta feuille 2
For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
'Dernière ligne de la feuille 1
DerL = Ws1.Cells(Rows.Count, 1).End(xlUp)(2).Row
'Si la valeur de la cellule de la feuille 2 de la colonne 1 ligne i est trouvée
'dans la colonne 1 de la feuille 1 alors on continu
If Not IsError(Application.Match(.Cells(i, 1), Ws1.Columns(1), 0)) Then
'Pour toutes les ligne j de la feuille 1 jusqu'à la dernière ligne
For j = 2 To DerL
'Si la cellule de la feuille 2 est égale à la cellule de la feuille 1, alors on continu
If Cells(j, 1) = .Cells(i, 1) Then
'On copie les cellules des colonnes 2 et 3 dans les cellules de la feuille 1 en colonne 4 et 5
Ws1.Cells(j, 1) = .Cells(i, 1)
End If
'Prochaine ligne de la feuille 1
Next
'Si l'on a pas trouvé la valeur de la feuille 2 alors on ajoute une ligne
Else
'On copie la valeur de la colonne 1, 2 et 3 dans la feuille 1 colonne 1, 4 et 5
Ws1.Cells(DerL, 1) = .Cells(i, 1)
'On ajoute 1 pour la dernière ligne
DerL = DerL + 1
End If
'Prochaine ligne i de la feuille 2
Next
End With
With Ws10
'Pour toutes les lignes de 1 à la fin de ta feuille 2
For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
'Dernière ligne de la feuille 1
DerL = Ws1.Cells(Rows.Count, 1).End(xlUp)(2).Row
'Si la valeur de la cellule de la feuille 2 de la colonne 1 ligne i est trouvée
'dans la colonne 1 de la feuille 1 alors on continu
If Not IsError(Application.Match(.Cells(i, 1), Ws1.Columns(1), 0)) Then
'Pour toutes les ligne j de la feuille 1 jusqu'à la dernière ligne
For j = 2 To DerL
'Si la cellule de la feuille 2 est égale à la cellule de la feuille 1, alors on continu
If Cells(j, 1) = .Cells(i, 1) Then
'On copie les cellules des colonnes 2 et 3 dans les cellules de la feuille 1 en colonne 4 et 5
Ws1.Cells(j, 1) = .Cells(i, 1)
End If
'Prochaine ligne de la feuille 1
Next
'Si l'on a pas trouvé la valeur de la feuille 2 alors on ajoute une ligne
Else
'On copie la valeur de la colonne 1, 2 et 3 dans la feuille 1 colonne 1, 4 et 5
Ws1.Cells(DerL, 1) = .Cells(i, 1)
'On ajoute 1 pour la dernière ligne
DerL = DerL + 1
End If
'Prochaine ligne i de la feuille 2
Next
End With
With Ws11
'Pour toutes les lignes de 1 à la fin de ta feuille 2
For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
'Dernière ligne de la feuille 1
DerL = Ws1.Cells(Rows.Count, 1).End(xlUp)(2).Row
'Si la valeur de la cellule de la feuille 2 de la colonne 1 ligne i est trouvée
'dans la colonne 1 de la feuille 1 alors on continu
If Not IsError(Application.Match(.Cells(i, 1), Ws1.Columns(1), 0)) Then
'Pour toutes les ligne j de la feuille 1 jusqu'à la dernière ligne
For j = 2 To DerL
'Si la cellule de la feuille 2 est égale à la cellule de la feuille 1, alors on continu
If Cells(j, 1) = .Cells(i, 1) Then
'On copie les cellules des colonnes 2 et 3 dans les cellules de la feuille 1 en colonne 4 et 5
Ws1.Cells(j, 1) = .Cells(i, 1)
End If
'Prochaine ligne de la feuille 1
Next
'Si l'on a pas trouvé la valeur de la feuille 2 alors on ajoute une ligne
Else
'On copie la valeur de la colonne 1, 2 et 3 dans la feuille 1 colonne 1, 4 et 5
Ws1.Cells(DerL, 1) = .Cells(i, 1)
'On ajoute 1 pour la dernière ligne
DerL = DerL + 1
End If
'Prochaine ligne i de la feuille 2
Next
End With
With Ws12
'Pour toutes les lignes de 1 à la fin de ta feuille 2
For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
'Dernière ligne de la feuille 1
DerL = Ws1.Cells(Rows.Count, 1).End(xlUp)(2).Row
'Si la valeur de la cellule de la feuille 2 de la colonne 1 ligne i est trouvée
'dans la colonne 1 de la feuille 1 alors on continu
If Not IsError(Application.Match(.Cells(i, 1), Ws1.Columns(1), 0)) Then
'Pour toutes les ligne j de la feuille 1 jusqu'à la dernière ligne
For j = 2 To DerL
'Si la cellule de la feuille 2 est égale à la cellule de la feuille 1, alors on continu
If Cells(j, 1) = .Cells(i, 1) Then
'On copie les cellules des colonnes 2 et 3 dans les cellules de la feuille 1 en colonne 4 et 5
Ws1.Cells(j, 1) = .Cells(i, 1)
End If
'Prochaine ligne de la feuille 1
Next
'Si l'on a pas trouvé la valeur de la feuille 2 alors on ajoute une ligne
Else
'On copie la valeur de la colonne 1, 2 et 3 dans la feuille 1 colonne 1, 4 et 5
Ws1.Cells(DerL, 1) = .Cells(i, 1)
'On ajoute 1 pour la dernière ligne
DerL = DerL + 1
End If
'Prochaine ligne i de la feuille 2
Next
End With
With Ws13
'Pour toutes les lignes de 1 à la fin de ta feuille 2
For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
'Dernière ligne de la feuille 1
DerL = Ws1.Cells(Rows.Count, 1).End(xlUp)(2).Row
'Si la valeur de la cellule de la feuille 2 de la colonne 1 ligne i est trouvée
'dans la colonne 1 de la feuille 1 alors on continu
If Not IsError(Application.Match(.Cells(i, 1), Ws1.Columns(1), 0)) Then
'Pour toutes les ligne j de la feuille 1 jusqu'à la dernière ligne
For j = 2 To DerL
'Si la cellule de la feuille 2 est égale à la cellule de la feuille 1, alors on continu
If Cells(j, 1) = .Cells(i, 1) Then
'On copie les cellules des colonnes 2 et 3 dans les cellules de la feuille 1 en colonne 4 et 5
Ws1.Cells(j, 1) = .Cells(i, 1)
End If
'Prochaine ligne de la feuille 1
Next
'Si l'on a pas trouvé la valeur de la feuille 2 alors on ajoute une ligne
Else
'On copie la valeur de la colonne 1, 2 et 3 dans la feuille 1 colonne 1, 4 et 5
Ws1.Cells(DerL, 1) = .Cells(i, 1)
'On ajoute 1 pour la dernière ligne
DerL = DerL + 1
End If
'Prochaine ligne i de la feuille 2
Next
End With
With Ws14
'Pour toutes les lignes de 1 à la fin de ta feuille 2
For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
'Dernière ligne de la feuille 1
DerL = Ws1.Cells(Rows.Count, 1).End(xlUp)(2).Row
'Si la valeur de la cellule de la feuille 2 de la colonne 1 ligne i est trouvée
'dans la colonne 1 de la feuille 1 alors on continu
If Not IsError(Application.Match(.Cells(i, 1), Ws1.Columns(1), 0)) Then
'Pour toutes les ligne j de la feuille 1 jusqu'à la dernière ligne
For j = 2 To DerL
'Si la cellule de la feuille 2 est égale à la cellule de la feuille 1, alors on continu
If Cells(j, 1) = .Cells(i, 1) Then
'On copie les cellules des colonnes 2 et 3 dans les cellules de la feuille 1 en colonne 4 et 5
Ws1.Cells(j, 1) = .Cells(i, 1)
End If
'Prochaine ligne de la feuille 1
Next
'Si l'on a pas trouvé la valeur de la feuille 2 alors on ajoute une ligne
Else
'On copie la valeur de la colonne 1, 2 et 3 dans la feuille 1 colonne 1, 4 et 5
Ws1.Cells(DerL, 1) = .Cells(i, 1)
'On ajoute 1 pour la dernière ligne
DerL = DerL + 1
End If
'Prochaine ligne i de la feuille 2
Next
End With
With Ws15
'Pour toutes les lignes de 1 à la fin de ta feuille 2
For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
'Dernière ligne de la feuille 1
DerL = Ws1.Cells(Rows.Count, 1).End(xlUp)(2).Row
'Si la valeur de la cellule de la feuille 2 de la colonne 1 ligne i est trouvée
'dans la colonne 1 de la feuille 1 alors on continu
If Not IsError(Application.Match(.Cells(i, 1), Ws1.Columns(1), 0)) Then
'Pour toutes les ligne j de la feuille 1 jusqu'à la dernière ligne
For j = 2 To DerL
'Si la cellule de la feuille 2 est égale à la cellule de la feuille 1, alors on continu
If Cells(j, 1) = .Cells(i, 1) Then
'On copie les cellules des colonnes 2 et 3 dans les cellules de la feuille 1 en colonne 4 et 5
Ws1.Cells(j, 1) = .Cells(i, 1)
End If
'Prochaine ligne de la feuille 1
Next
'Si l'on a pas trouvé la valeur de la feuille 2 alors on ajoute une ligne
Else
'On copie la valeur de la colonne 1, 2 et 3 dans la feuille 1 colonne 1, 4 et 5
Ws1.Cells(DerL, 1) = .Cells(i, 1)
'On ajoute 1 pour la dernière ligne
DerL = DerL + 1
End If
'Prochaine ligne i de la feuille 2
Next
End With
With Ws16
'Pour toutes les lignes de 1 à la fin de ta feuille 2
For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
'Dernière ligne de la feuille 1
DerL = Ws1.Cells(Rows.Count, 1).End(xlUp)(2).Row
'Si la valeur de la cellule de la feuille 2 de la colonne 1 ligne i est trouvée
'dans la colonne 1 de la feuille 1 alors on continu
If Not IsError(Application.Match(.Cells(i, 1), Ws1.Columns(1), 0)) Then
'Pour toutes les ligne j de la feuille 1 jusqu'à la dernière ligne
For j = 2 To DerL
'Si la cellule de la feuille 2 est égale à la cellule de la feuille 1, alors on continu
If Cells(j, 1) = .Cells(i, 1) Then
'On copie les cellules des colonnes 2 et 3 dans les cellules de la feuille 1 en colonne 4 et 5
Ws1.Cells(j, 1) = .Cells(i, 1)
End If
'Prochaine ligne de la feuille 1
Next
'Si l'on a pas trouvé la valeur de la feuille 2 alors on ajoute une ligne
Else
'On copie la valeur de la colonne 1, 2 et 3 dans la feuille 1 colonne 1, 4 et 5
Ws1.Cells(DerL, 1) = .Cells(i, 1)
'On ajoute 1 pour la dernière ligne
DerL = DerL + 1
End If
'Prochaine ligne i de la feuille 2
Next
End With
End SubP.S : ne pas faire cas des commentaires en vert, c'est une macro que j'ai récupérer d'un autre travail que j'avais effectué et que j'ai adapté au nouveau.
Bonjour
Ce qui me gène le plus ce sont les formules
Car il ne faut pas que le tableau ait moins de 2 lignes, sinon pour l'insertion on perd les formules
A moins que l'on refasse les formules, il faut savoir si ce sont les mêmes qu'actuellement
Pour voir ta macro, il me faudrait ton fichier anonymisé afin que je puisse faire des tests
Pour essayer ton idée il faut savoir combien au maximum de noms dans la liste ?
Une autre question on ne travaille qu'avec un seul onglet ?
pour refaire la liste ok mais pour dispatcher cette liste il faut travailler sur tous les onglets ?tetter88 a écrit :chercher dans chaque onglet
Banzai64 a écrit :Ce qui me gène le plus ce sont les formules
Car il ne faut pas que le tableau ait moins de 2 lignes, sinon pour l'insertion on perd les formules
A moins que l'on refasse les formules, il faut savoir si ce sont les mêmes qu'actuellement
Il n'y aura jamais moins de 2 lignes et il sera très rare de voir un nouveau client arriver (peut être 1 ou 2 clients en plus ou en moins par an mais pas plus). Je souhaite néanmoins que ce fichier soit actualisable juste en appuyant au final sur un bouton pour simplifier l'utilisation du fichier.
Banzai64 a écrit :Pour voir ta macro, il me faudrait ton fichier anonymisé afin que je puisse faire des tests
Malheureusement je ne peux pas te donner un fichier plus anonymisé que celui-la par souci de confidentialité d'entreprise (non pas que dans la liste client mais également dans la conception même du fichier). dsl...
Banzai64 a écrit :Pour essayer ton idée il faut savoir combien au maximum de noms dans la liste ?
Il n'y a pas de maximum limite mais il est impensable d'avoir plus de 100 nom dans un tableau
Banzai64 a écrit :Une autre question on ne travaille qu'avec un seul onglet ?
Sur cette macro oui. J'ai d'autres macro qui travaille déjà sur les différents onglets. Il me reste juste ce souci d'actualisation des tableaux pour terminer.
Banzai64 a écrit :tetter88 a écrit:
chercher dans chaque onglet
pour refaire la liste ok mais pour dispatcher cette liste il faut travailler sur tous les onglets ?
Oui car dans l'onglet "Janvier", il y aura peut être un client qui n'aura pas commandé alors qu'il aura commandé en Février. Ainsi, il sera bien présent dans l'onglet Février mais non pas dans l'onglet "Janvier". Mais cela est un problème secondaire dont on pourra éventuellement discuter plus tard ou alors je créerai une autre discussion.
Bonjour,
Merci beaucoup pour ce nouveau fichier qui se rapproche de plus en plus de ce que je recherche
Je pense à ajouter un graphique dans les colonnes de A à E et un titre pour chaque tableau. J'ai tenté de modifié un peu ton code pour tenir mais maintenant il me recopie à l'infini le titre "client"
ci-joint la modif faites !
c'est parfait ! merci bien !! ^^
Une autre question : Ce code (que tu m'as aidé à simplifier), va chercher dans tous les onglets les différents noms de clients les composant. Or, en dernière ligne des listes, il y a une ligne "Total général". Je souhaiterai que la macro ne la prenne pas. J'essaye de comprendre comment déterminer la derniere ligne comme tu as fait pour la macro de mise a jour mais vu que la structure est différente je ne sais pas comment la changer.
Sub miseajourlisteclient()
Dim i&, J&, DerL&
'Dim Ws1 As Worksheet, Ws2 As Worksheet, Ws3 As Worksheet, Ws4 As Worksheet, Ws5 As Worksheet, Ws6 As Worksheet, Ws7 As Worksheet, Ws8 As Worksheet, Ws9 As Worksheet, Ws10 As Worksheet, Ws11 As Worksheet, Ws12 As Worksheet, Ws13 As Worksheet, Ws14 As Worksheet, Ws15 As Worksheet, Ws16 As Worksheet
Dim Ws1 As Worksheet, Ws As Worksheet
Dim Cel As Range, Depart As String, Ligne As Long
Dim K As Long
'Permet de donner un nom plus court à tes feuilles
Set Ws1 = Worksheets("Liste") ': Set Ws2 = Worksheets("Janvier"): Set Ws3 = Worksheets("Fevrier"): Set Ws4 = Worksheets("Mars"): Set Ws5 = Worksheets("Avril"): Set Ws6 = Worksheets("Mai"): Set Ws7 = Worksheets("Juin"): Set Ws8 = Worksheets("Juillet"): Set Ws9 = Worksheets("Aout"): Set Ws10 = Worksheets("Septembre"): Set Ws11 = Worksheets("Octobre"): Set Ws12 = Worksheets("Novembre"): Set Ws13 = Worksheets("decembre"): Set Ws14 = Worksheets("2014"): Set Ws15 = Worksheets("2013"): Set Ws16 = Worksheets("2012")
'"Janvier","Fevrier","Mars","Avril","Mai","Juin","Juillet","Aout","Septembre","Octobre","Novembre","decembre","2014","2013","2012"
'Avec la feuille 2
Ws1.Range("A2:A1000").ClearContents
'Dernière ligne de la feuille 1
DerL = Ws1.Cells(Rows.Count, 1).End(xlUp)(2).Row
For Each Ws In Sheets(Array("Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "decembre", "2014", "2013", "2012"))
With Ws
'Pour toutes les lignes de 1 à la fin de ta feuille 2
For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
'Si la valeur de la cellule de la feuille de la colonne 1 ligne i est trouvée
'dans la colonne 1 de la feuille 1 alors on continu
If Not IsError(Application.Match(.Cells(i, 1), Ws1.Columns(1), 0)) Then
'Pour toutes les ligne j de la feuille 1 jusqu'à la dernière ligne
For J = 2 To DerL
'Si la cellule de la feuille 2 est égale à la cellule de la feuille 1, alors on continu
If Ws1.Cells(J, 1) = .Cells(i, 1) Then
'On copie les cellules des colonnes 2 et 3 dans les cellules de la feuille 1 en colonne 4 et 5
Ws1.Cells(J, 1) = .Cells(i, 1)
End If
'Prochaine ligne de la feuille 1
Next
'Si l'on a pas trouvé la valeur de la feuille 2 alors on ajoute une ligne
Else
'On copie la valeur de la colonne 1, 2 et 3 dans la feuille 1 colonne 1, 4 et 5
Ws1.Cells(DerL, 1) = .Cells(i, 1)
'On ajoute 1 pour la dernière ligne
DerL = DerL + 1
End If
'Prochaine ligne i de la feuille 2
Next
End With
Next WsJ'imagine que c'est dans la ligne suivante mais je ne sais pas comment définir cela :
For i = 3 To .Cells(Rows.Count, 1).End(xlUp).RowMerci a toi
Bonjour
On en revient à une demande
Mais peut être que
For i = 3 To .Cells(Rows.Count, 1).End(xlUp).Row- 1 ' Modification iciBanzai64 a écrit :Bonjour
On en revient à une demande
dsl... Ci-joint avec la macro à l'intérieur