Aide Macro Excel fusion doublons
Dernière réponse : dans Programmation
Bonjour,
je dois réaliser une base de données sous Excel et je voudrais supprimer des doublons.
Pour faire simple j'ai quelquechose du genre:
Date / Heure / A / B / C / D
12/10/1997 / 12:00 / 1 / / / 10
12/10/1997 / 12:00 / / 5 / /
12/10/1997 / 15:30 / / 1 / 2 / 10
J'ai donc adapté une macro qui avait été proposée il y a quelques temps sur le forum pour un problème de ce type.
J'ai ainsi pu prendre compte le fait que dans mon cas, il faille comparer à la fois la date et l'heure avant de fusionner les lignes.
Mais ce qui me gène c'est que lorsque deux cellules sont vides au départ pour une même date (ici C2 et C3), j'obtiens au final la valeur 0 (vu que la macro utilise une somme), alors que je voudrais conserver une cellule vide dans ce cas (la valeur 0 a en effet une signification dans ma base de données, qui est différente de l'absence de valeur)...
Quelqu'un pourrait m'aider dans la syntaxe à utiliser pour cela?
Si je n'ai pas été assez clair, n'hésitez pas à demander des précisions!
Merci par avance aux âmes charitables qui pourraient au moins me mettre sur la piste de la solution.
je dois réaliser une base de données sous Excel et je voudrais supprimer des doublons.
Pour faire simple j'ai quelquechose du genre:
Date / Heure / A / B / C / D
12/10/1997 / 12:00 / 1 / / / 10
12/10/1997 / 12:00 / / 5 / /
12/10/1997 / 15:30 / / 1 / 2 / 10
J'ai donc adapté une macro qui avait été proposée il y a quelques temps sur le forum pour un problème de ce type.
J'ai ainsi pu prendre compte le fait que dans mon cas, il faille comparer à la fois la date et l'heure avant de fusionner les lignes.
Mais ce qui me gène c'est que lorsque deux cellules sont vides au départ pour une même date (ici C2 et C3), j'obtiens au final la valeur 0 (vu que la macro utilise une somme), alors que je voudrais conserver une cellule vide dans ce cas (la valeur 0 a en effet une signification dans ma base de données, qui est différente de l'absence de valeur)...
Quelqu'un pourrait m'aider dans la syntaxe à utiliser pour cela?
Si je n'ai pas été assez clair, n'hésitez pas à demander des précisions!
Merci par avance aux âmes charitables qui pourraient au moins me mettre sur la piste de la solution.
Autres pages sur : aide macro excel fusion doublons
Lassé par la pub ? Créez un compte
Meilleure solution
Ah, voilà qui est mieux !
Je déclare les variables, je retire les parenthèses inutiles (C'est pas du C, c'est du VB), je vérifie si l'une des deux cellules est non vide, et si c'est le cas, j'additionne.
Ça donne :
Comment Diable n'y as-tu pas pensé toi-même ?
-------------
Tips: Déclare systématiquement tes variables, et renseigne-toi sur l'Option Explicit.
Je déclare les variables, je retire les parenthèses inutiles (C'est pas du C, c'est du VB), je vérifie si l'une des deux cellules est non vide, et si c'est le cas, j'additionne.
Ça donne :
Dim derli As Long Dim i As Long Dim j As Long derli = Columns(1).Find("*", , , , , xlPrevious).Row For i = derli To 2 Step -1 If Cells(i, 1) = Cells(i - 1, 1) And Cells(i, 2) = Cells(i - 1, 2) Then For j = 3 To 21 If Cells(i - 1, j) <> "" Or Cells(i, j) <> "" Then Cells(i - 1, j) = Cells(i - 1, j) + Cells(i, j) End If Next Range(Cells(i, 1), Cells(i, 21)).Delete Shift:=xlUp End If Next
Comment Diable n'y as-tu pas pensé toi-même ?
-------------
Tips: Déclare systématiquement tes variables, et renseigne-toi sur l'Option Explicit.
Bonjour,
voilà le code que j'ai adapté.
En fait en y réfléchissant, j'aimerai avoir autre chose qu'une addition de deux lignes pour obtenir leur fusion. Car je pense que lorsque deux lignes font doublons et sont fusionnées au moyen d'une addition, on obtiendra tout le temps un 0 lorsque deux cellules additionnées étaient vides au départ... Mais je ne vois pas comment faire n'étant que débutant en macro...
voilà le code que j'ai adapté.
Sub Test()
'Recherche de la dernière ligne de la colonne A
derli = Columns(1).Find("*", , , , , xlPrevious).Row
' boucle qui commence à la fin à cause des suppression de cellules
For i = derli To 2 Step -1
'Si la valeur de la cellule au dessus est égale à la valeur de la cellule (colonne A) alors
If (Cells(i, 1) = Cells(i - 1, 1) And Cells(i, 2) = Cells(i - 1, 2)) Then
'on additionne les deux montants dans la cellule "au-dessus"
Cells(i - 1, 3) = Cells(i - 1, 3) + Cells(i, 3)
Cells(i - 1, 4) = Cells(i - 1, 4) + Cells(i, 4)
Cells(i - 1, 5) = Cells(i - 1, 5) + Cells(i, 5)
Cells(i - 1, 6) = Cells(i - 1, 6) + Cells(i, 6)
Cells(i - 1, 7) = Cells(i - 1, 7) + Cells(i, 7)
Cells(i - 1, 8) = Cells(i - 1, 8) + Cells(i, 8)
Cells(i - 1, 9) = Cells(i - 1, 9) + Cells(i, 9)
Cells(i - 1, 10) = Cells(i - 1, 10) + Cells(i, 10)
Cells(i - 1, 11) = Cells(i - 1, 11) + Cells(i, 11)
Cells(i - 1, 12) = Cells(i - 1, 12) + Cells(i, 12)
Cells(i - 1, 13) = Cells(i - 1, 13) + Cells(i, 13)
Cells(i - 1, 14) = Cells(i - 1, 14) + Cells(i, 14)
Cells(i - 1, 15) = Cells(i - 1, 15) + Cells(i, 15)
Cells(i - 1, 16) = Cells(i - 1, 16) + Cells(i, 16)
Cells(i - 1, 17) = Cells(i - 1, 17) + Cells(i, 17)
Cells(i - 1, 18) = Cells(i - 1, 18) + Cells(i, 18)
Cells(i - 1, 19) = Cells(i - 1, 19) + Cells(i, 19)
Cells(i - 1, 20) = Cells(i - 1, 20) + Cells(i, 20)
Cells(i - 1, 21) = Cells(i - 1, 21) + Cells(i, 21)
'on supprime les cellules
Range(Cells(i, 1), Cells(i, 21)).Delete Shift:=xlUp
End If
Next
End Sub
En fait en y réfléchissant, j'aimerai avoir autre chose qu'une addition de deux lignes pour obtenir leur fusion. Car je pense que lorsque deux lignes font doublons et sont fusionnées au moyen d'une addition, on obtiendra tout le temps un 0 lorsque deux cellules additionnées étaient vides au départ... Mais je ne vois pas comment faire n'étant que débutant en macro...
Euh....
Il y a longtemps que tu programmes ?
Parce que 19 lignes identiques à un chiffre près, ça mériterait une petite boucle !
D'autant que je serais tenté d'ajouter 2 tests pour vérifier le contenu de tes cellules avant de faire l'addition. Si on garde ce code, ça fait 38 lignes de plus
Bon, tu me refais ça, et je te montre comment faire
---------------------
Tiens, tu as utilisé Find(). Comme j'ai l'habitude de faire autrement, je n'y pense jamais. Grâce à toi, j'ai ajouté cette façon de faire aux Trucs et astuces.
Il y a longtemps que tu programmes ?
Parce que 19 lignes identiques à un chiffre près, ça mériterait une petite boucle !
D'autant que je serais tenté d'ajouter 2 tests pour vérifier le contenu de tes cellules avant de faire l'addition. Si on garde ce code, ça fait 38 lignes de plus
Bon, tu me refais ça, et je te montre comment faire
---------------------
Tiens, tu as utilisé Find(). Comme j'ai l'habitude de faire autrement, je n'y pense jamais. Grâce à toi, j'ai ajouté cette façon de faire aux Trucs et astuces.
bon je pense que comme ça, c'est mieux effectivement
Désolé pour la version précédente du code, j'imagine que ça doit choquer des codeurs avertis!
Donc maintenant si tu as une solution, tu me sauves!
Sub Test()
'Recherche de la dernière ligne de la colonne A
derli = Columns(1).Find("*", , , , , xlPrevious).Row
' boucle qui commence à la fin à cause des suppression de cellules
For i = derli To 2 Step -1
'Si la valeur de la cellule au dessus est égale à la valeur de la cellule (colonne A) alors
If (Cells(i, 1) = Cells(i - 1, 1) And Cells(i, 2) = Cells(i - 1, 2)) Then
'on additionne les deux montants dans la cellule "au-dessus"
For j = 3 To 21
Cells(i - 1, j) = Cells(i - 1, j) + Cells(i, j)
Next
'on supprime les cellules
Range(Cells(i, 1), Cells(i, 21)).Delete Shift:=xlUp
End If
Next
End Sub
Désolé pour la version précédente du code, j'imagine que ça doit choquer des codeurs avertis!
Donc maintenant si tu as une solution, tu me sauves!
merci beaucoup pour le coup de main.
Si je comprends bien, dans le cas où la condition que tu as rajouté pour vérifier si l'une des deux cellules est vide n'est pas vérifiée, le code fait juste du copier/coller d'une ligne à l'autre, c'est ça? Je croyais en fait qu'il fallait lui donner un truc à faire du genre un Else...
EN tout cas je vais m'attacher à déclarer mes variables. J'avoue quand même qu'en VB je ne connais pas la syntaxe, maisje vais m'y pencher sans faute! Et je vais suivre ton conseil concernant l'Option Explicit.
Merci encore!
Si je comprends bien, dans le cas où la condition que tu as rajouté pour vérifier si l'une des deux cellules est vide n'est pas vérifiée, le code fait juste du copier/coller d'une ligne à l'autre, c'est ça? Je croyais en fait qu'il fallait lui donner un truc à faire du genre un Else...
EN tout cas je vais m'attacher à déclarer mes variables. J'avoue quand même qu'en VB je ne connais pas la syntaxe, maisje vais m'y pencher sans faute! Et je vais suivre ton conseil concernant l'Option Explicit.
Merci encore!
Lassé par la pub ? Créez un compte
- Contenus similaires :
- ForumMacro avec excel
- ForumMacro excel aide en ligne
- ForumExcel macro doublons
- articlesFusion word depuis une macro excel
- ForumLangage macro excel aide
- ForumMacro excel vba doublon fusion
- ForumMacro excel 2007 regrouper doublons
- ForumExcel macro aide
- ForumAide macro vba
- ForumMacro fusion feuilles excel
- Voir plus
