Bonjour toute la communauté,
Je travaille actuellement sur un fichier excel qui fait des extractions de
requête d'une base de données Access.
Le problème ce que mon fichier contient plusieurs fois les mêmes
commandes. Je m'explique une commande pouvant avoir plusieurs articles,
celle-ci se répète autant de fois qu'il y'a d'article.
Pour éviter ceci je voulais savoir s'il y'avais un moyen de regrouper
tous les articles par rapport à la commande ou de les fusionner. C'est
à dire qu'en face de chaque commande les articles apparaissent dans une
cellule.
Je ne sais pas si c'est clair ce que j'ai écrit :/
Merci d'avance pour votre aide :)
Bonjour toute la communauté,
Je travaille actuellement sur un fichier excel qui fait des extractions de
requête d'une base de données Access.
Le problème ce que mon fichier contient plusieurs fois les mêmes
commandes. Je m'explique une commande pouvant avoir plusieurs articles,
celle-ci se répète autant de fois qu'il y'a d'article.
Pour éviter ceci je voulais savoir s'il y'avais un moyen de regrouper
tous les articles par rapport à la commande ou de les fusionner. C'est
à dire qu'en face de chaque commande les articles apparaissent dans une
cellule.
Je ne sais pas si c'est clair ce que j'ai écrit :/
Merci d'avance pour votre aide :)
Bonjour toute la communauté,
Je travaille actuellement sur un fichier excel qui fait des extractions de
requête d'une base de données Access.
Le problème ce que mon fichier contient plusieurs fois les mêmes
commandes. Je m'explique une commande pouvant avoir plusieurs articles,
celle-ci se répète autant de fois qu'il y'a d'article.
Pour éviter ceci je voulais savoir s'il y'avais un moyen de regrouper
tous les articles par rapport à la commande ou de les fusionner. C'est
à dire qu'en face de chaque commande les articles apparaissent dans une
cellule.
Je ne sais pas si c'est clair ce que j'ai écrit :/
Merci d'avance pour votre aide :)
Bonjour toute la communauté,
Je travaille actuellement sur un fichier excel qui fait des extractions de
requête d'une base de données Access.
Le problème ce que mon fichier contient plusieurs fois les mêmes
commandes. Je m'explique une commande pouvant avoir plusieurs articles,
celle-ci se répète autant de fois qu'il y'a d'article.
Pour éviter ceci je voulais savoir s'il y'avais un moyen de regrouper
tous les articles par rapport à la commande ou de les fusionner. C'est
à dire qu'en face de chaque commande les articles apparaissent dans une
cellule.
Je ne sais pas si c'est clair ce que j'ai écrit :/
Merci d'avance pour votre aide :)
Bonjour toute la communauté,
Je travaille actuellement sur un fichier excel qui fait des extractions de
requête d'une base de données Access.
Le problème ce que mon fichier contient plusieurs fois les mêmes
commandes. Je m'explique une commande pouvant avoir plusieurs articles,
celle-ci se répète autant de fois qu'il y'a d'article.
Pour éviter ceci je voulais savoir s'il y'avais un moyen de regrouper
tous les articles par rapport à la commande ou de les fusionner. C'est
à dire qu'en face de chaque commande les articles apparaissent dans une
cellule.
Je ne sais pas si c'est clair ce que j'ai écrit :/
Merci d'avance pour votre aide :)
Bonjour toute la communauté,
Je travaille actuellement sur un fichier excel qui fait des extractions de
requête d'une base de données Access.
Le problème ce que mon fichier contient plusieurs fois les mêmes
commandes. Je m'explique une commande pouvant avoir plusieurs articles,
celle-ci se répète autant de fois qu'il y'a d'article.
Pour éviter ceci je voulais savoir s'il y'avais un moyen de regrouper
tous les articles par rapport à la commande ou de les fusionner. C'est
à dire qu'en face de chaque commande les articles apparaissent dans une
cellule.
Je ne sais pas si c'est clair ce que j'ai écrit :/
Merci d'avance pour votre aide :)
Le vendredi 29 Avril 2016 à 11:54 par Lindt :Bonjour toute la communauté,
Je travaille actuellement sur un fichier excel qui fait des extractions de
requête d'une base de données Access.
Le problème ce que mon fichier contient plusieurs fois les mêmes
commandes. Je m'explique une commande pouvant avoir plusieurs articles,
celle-ci se répète autant de fois qu'il y'a d'article.
Pour éviter ceci je voulais savoir s'il y'avais un moyen de regrouper
tous les articles par rapport à la commande ou de les fusionner. C'est
à dire qu'en face de chaque commande les articles apparaissent dans une
cellule.
Je ne sais pas si c'est clair ce que j'ai écrit :/
Merci d'avance pour votre aide :)
Merci beaucoup Mitch;
Je voulais savoir si c'était possible de le faire avec 44 colonnes et un grand
nombre de ligne qui change à chaque fois?
Cordialement
Lindt
Le vendredi 29 Avril 2016 à 11:54 par Lindt :
Bonjour toute la communauté,
Je travaille actuellement sur un fichier excel qui fait des extractions de
requête d'une base de données Access.
Le problème ce que mon fichier contient plusieurs fois les mêmes
commandes. Je m'explique une commande pouvant avoir plusieurs articles,
celle-ci se répète autant de fois qu'il y'a d'article.
Pour éviter ceci je voulais savoir s'il y'avais un moyen de regrouper
tous les articles par rapport à la commande ou de les fusionner. C'est
à dire qu'en face de chaque commande les articles apparaissent dans une
cellule.
Je ne sais pas si c'est clair ce que j'ai écrit :/
Merci d'avance pour votre aide :)
Merci beaucoup Mitch;
Je voulais savoir si c'était possible de le faire avec 44 colonnes et un grand
nombre de ligne qui change à chaque fois?
Cordialement
Lindt
Le vendredi 29 Avril 2016 à 11:54 par Lindt :Bonjour toute la communauté,
Je travaille actuellement sur un fichier excel qui fait des extractions de
requête d'une base de données Access.
Le problème ce que mon fichier contient plusieurs fois les mêmes
commandes. Je m'explique une commande pouvant avoir plusieurs articles,
celle-ci se répète autant de fois qu'il y'a d'article.
Pour éviter ceci je voulais savoir s'il y'avais un moyen de regrouper
tous les articles par rapport à la commande ou de les fusionner. C'est
à dire qu'en face de chaque commande les articles apparaissent dans une
cellule.
Je ne sais pas si c'est clair ce que j'ai écrit :/
Merci d'avance pour votre aide :)
Merci beaucoup Mitch;
Je voulais savoir si c'était possible de le faire avec 44 colonnes et un grand
nombre de ligne qui change à chaque fois?
Cordialement
Lindt
Dans l'exposé de ta question, tu n'as pas spécifié que tu
voulais
éliminer les doublons!
Le même fichier avec légère modification afin
d'éviter les doublons.
http://www.cjoint.com/c/FEdk0sNIXnX
Dans l'exposé de ta question, tu n'as pas spécifié que tu
voulais
éliminer les doublons!
Le même fichier avec légère modification afin
d'éviter les doublons.
http://www.cjoint.com/c/FEdk0sNIXnX
Dans l'exposé de ta question, tu n'as pas spécifié que tu
voulais
éliminer les doublons!
Le même fichier avec légère modification afin
d'éviter les doublons.
http://www.cjoint.com/c/FEdk0sNIXnX
Comment modifier la macro, voici des explications.
Ne te laisse pas impressionner, c'est relativement simple...
A ) Le contenu de chacune des colonnes à traiter
3 traitements possibles pour chacune des colonnes
1- La colonne contient du texte que tu veux concaténer
2- La colonne des valeurs numériques que tu veux additionner
3- La colonne contient une valeur quelconque dont tu veux
dénombrer le nombre de cellules non vides de cette colonne
Dans la première boucle,
Do
'Si le contenu répond au critère 1 - concaténer du texte
'ColB est une variable représentant le contenu de la colonne B
'C.offset(,1)
'C représente une cellule de la colonne A où il y a une valeur
'en doublon dans cette colonne
'Le chiffre 1 dans le C.offset(,1) représente la cellule en
'rapport avec la colonne A
' la valeur 1 de C.Offset(, 1) = Colonne B
' la valeur 2 de C.Offset(, 1) = Colonne C
' la valeur 3 de C.Offset(, 1) = Colonne d
'...etc...
ColB = ColB & C.Offset(, 1).Value & Chr(10)
'cette section & Chr(10) permet d'insérer un retour à la
ligne
'afin que le texte s'écrive sur une autre ligne
'si le contenu de la colonne = des valeurs numériques à
additionner
'Dans mon exemple, on veut faire la somme des valeur monétaire
'ColC = le nom de la variable pour cette colonne
'Le C.Offset(, 2) signifie la deuxième colonne à droite de la
' colonne A
ColC = ColC + C.Offset(, 2).Value
'Si le contenu est à dénombrer
'Tu veux dénombrer seulement les cellules qui ne sont pas vides
If c.value <>"" then
'Cold est une variable
ColD = ColD + 1
End If
'Tu répètes cela selon le contenu de chacune des colonnes et
selon
'ce que tu veux obtenir comme résultat, 1 ou 2 ou 3.
La deuxième boucle de la procédure est pour remettre le contenu
de la
variable représentant la colonne dans la cellule et éliminer les
doublons dans le tableau
Do
'Afin de discriminer entre la première occurrence d'une valeur et
'les autres, c'est ce à quoi sert la variable T
'Lorsque T est égale à 0, c'est la première occurrence et
on remet
'alors la valeur de la variable dans la cellule de la bonne colonne
If T = 0 Then
T = T + 1
C.Offset(, 1).Value = ColB
C.Offset(, 2) = ColC
'La liste s'allonge pour chacune des colonnes de la ligne
C.offset(,3) = ColD
C.offset(,4) = ColE
'...etc... pour chacune des colonnes du tableau.
Set C = .FindNext(C)
Else
'quand la variable T est plus grande que 0, on doit alors
'supprimer la ligne pour éviter les doublons
Set G = C.Offset(-1)
C.EntireRow.Delete
Set C = .FindNext(G)
End if
Loop Until C.Address = Adr
La procédure suggérée contenu dans le classeur
'J'ai ajouté la référence suivante à partir du menu
'Outils / références / Microsoft scripting runtime
'--------------------------------------------------------
Sub Compilation()
Dim D As Dictionary, Elt As Variant, Adr As String, G As Range
Dim Suite As String, Rg As Range, C As Range, T As Long
Dim ColB, ColC
Set D = CreateObject("Scripting.dictionary")
Application.ScreenUpdating = False
Application.EnableEvents = False
'Identifier la totalité des cellules de la colonne A
With Worksheets("Feuil1")
Set Rg = .Range("A1:A" & .Range("A" &
.Rows.Count).End(xlUp).Row)
End With
'On place dans l'objet dictionnary seulement les valeurs qui sont au
'moins en double dans la colonne A afin de ne traiter que ces lignes...
For Each C In Rg
If C <> "" Then
If Application.CountIf(Rg, C.Value) > 1 Then
If Not D.Exists(C.Value) Then
D.Add C.Value, C.Row
End If
End If
End If
Next
'Une boucle pour chaque valeur en double ou plus trouvée
For Each Elt In D.Keys
With Rg
'recherche de la permière valeur en colonne A (rg)
Set C = .Find(Elt)
If Not C Is Nothing Then
'lorsque trouvé, identifier l'adresse de la première cellule
'afin d'arrêter la boucle suivante
Adr = C.Address
Do
'Dans ma colonne b (C.Offset(, 1).Value) des valeurs
' texte
'donc on doit concaténer
ColB = ColB & C.Offset(, 1).Value & Chr(10)
'En colonne C, on veut faire la somme des valeur
' monétaire
ColC = ColC + C.Offset(, 2).Value
'ainsi de suite pour les 40 colonnes selon que tu veux
'concaténer le contenu de la colonne, en faire la sommme
'ou encore dénombre le nombre d'unité.
'Trouver la cellule suivante de la colonne A qui
'correspond au critère
Set C = .FindNext(C)
'Condition pour sortir de la boucle
Loop Until C.Address = Adr
'Enlève de dernier retour à la ligne Chr(10)
'à adapter pour les autres lignes selon leur type de
'contenu
ColB = Left(ColB, Len(ColB) - 1)
'Aucun traitement pour la colonne C à faire
'ColD = ....
.Find C
'La boucle suivante va remettre dans chacune des
' colonnes
'la valeur qui devrait apparaître...
Do
If T = 0 Then
T = T + 1
C.Offset(, 1).Value = ColB
C.Offset(, 2) = ColC
'Ainsi de suite pour les autres colonnes
Set C = .FindNext(C)
Else
Set G = C.Offset(-1)
C.EntireRow.Delete
Set C = .FindNext(G)
End If
Loop Until C.Address = Adr
T = 0
'Remettre toutes les valeurs des variables soient à ""
'pour texte
'ou à 0 pour les valeur numériques pour traiter la
'valeur suivante.
ColB = "": ColC = 0
End If
End With
Next
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
'--------------------------------------------------------
Comment modifier la macro, voici des explications.
Ne te laisse pas impressionner, c'est relativement simple...
A ) Le contenu de chacune des colonnes à traiter
3 traitements possibles pour chacune des colonnes
1- La colonne contient du texte que tu veux concaténer
2- La colonne des valeurs numériques que tu veux additionner
3- La colonne contient une valeur quelconque dont tu veux
dénombrer le nombre de cellules non vides de cette colonne
Dans la première boucle,
Do
'Si le contenu répond au critère 1 - concaténer du texte
'ColB est une variable représentant le contenu de la colonne B
'C.offset(,1)
'C représente une cellule de la colonne A où il y a une valeur
'en doublon dans cette colonne
'Le chiffre 1 dans le C.offset(,1) représente la cellule en
'rapport avec la colonne A
' la valeur 1 de C.Offset(, 1) = Colonne B
' la valeur 2 de C.Offset(, 1) = Colonne C
' la valeur 3 de C.Offset(, 1) = Colonne d
'...etc...
ColB = ColB & C.Offset(, 1).Value & Chr(10)
'cette section & Chr(10) permet d'insérer un retour à la
ligne
'afin que le texte s'écrive sur une autre ligne
'si le contenu de la colonne = des valeurs numériques à
additionner
'Dans mon exemple, on veut faire la somme des valeur monétaire
'ColC = le nom de la variable pour cette colonne
'Le C.Offset(, 2) signifie la deuxième colonne à droite de la
' colonne A
ColC = ColC + C.Offset(, 2).Value
'Si le contenu est à dénombrer
'Tu veux dénombrer seulement les cellules qui ne sont pas vides
If c.value <>"" then
'Cold est une variable
ColD = ColD + 1
End If
'Tu répètes cela selon le contenu de chacune des colonnes et
selon
'ce que tu veux obtenir comme résultat, 1 ou 2 ou 3.
La deuxième boucle de la procédure est pour remettre le contenu
de la
variable représentant la colonne dans la cellule et éliminer les
doublons dans le tableau
Do
'Afin de discriminer entre la première occurrence d'une valeur et
'les autres, c'est ce à quoi sert la variable T
'Lorsque T est égale à 0, c'est la première occurrence et
on remet
'alors la valeur de la variable dans la cellule de la bonne colonne
If T = 0 Then
T = T + 1
C.Offset(, 1).Value = ColB
C.Offset(, 2) = ColC
'La liste s'allonge pour chacune des colonnes de la ligne
C.offset(,3) = ColD
C.offset(,4) = ColE
'...etc... pour chacune des colonnes du tableau.
Set C = .FindNext(C)
Else
'quand la variable T est plus grande que 0, on doit alors
'supprimer la ligne pour éviter les doublons
Set G = C.Offset(-1)
C.EntireRow.Delete
Set C = .FindNext(G)
End if
Loop Until C.Address = Adr
La procédure suggérée contenu dans le classeur
'J'ai ajouté la référence suivante à partir du menu
'Outils / références / Microsoft scripting runtime
'--------------------------------------------------------
Sub Compilation()
Dim D As Dictionary, Elt As Variant, Adr As String, G As Range
Dim Suite As String, Rg As Range, C As Range, T As Long
Dim ColB, ColC
Set D = CreateObject("Scripting.dictionary")
Application.ScreenUpdating = False
Application.EnableEvents = False
'Identifier la totalité des cellules de la colonne A
With Worksheets("Feuil1")
Set Rg = .Range("A1:A" & .Range("A" &
.Rows.Count).End(xlUp).Row)
End With
'On place dans l'objet dictionnary seulement les valeurs qui sont au
'moins en double dans la colonne A afin de ne traiter que ces lignes...
For Each C In Rg
If C <> "" Then
If Application.CountIf(Rg, C.Value) > 1 Then
If Not D.Exists(C.Value) Then
D.Add C.Value, C.Row
End If
End If
End If
Next
'Une boucle pour chaque valeur en double ou plus trouvée
For Each Elt In D.Keys
With Rg
'recherche de la permière valeur en colonne A (rg)
Set C = .Find(Elt)
If Not C Is Nothing Then
'lorsque trouvé, identifier l'adresse de la première cellule
'afin d'arrêter la boucle suivante
Adr = C.Address
Do
'Dans ma colonne b (C.Offset(, 1).Value) des valeurs
' texte
'donc on doit concaténer
ColB = ColB & C.Offset(, 1).Value & Chr(10)
'En colonne C, on veut faire la somme des valeur
' monétaire
ColC = ColC + C.Offset(, 2).Value
'ainsi de suite pour les 40 colonnes selon que tu veux
'concaténer le contenu de la colonne, en faire la sommme
'ou encore dénombre le nombre d'unité.
'Trouver la cellule suivante de la colonne A qui
'correspond au critère
Set C = .FindNext(C)
'Condition pour sortir de la boucle
Loop Until C.Address = Adr
'Enlève de dernier retour à la ligne Chr(10)
'à adapter pour les autres lignes selon leur type de
'contenu
ColB = Left(ColB, Len(ColB) - 1)
'Aucun traitement pour la colonne C à faire
'ColD = ....
.Find C
'La boucle suivante va remettre dans chacune des
' colonnes
'la valeur qui devrait apparaître...
Do
If T = 0 Then
T = T + 1
C.Offset(, 1).Value = ColB
C.Offset(, 2) = ColC
'Ainsi de suite pour les autres colonnes
Set C = .FindNext(C)
Else
Set G = C.Offset(-1)
C.EntireRow.Delete
Set C = .FindNext(G)
End If
Loop Until C.Address = Adr
T = 0
'Remettre toutes les valeurs des variables soient à ""
'pour texte
'ou à 0 pour les valeur numériques pour traiter la
'valeur suivante.
ColB = "": ColC = 0
End If
End With
Next
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
'--------------------------------------------------------
Comment modifier la macro, voici des explications.
Ne te laisse pas impressionner, c'est relativement simple...
A ) Le contenu de chacune des colonnes à traiter
3 traitements possibles pour chacune des colonnes
1- La colonne contient du texte que tu veux concaténer
2- La colonne des valeurs numériques que tu veux additionner
3- La colonne contient une valeur quelconque dont tu veux
dénombrer le nombre de cellules non vides de cette colonne
Dans la première boucle,
Do
'Si le contenu répond au critère 1 - concaténer du texte
'ColB est une variable représentant le contenu de la colonne B
'C.offset(,1)
'C représente une cellule de la colonne A où il y a une valeur
'en doublon dans cette colonne
'Le chiffre 1 dans le C.offset(,1) représente la cellule en
'rapport avec la colonne A
' la valeur 1 de C.Offset(, 1) = Colonne B
' la valeur 2 de C.Offset(, 1) = Colonne C
' la valeur 3 de C.Offset(, 1) = Colonne d
'...etc...
ColB = ColB & C.Offset(, 1).Value & Chr(10)
'cette section & Chr(10) permet d'insérer un retour à la
ligne
'afin que le texte s'écrive sur une autre ligne
'si le contenu de la colonne = des valeurs numériques à
additionner
'Dans mon exemple, on veut faire la somme des valeur monétaire
'ColC = le nom de la variable pour cette colonne
'Le C.Offset(, 2) signifie la deuxième colonne à droite de la
' colonne A
ColC = ColC + C.Offset(, 2).Value
'Si le contenu est à dénombrer
'Tu veux dénombrer seulement les cellules qui ne sont pas vides
If c.value <>"" then
'Cold est une variable
ColD = ColD + 1
End If
'Tu répètes cela selon le contenu de chacune des colonnes et
selon
'ce que tu veux obtenir comme résultat, 1 ou 2 ou 3.
La deuxième boucle de la procédure est pour remettre le contenu
de la
variable représentant la colonne dans la cellule et éliminer les
doublons dans le tableau
Do
'Afin de discriminer entre la première occurrence d'une valeur et
'les autres, c'est ce à quoi sert la variable T
'Lorsque T est égale à 0, c'est la première occurrence et
on remet
'alors la valeur de la variable dans la cellule de la bonne colonne
If T = 0 Then
T = T + 1
C.Offset(, 1).Value = ColB
C.Offset(, 2) = ColC
'La liste s'allonge pour chacune des colonnes de la ligne
C.offset(,3) = ColD
C.offset(,4) = ColE
'...etc... pour chacune des colonnes du tableau.
Set C = .FindNext(C)
Else
'quand la variable T est plus grande que 0, on doit alors
'supprimer la ligne pour éviter les doublons
Set G = C.Offset(-1)
C.EntireRow.Delete
Set C = .FindNext(G)
End if
Loop Until C.Address = Adr
La procédure suggérée contenu dans le classeur
'J'ai ajouté la référence suivante à partir du menu
'Outils / références / Microsoft scripting runtime
'--------------------------------------------------------
Sub Compilation()
Dim D As Dictionary, Elt As Variant, Adr As String, G As Range
Dim Suite As String, Rg As Range, C As Range, T As Long
Dim ColB, ColC
Set D = CreateObject("Scripting.dictionary")
Application.ScreenUpdating = False
Application.EnableEvents = False
'Identifier la totalité des cellules de la colonne A
With Worksheets("Feuil1")
Set Rg = .Range("A1:A" & .Range("A" &
.Rows.Count).End(xlUp).Row)
End With
'On place dans l'objet dictionnary seulement les valeurs qui sont au
'moins en double dans la colonne A afin de ne traiter que ces lignes...
For Each C In Rg
If C <> "" Then
If Application.CountIf(Rg, C.Value) > 1 Then
If Not D.Exists(C.Value) Then
D.Add C.Value, C.Row
End If
End If
End If
Next
'Une boucle pour chaque valeur en double ou plus trouvée
For Each Elt In D.Keys
With Rg
'recherche de la permière valeur en colonne A (rg)
Set C = .Find(Elt)
If Not C Is Nothing Then
'lorsque trouvé, identifier l'adresse de la première cellule
'afin d'arrêter la boucle suivante
Adr = C.Address
Do
'Dans ma colonne b (C.Offset(, 1).Value) des valeurs
' texte
'donc on doit concaténer
ColB = ColB & C.Offset(, 1).Value & Chr(10)
'En colonne C, on veut faire la somme des valeur
' monétaire
ColC = ColC + C.Offset(, 2).Value
'ainsi de suite pour les 40 colonnes selon que tu veux
'concaténer le contenu de la colonne, en faire la sommme
'ou encore dénombre le nombre d'unité.
'Trouver la cellule suivante de la colonne A qui
'correspond au critère
Set C = .FindNext(C)
'Condition pour sortir de la boucle
Loop Until C.Address = Adr
'Enlève de dernier retour à la ligne Chr(10)
'à adapter pour les autres lignes selon leur type de
'contenu
ColB = Left(ColB, Len(ColB) - 1)
'Aucun traitement pour la colonne C à faire
'ColD = ....
.Find C
'La boucle suivante va remettre dans chacune des
' colonnes
'la valeur qui devrait apparaître...
Do
If T = 0 Then
T = T + 1
C.Offset(, 1).Value = ColB
C.Offset(, 2) = ColC
'Ainsi de suite pour les autres colonnes
Set C = .FindNext(C)
Else
Set G = C.Offset(-1)
C.EntireRow.Delete
Set C = .FindNext(G)
End If
Loop Until C.Address = Adr
T = 0
'Remettre toutes les valeurs des variables soient à ""
'pour texte
'ou à 0 pour les valeur numériques pour traiter la
'valeur suivante.
ColB = "": ColC = 0
End If
End With
Next
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
'--------------------------------------------------------