Realiser un regroupement de données en excel
Fermé
manubeni
Messages postés
33
Date d'inscription
lundi 26 mai 2014
Statut
Membre
Dernière intervention
6 juin 2020
-
29 mai 2014 à 16:37
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 - 21 juin 2014 à 16:44
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 - 21 juin 2014 à 16:44
A voir également:
- Realiser un regroupement de données en excel
- Liste déroulante excel - Guide
- Mise en forme conditionnelle excel - Guide
- Si et excel - Guide
- Aller à la ligne excel - Guide
- Word et excel gratuit - Guide
15 réponses
via55
Messages postés
14495
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
7 novembre 2024
2 735
29 mai 2014 à 17:10
29 mai 2014 à 17:10
Bonjour,
=SOMME.SI(A:A;"jean";B:B)
te donneras la somme de la colonne B quand dans la colonne A il y a Jean
Et pour faire la somme de plusieurs feuilles :
=SOMME.SI(Feuil1!A:A;"jean";Feuil1!B:B) + SOMME.SI(Feuil2!A:A;"jean";Feuil2!B:B) etc
Cdlmnt
=SOMME.SI(A:A;"jean";B:B)
te donneras la somme de la colonne B quand dans la colonne A il y a Jean
Et pour faire la somme de plusieurs feuilles :
=SOMME.SI(Feuil1!A:A;"jean";Feuil1!B:B) + SOMME.SI(Feuil2!A:A;"jean";Feuil2!B:B) etc
Cdlmnt
manubeni
Messages postés
33
Date d'inscription
lundi 26 mai 2014
Statut
Membre
Dernière intervention
6 juin 2020
29 mai 2014 à 18:30
29 mai 2014 à 18:30
merci
en fait le plus grd probleme est que les noms sont beaucoup sur chaque feuille de calcul excel (parfois plus de 1000 noms different sur une seule feuille san compter les repetition)
n' y a t-il pas un moyen en excel pour récuperer tous les noms des personnes et associer à chaque nom la somme de ses depot et retrait ?
merci
en fait le plus grd probleme est que les noms sont beaucoup sur chaque feuille de calcul excel (parfois plus de 1000 noms different sur une seule feuille san compter les repetition)
n' y a t-il pas un moyen en excel pour récuperer tous les noms des personnes et associer à chaque nom la somme de ses depot et retrait ?
merci
via55
Messages postés
14495
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
7 novembre 2024
2 735
29 mai 2014 à 18:38
29 mai 2014 à 18:38
Là faudra sans doute une macro en VBA !
Il y a t 'il une feuille où tous les noms différents sont présents ?
Combien y a t il de feuilles ?
Peut on regrouper toutes les feuilles sur une seule ?
Il y a t 'il une feuille où tous les noms différents sont présents ?
Combien y a t il de feuilles ?
Peut on regrouper toutes les feuilles sur une seule ?
manubeni
Messages postés
33
Date d'inscription
lundi 26 mai 2014
Statut
Membre
Dernière intervention
6 juin 2020
29 mai 2014 à 19:01
29 mai 2014 à 19:01
non il y a pas de feuille ou ts les nom differents sont present
il y en a 18 feulle et les feuilles st realiser par differente personnes donc on doit les traiter differement
je veux traiter les feuilles separemment dabord et après je vais les regrouper.
il y en a 18 feulle et les feuilles st realiser par differente personnes donc on doit les traiter differement
je veux traiter les feuilles separemment dabord et après je vais les regrouper.
via55
Messages postés
14495
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
7 novembre 2024
2 735
29 mai 2014 à 19:29
29 mai 2014 à 19:29
Un exemple de macro sur 2 feuilles de données et une feuille RECAP
A adapter à tes besoins (Alt F11 pour ouvrir l'éditeur et voir le code)
https://www.cjoint.com/?0EDtCNAhJmF
Cdlmnt
A adapter à tes besoins (Alt F11 pour ouvrir l'éditeur et voir le code)
https://www.cjoint.com/?0EDtCNAhJmF
Cdlmnt
manubeni
Messages postés
33
Date d'inscription
lundi 26 mai 2014
Statut
Membre
Dernière intervention
6 juin 2020
29 mai 2014 à 19:53
29 mai 2014 à 19:53
merci bcp pour votre aide.
svp jai pu accéder à votre code seulement que je ne sais pas grd chose sur les macro et la programmation en excel
svp donnez moi quelque directive pour que je puisse adapter le code à mon besoin
svp. merci
svp jai pu accéder à votre code seulement que je ne sais pas grd chose sur les macro et la programmation en excel
svp donnez moi quelque directive pour que je puisse adapter le code à mon besoin
svp. merci
via55
Messages postés
14495
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
7 novembre 2024
2 735
29 mai 2014 à 20:46
29 mai 2014 à 20:46
Il y a très peu de chose à changer :
1° la feuille récapitulative doit être la 1ere dans les onglets en bas, donnes lui le nom que tu veux et dans la macro changes tous les sheets("RECAP") en Sheets(1)
2° les autres feuilles avec les données et n'importe quesl noms
3° Dans plusieurs lignes de la macro les 3 colonnes sont indiquées par leurs lettres, dans mon exemple les noms sont en colonne A les depots en colonne B et les retraits en colonne C,
si ce sont d'autres colonnes dans ton fichier il suffit de changer les lettres dans la macro à chaque endroit , par exemple la ligne
resultat = Application.VLookup(nom, Sheets(1).Range("A2:A" & DLR), 1, False) deviendra
resultat = Application.VLookup(nom, Sheets(1).Range("B2:B" & DLR), 1, False) si chez toi les noms seront dans la colonne B etc
C'est tout, ce que font les lignes dans la macro sont expliqués dans les commentaires en vert
Pour inserer la macro tu ouvres l'éditeur (ALT F11) , Insertion Module et tu copies ma macro que tu colles dans la fenetre blanche de droite; ensuite tu procèdes au modifs necessaires avant de refermer l'éditeur
Pour lancer la macro, pas besoin d'un bouton comme j'avais mis dans l'exemple, tu vas dans l'onglet Developpeur, Macros tu choisis la macro recap et Executer
(Si l'onglet Developpeur n'est pas présnet dans ton ruban tu vas en haut à gauche Bouton Excel Options Excel et tu coches la case Afficher l'onglet Developpeur ..
Bonne application
Si tu n'y arrives pas post ton fichier anonymé (tu remplaces les noms) et allégé (20 lignes suffisent) sur cjoint.com et indiques ici le lien fourni, je regarderai ça
Cdlmnt
1° la feuille récapitulative doit être la 1ere dans les onglets en bas, donnes lui le nom que tu veux et dans la macro changes tous les sheets("RECAP") en Sheets(1)
2° les autres feuilles avec les données et n'importe quesl noms
3° Dans plusieurs lignes de la macro les 3 colonnes sont indiquées par leurs lettres, dans mon exemple les noms sont en colonne A les depots en colonne B et les retraits en colonne C,
si ce sont d'autres colonnes dans ton fichier il suffit de changer les lettres dans la macro à chaque endroit , par exemple la ligne
resultat = Application.VLookup(nom, Sheets(1).Range("A2:A" & DLR), 1, False) deviendra
resultat = Application.VLookup(nom, Sheets(1).Range("B2:B" & DLR), 1, False) si chez toi les noms seront dans la colonne B etc
C'est tout, ce que font les lignes dans la macro sont expliqués dans les commentaires en vert
Pour inserer la macro tu ouvres l'éditeur (ALT F11) , Insertion Module et tu copies ma macro que tu colles dans la fenetre blanche de droite; ensuite tu procèdes au modifs necessaires avant de refermer l'éditeur
Pour lancer la macro, pas besoin d'un bouton comme j'avais mis dans l'exemple, tu vas dans l'onglet Developpeur, Macros tu choisis la macro recap et Executer
(Si l'onglet Developpeur n'est pas présnet dans ton ruban tu vas en haut à gauche Bouton Excel Options Excel et tu coches la case Afficher l'onglet Developpeur ..
Bonne application
Si tu n'y arrives pas post ton fichier anonymé (tu remplaces les noms) et allégé (20 lignes suffisent) sur cjoint.com et indiques ici le lien fourni, je regarderai ça
Cdlmnt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
manubeni
Messages postés
33
Date d'inscription
lundi 26 mai 2014
Statut
Membre
Dernière intervention
6 juin 2020
30 mai 2014 à 15:45
30 mai 2014 à 15:45
bjr
jai essayé de faire les correction. mais les resultats ne sont pas bons.
chez moi la feuille RECAP a la meme architecture que la votre.
mais sur les autres feuilles le "NOM & PRENOMS" est dans la colonne D, le "DEPOT" dans la colonne F et "RETRAIT" dans la colonne G
voici mon code:
Sub recap()
'desactive rafraissement écran
Application.ScreenUpdating = False
' boucle sur les feuilles depuis la 2eme jusqu'à la dernière
For N = 2 To Sheets.Count
'selectionne la feuille
Sheets(N).Select
' dernière ligne non vide de la feuille
DL = Range("A" & Rows.Count).End(xlUp).Row
' boucle de la 2eme ligne à la dernière non vide de la feuille
For x = 2 To DL
' récup le nom en A
nom = Sheets(N).Range("D" & x).Value
' derniere ligne non vide de la feuille RECAP
DLR = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
' recherche du nom dans RECAP
resultat = Application.VLookup(nom, Sheets(1).Range("A2:A" & DLR), 1, False)
' si non trouvé la ligne où écrire sera la 1ere après la derniere non vide
'sinon on recherche en quel ligne est le nom dans la colonne A de RECAP
If (IsError(resultat)) Then ligne = DLR + 1 Else ligne = Application.WorksheetFunction.Match(nom, Sheets(1).Range("A:A"), False)
'Inscription dans RECAP du nom en colonne Aet addition des montants en colonne B et C
With Sheets(1)
.Range("A" & ligne) = nom
.Range("B" & ligne) = .Range("B" & ligne).Value + Sheets(N).Range("B" & x)
.Range("C" & ligne) = .Range("C" & ligne).Value + Sheets(N).Range("C" & x)
End With
Next x
Next N
Sheets("1").Select
Application.ScreenUpdating = True
End Sub
aussi la compilation met une erreur que voici: erreur de type 13. incompatibilité de type
merci pour votre aide
jai essayé de faire les correction. mais les resultats ne sont pas bons.
chez moi la feuille RECAP a la meme architecture que la votre.
mais sur les autres feuilles le "NOM & PRENOMS" est dans la colonne D, le "DEPOT" dans la colonne F et "RETRAIT" dans la colonne G
voici mon code:
Sub recap()
'desactive rafraissement écran
Application.ScreenUpdating = False
' boucle sur les feuilles depuis la 2eme jusqu'à la dernière
For N = 2 To Sheets.Count
'selectionne la feuille
Sheets(N).Select
' dernière ligne non vide de la feuille
DL = Range("A" & Rows.Count).End(xlUp).Row
' boucle de la 2eme ligne à la dernière non vide de la feuille
For x = 2 To DL
' récup le nom en A
nom = Sheets(N).Range("D" & x).Value
' derniere ligne non vide de la feuille RECAP
DLR = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
' recherche du nom dans RECAP
resultat = Application.VLookup(nom, Sheets(1).Range("A2:A" & DLR), 1, False)
' si non trouvé la ligne où écrire sera la 1ere après la derniere non vide
'sinon on recherche en quel ligne est le nom dans la colonne A de RECAP
If (IsError(resultat)) Then ligne = DLR + 1 Else ligne = Application.WorksheetFunction.Match(nom, Sheets(1).Range("A:A"), False)
'Inscription dans RECAP du nom en colonne Aet addition des montants en colonne B et C
With Sheets(1)
.Range("A" & ligne) = nom
.Range("B" & ligne) = .Range("B" & ligne).Value + Sheets(N).Range("B" & x)
.Range("C" & ligne) = .Range("C" & ligne).Value + Sheets(N).Range("C" & x)
End With
Next x
Next N
Sheets("1").Select
Application.ScreenUpdating = True
End Sub
aussi la compilation met une erreur que voici: erreur de type 13. incompatibilité de type
merci pour votre aide
via55
Messages postés
14495
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
7 novembre 2024
2 735
30 mai 2014 à 15:54
30 mai 2014 à 15:54
Sub recap()
'desactive rafraissement écran
Application.ScreenUpdating = False
' boucle sur les feuilles depuis la 2eme jusqu'à la dernière
For N = 2 To Sheets.Count
'selectionne la feuille
Sheets(N).Select
' dernière ligne non vide de la feuille
DL = Range("D" & Rows.Count).End(xlUp).Row
' boucle de la 2eme ligne à la dernière non vide de la feuille
For x = 2 To DL
' récup le nom en D
nom = Sheets(N).Range("D" & x).Value
' derniere ligne non vide de la feuille RECAP
DLR = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
' recherche du nom dans RECAP
resultat = Application.VLookup(nom, Sheets(1).Range("A2:A" & DLR), 1, False)
' si non trouvé la ligne où écrire sera la 1ere après la derniere non vide
'sinon on recherche en quel ligne est le nom dans la colonne A de RECAP
If (IsError(resultat)) Then ligne = DLR + 1 Else ligne = Application.WorksheetFunction.Match(nom, Sheets(1).Range("A:A"), False)
'Inscription dans RECAP du nom en colonne Aet addition des montants en colonne B et C
With Sheets(1)
.Range("A" & ligne) = nom
.Range("B" & ligne) = .Range("B" & ligne).Value + Sheets(N).Range("F" & x)
.Range("C" & ligne) = .Range("C" & ligne).Value + Sheets(N).Range("G" & x)
End With
Next x
Next N
Sheets(1).Select
Application.ScreenUpdating = True
End sub
Lignes en gras modifiées pour correspondre à ce que tu me dis de ton fichier
A tester
Cdlmnt
'desactive rafraissement écran
Application.ScreenUpdating = False
' boucle sur les feuilles depuis la 2eme jusqu'à la dernière
For N = 2 To Sheets.Count
'selectionne la feuille
Sheets(N).Select
' dernière ligne non vide de la feuille
DL = Range("D" & Rows.Count).End(xlUp).Row
' boucle de la 2eme ligne à la dernière non vide de la feuille
For x = 2 To DL
' récup le nom en D
nom = Sheets(N).Range("D" & x).Value
' derniere ligne non vide de la feuille RECAP
DLR = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
' recherche du nom dans RECAP
resultat = Application.VLookup(nom, Sheets(1).Range("A2:A" & DLR), 1, False)
' si non trouvé la ligne où écrire sera la 1ere après la derniere non vide
'sinon on recherche en quel ligne est le nom dans la colonne A de RECAP
If (IsError(resultat)) Then ligne = DLR + 1 Else ligne = Application.WorksheetFunction.Match(nom, Sheets(1).Range("A:A"), False)
'Inscription dans RECAP du nom en colonne Aet addition des montants en colonne B et C
With Sheets(1)
.Range("A" & ligne) = nom
.Range("B" & ligne) = .Range("B" & ligne).Value + Sheets(N).Range("F" & x)
.Range("C" & ligne) = .Range("C" & ligne).Value + Sheets(N).Range("G" & x)
End With
Next x
Next N
Sheets(1).Select
Application.ScreenUpdating = True
End sub
Lignes en gras modifiées pour correspondre à ce que tu me dis de ton fichier
A tester
Cdlmnt
manubeni
Messages postés
33
Date d'inscription
lundi 26 mai 2014
Statut
Membre
Dernière intervention
6 juin 2020
30 mai 2014 à 17:57
30 mai 2014 à 17:57
merci bcp pour votre aide
svp jaai fais les modifications necessaires en gras. mais quand je compile je constate 2 erreurs.
la 1ere est ceci : incompatibilité de type
la seconde est que sur les données de la feuille RECAP le montant devant certains nom ne verifie pas le montant quand on fait la compilation sur les autres feuilles.
est c que vous une idée de comment procéder pour y arriver
voici mon code:
Sub recap()
'desactive rafraissement écran
Application.ScreenUpdating = False
' boucle sur les feuilles depuis la 2eme jusqu'à la dernière
For N = 2 To Sheets.Count
'selectionne la feuille
Sheets(N).Select
' dernière ligne non vide de la feuille
DL = Range("D" & Rows.Count).End(xlUp).Row
' boucle de la 2eme ligne à la dernière non vide de la feuille
For x = 2 To DL
' récup le nom en D
nom = Sheets(N).Range("D" & x).Value
' derniere ligne non vide de la feuille RECAP
DLR = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
' recherche du nom dans RECAP
resultat = Application.VLookup(nom, Sheets(1).Range("A2:A" & DLR), 1, False)
' si non trouvé la ligne où écrire sera la 1ere après la derniere non vide
'sinon on recherche en quel ligne est le nom dans la colonne A de RECAP
If (IsError(resultat)) Then ligne = DLR + 1 Else ligne = Application.WorksheetFunction.Match(nom, Sheets(1).Range("A:A"), False)
'Inscription dans RECAP du nom en colonne Aet addition des montants en colonne B et C
With Sheets(1)
.Range("A" & ligne) = nom
.Range("B" & ligne) = .Range("B" & ligne).Value + Sheets(N).Range("F" & x)
.Range("C" & ligne) = .Range("C" & ligne).Value + Sheets(N).Range("G" & x)
End With
Next x
Next N
Sheets(1).Select
Application.ScreenUpdating = True
End Sub
svp jaai fais les modifications necessaires en gras. mais quand je compile je constate 2 erreurs.
la 1ere est ceci : incompatibilité de type
la seconde est que sur les données de la feuille RECAP le montant devant certains nom ne verifie pas le montant quand on fait la compilation sur les autres feuilles.
est c que vous une idée de comment procéder pour y arriver
voici mon code:
Sub recap()
'desactive rafraissement écran
Application.ScreenUpdating = False
' boucle sur les feuilles depuis la 2eme jusqu'à la dernière
For N = 2 To Sheets.Count
'selectionne la feuille
Sheets(N).Select
' dernière ligne non vide de la feuille
DL = Range("D" & Rows.Count).End(xlUp).Row
' boucle de la 2eme ligne à la dernière non vide de la feuille
For x = 2 To DL
' récup le nom en D
nom = Sheets(N).Range("D" & x).Value
' derniere ligne non vide de la feuille RECAP
DLR = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
' recherche du nom dans RECAP
resultat = Application.VLookup(nom, Sheets(1).Range("A2:A" & DLR), 1, False)
' si non trouvé la ligne où écrire sera la 1ere après la derniere non vide
'sinon on recherche en quel ligne est le nom dans la colonne A de RECAP
If (IsError(resultat)) Then ligne = DLR + 1 Else ligne = Application.WorksheetFunction.Match(nom, Sheets(1).Range("A:A"), False)
'Inscription dans RECAP du nom en colonne Aet addition des montants en colonne B et C
With Sheets(1)
.Range("A" & ligne) = nom
.Range("B" & ligne) = .Range("B" & ligne).Value + Sheets(N).Range("F" & x)
.Range("C" & ligne) = .Range("C" & ligne).Value + Sheets(N).Range("G" & x)
End With
Next x
Next N
Sheets(1).Select
Application.ScreenUpdating = True
End Sub
via55
Messages postés
14495
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
7 novembre 2024
2 735
30 mai 2014 à 18:35
30 mai 2014 à 18:35
A quel moment se produit incompatibilité de type ?
Quand elle se produit cliquer sur Débogage et voir quelle est la ligne surlignée en jaune dans la macro
Le différentiel provient peut être que certains montants ne sont pas pris en compte du fait de l'erreur
Il faut d'abord régler le problème de l'erreur, on verra le reste après
Si possible post un extrait de ton fichier (une dizaine de lignes par feuille) en anonymant les noms sur cjoint.com et indiques ici ensuite le lien fourni, je pourrais essayer de voir ce qui c loche
Quand elle se produit cliquer sur Débogage et voir quelle est la ligne surlignée en jaune dans la macro
Le différentiel provient peut être que certains montants ne sont pas pris en compte du fait de l'erreur
Il faut d'abord régler le problème de l'erreur, on verra le reste après
Si possible post un extrait de ton fichier (une dizaine de lignes par feuille) en anonymant les noms sur cjoint.com et indiques ici ensuite le lien fourni, je pourrais essayer de voir ce qui c loche
manubeni
Messages postés
33
Date d'inscription
lundi 26 mai 2014
Statut
Membre
Dernière intervention
6 juin 2020
30 mai 2014 à 19:07
30 mai 2014 à 19:07
daccord voici la ligne en jaune:
.Range("C" & ligne) = .Range("C" & ligne).Value + Sheets(N).Range("G" & x)
.Range("C" & ligne) = .Range("C" & ligne).Value + Sheets(N).Range("G" & x)
via55
Messages postés
14495
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
7 novembre 2024
2 735
30 mai 2014 à 19:32
30 mai 2014 à 19:32
A priori je pense qu'Excel ne peux pas faire la somme car une des données ne doit pas être de type numérique, mais ce n'est qu'une supposition, impossible d'en dire plus sans voir le fichier
Tu anonymes une partie d'une copie de ton fichier comme je disais, avec la macro bien sur et tu le postes sur cjoint puis tu m'indique le lien ici ou en mp et je regarderai
Tu anonymes une partie d'une copie de ton fichier comme je disais, avec la macro bien sur et tu le postes sur cjoint puis tu m'indique le lien ici ou en mp et je regarderai
manubeni
Messages postés
33
Date d'inscription
lundi 26 mai 2014
Statut
Membre
Dernière intervention
6 juin 2020
30 mai 2014 à 20:02
30 mai 2014 à 20:02
voici un extrait de 5 feuille
https://www.cjoint.com/?3EEuaGuo5C6
https://www.cjoint.com/?3EEuaGuo5C6
via55
Messages postés
14495
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
7 novembre 2024
2 735
30 mai 2014 à 23:06
30 mai 2014 à 23:06
ta macro fonctionne très bien sur l'extrait que tu m'as envoyé
https://www.cjoint.com/?0EExam3yMT8
Les totaux sont justes et correspondent à ceux que j'ai fait sur chaque feuille
Vérifie tes feuilles réelles, il y a peut être des blancs, des cellules non renseignées ou des cellules en texte eu lieu d'être en nombre et qui font buguer la macro
Cdlmnt
https://www.cjoint.com/?0EExam3yMT8
Les totaux sont justes et correspondent à ceux que j'ai fait sur chaque feuille
Vérifie tes feuilles réelles, il y a peut être des blancs, des cellules non renseignées ou des cellules en texte eu lieu d'être en nombre et qui font buguer la macro
Cdlmnt
manubeni
Messages postés
33
Date d'inscription
lundi 26 mai 2014
Statut
Membre
Dernière intervention
6 juin 2020
31 mai 2014 à 12:38
31 mai 2014 à 12:38
daccord. merci beaucoup pour votre aide. meme si la verifcation sera difficile à faire.
Vous m'avez porté une tres grande aide. merci beaucoup.
mais en passant est ce qu'il y a une fonction en excel pour faire cette verification feuille par feuille ( je veux dire si le contenu des cellules d'une colonne donnée sont d'un autre type alors qu'il devrait être d'un autre type)
merci
Vous m'avez porté une tres grande aide. merci beaucoup.
mais en passant est ce qu'il y a une fonction en excel pour faire cette verification feuille par feuille ( je veux dire si le contenu des cellules d'une colonne donnée sont d'un autre type alors qu'il devrait être d'un autre type)
merci
via55
Messages postés
14495
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
7 novembre 2024
2 735
31 mai 2014 à 14:06
31 mai 2014 à 14:06
A ma connaissance non!
Mais tu peux en sélectionnant toute la colonne attribuer un format à toutes les cellules.
Enfin en faisant executer la macro quand l'erreur se produit et en faisant débogage, quand tu passes la souris sur les parties de la formule surlignée en jaune un commentaire affiche la valeur de la variable, ainsi par ex dans la formule :
.Range("C" & ligne) = .Range("C" & ligne).Value + Sheets(N).Range("G" & x), le survol de la souris sur N en indiquera la valeur et le survol sur x de même, tu peux donc savoir dans quelle feuille et à quelle ligne se trouve l'erreur
Bon courage pour la suite
Mais tu peux en sélectionnant toute la colonne attribuer un format à toutes les cellules.
Enfin en faisant executer la macro quand l'erreur se produit et en faisant débogage, quand tu passes la souris sur les parties de la formule surlignée en jaune un commentaire affiche la valeur de la variable, ainsi par ex dans la formule :
.Range("C" & ligne) = .Range("C" & ligne).Value + Sheets(N).Range("G" & x), le survol de la souris sur N en indiquera la valeur et le survol sur x de même, tu peux donc savoir dans quelle feuille et à quelle ligne se trouve l'erreur
Bon courage pour la suite
manubeni
Messages postés
33
Date d'inscription
lundi 26 mai 2014
Statut
Membre
Dernière intervention
6 juin 2020
13 juin 2014 à 14:11
13 juin 2014 à 14:11
bjr Mr. excusez de revenir vous deranger de nouveau.
svp. je dois faire quelque modification de mon code mais je ne m'en sors pas.
voici mon ancien code:
Sub recap()
'desactive rafraissement écran
Application.ScreenUpdating = False
' boucle sur les feuilles depuis la 2eme jusqu'à la dernière
For N = 2 To Sheets.Count
'selectionne la feuille
Sheets(N).Select
' dernière ligne non vide de la feuille
DL = Range("D" & Rows.Count).End(xlUp).Row
' boucle de la 2eme ligne à la dernière non vide de la feuille
For x = 2 To DL
' récup le nom en D
nom = Sheets(N).Range("D" & x).Value
' derniere ligne non vide de la feuille RECAP
DLR = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
' recherche du nom dans RECAP
resultat = Application.VLookup(nom, Sheets(1).Range("A2:A" & DLR), 1, False)
' si non trouvé la ligne où écrire sera la 1ere après la derniere non vide
'sinon on recherche en quel ligne est le nom dans la colonne A de RECAP
If (IsError(resultat)) Then ligne = DLR + 1 Else ligne = Application.WorksheetFunction.Match(nom, Sheets(1).Range("A:A"), False)
'Inscription dans RECAP du nom en colonne Aet addition des montants en colonne B et C
With Sheets(1)
.Range("A" & ligne) = nom
.Range("B" & ligne) = .Range("B" & ligne).Value + Sheets(N).Range("F" & x)
.Range("C" & ligne) = .Range("C" & ligne).Value + Sheets(N).Range("G" & x)
End With
Next x
Next N
Sheets(1).Select
Application.ScreenUpdating = True
End Sub
ce ancien code me permettait de ranger les nom dans la colonne "A", et de cumuler les depot et retrait associés à chaque nom respectivement ds les colonnes "B" et "C"
mon probleme est que je ne veux plus cumuler les depot.
par exemple pour le nom "prosper" de la cellule D2 à la cellule D7 le depot correspondant est 700. (cest à dire quand cest le meme montant on ne cumule pas, mais quand les montant sont differents on fait la somme en prenant juste les montants une seule fois)
mais quand on parcourt les autres feuilles et on retrouve encore le nom "propsper" sur une autre feuille on procède de la meme facon en ajoutant la somme du depot.
voilà. merci pour votre aide.
Aussi pour la colonne "D", svp les cellules vide qui sont en dessous de certains noms veut dire que cest la meme personne.
cdlmt
svp. je dois faire quelque modification de mon code mais je ne m'en sors pas.
voici mon ancien code:
Sub recap()
'desactive rafraissement écran
Application.ScreenUpdating = False
' boucle sur les feuilles depuis la 2eme jusqu'à la dernière
For N = 2 To Sheets.Count
'selectionne la feuille
Sheets(N).Select
' dernière ligne non vide de la feuille
DL = Range("D" & Rows.Count).End(xlUp).Row
' boucle de la 2eme ligne à la dernière non vide de la feuille
For x = 2 To DL
' récup le nom en D
nom = Sheets(N).Range("D" & x).Value
' derniere ligne non vide de la feuille RECAP
DLR = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
' recherche du nom dans RECAP
resultat = Application.VLookup(nom, Sheets(1).Range("A2:A" & DLR), 1, False)
' si non trouvé la ligne où écrire sera la 1ere après la derniere non vide
'sinon on recherche en quel ligne est le nom dans la colonne A de RECAP
If (IsError(resultat)) Then ligne = DLR + 1 Else ligne = Application.WorksheetFunction.Match(nom, Sheets(1).Range("A:A"), False)
'Inscription dans RECAP du nom en colonne Aet addition des montants en colonne B et C
With Sheets(1)
.Range("A" & ligne) = nom
.Range("B" & ligne) = .Range("B" & ligne).Value + Sheets(N).Range("F" & x)
.Range("C" & ligne) = .Range("C" & ligne).Value + Sheets(N).Range("G" & x)
End With
Next x
Next N
Sheets(1).Select
Application.ScreenUpdating = True
End Sub
ce ancien code me permettait de ranger les nom dans la colonne "A", et de cumuler les depot et retrait associés à chaque nom respectivement ds les colonnes "B" et "C"
mon probleme est que je ne veux plus cumuler les depot.
par exemple pour le nom "prosper" de la cellule D2 à la cellule D7 le depot correspondant est 700. (cest à dire quand cest le meme montant on ne cumule pas, mais quand les montant sont differents on fait la somme en prenant juste les montants une seule fois)
mais quand on parcourt les autres feuilles et on retrouve encore le nom "propsper" sur une autre feuille on procède de la meme facon en ajoutant la somme du depot.
voilà. merci pour votre aide.
Aussi pour la colonne "D", svp les cellules vide qui sont en dessous de certains noms veut dire que cest la meme personne.
cdlmt
manubeni
Messages postés
33
Date d'inscription
lundi 26 mai 2014
Statut
Membre
Dernière intervention
6 juin 2020
13 juin 2014 à 14:15
13 juin 2014 à 14:15
jai oublié de vous joindre le lien d'un fichier test que jai créé
https://www.cjoint.com/?3Fnonsqm5zs
https://www.cjoint.com/?3Fnonsqm5zs
via55
Messages postés
14495
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
7 novembre 2024
2 735
13 juin 2014 à 14:18
13 juin 2014 à 14:18
Bonjour
Post un exemple du fichier avec les colonnes D et autres et les cas possibles sur cjoint.com, le premier n'est plus accessible
Cdlmnt
Post un exemple du fichier avec les colonnes D et autres et les cas possibles sur cjoint.com, le premier n'est plus accessible
Cdlmnt
manubeni
Messages postés
33
Date d'inscription
lundi 26 mai 2014
Statut
Membre
Dernière intervention
6 juin 2020
13 juin 2014 à 16:01
13 juin 2014 à 16:01
daccord
voici un exemple
https://www.cjoint.com/?3Fnqaa2cpwN
voici un exemple
https://www.cjoint.com/?3Fnqaa2cpwN
via55
Messages postés
14495
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
7 novembre 2024
2 735
13 juin 2014 à 16:52
13 juin 2014 à 16:52
Voilà il faut créer dans chaque feuille les nouvelles colonnes H I J avec les formules pour faire le tri
Reprendre ensuite la macro en changeant dans la macro les lettres des colonnes D F G par celle des colonnes H I J
https://www.cjoint.com/?0FnqYoMhYif
Cdlmnt
Reprendre ensuite la macro en changeant dans la macro les lettres des colonnes D F G par celle des colonnes H I J
https://www.cjoint.com/?0FnqYoMhYif
Cdlmnt
manubeni
Messages postés
33
Date d'inscription
lundi 26 mai 2014
Statut
Membre
Dernière intervention
6 juin 2020
13 juin 2014 à 18:13
13 juin 2014 à 18:13
ok merci
mais je veux trier seulement les données de la colonne F et les données de la colonne G seront intacte.
Si je vous comprends bien il me faut seulement les colonnes H et I et dans ma macro je procède aux modifications necessaire...
merci
crdlmnt
mais je veux trier seulement les données de la colonne F et les données de la colonne G seront intacte.
Si je vous comprends bien il me faut seulement les colonnes H et I et dans ma macro je procède aux modifications necessaire...
merci
crdlmnt
via55
Messages postés
14495
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
7 novembre 2024
2 735
Modifié par via55 le 13/06/2014 à 18:31
Modifié par via55 le 13/06/2014 à 18:31
Oui c'est ça
en H et I on obtient le nom associé à un dépôt chaque fois que le nom ou la somme change
Et le récapitulaif et les totaux comme tu le souhaitais peuvent donc se faire à partir de là
en H et I on obtient le nom associé à un dépôt chaque fois que le nom ou la somme change
Et le récapitulaif et les totaux comme tu le souhaitais peuvent donc se faire à partir de là
manubeni
Messages postés
33
Date d'inscription
lundi 26 mai 2014
Statut
Membre
Dernière intervention
6 juin 2020
14 juin 2014 à 15:28
14 juin 2014 à 15:28
bjr Mr. svp jai quelque soucis que je ne comprends pas
voici un extrait d'une feuille que jai réalisé. Seulement quand j'applique votre formule dans les colonne J et K, il ya des 0 qui s'affiche à la place de certains noms, ce que je ne comprend pas et cela aura des repercussion sur les résultats lors de la compilation. le format des cellules qui contient le nom est standard
Mon deuxieme probleme est que dans la colonne D (Nom et prenoms) les cellules vide qui sont sous un nom signifient que cest la meme personne. Par exemple de D2 à D13 c'est la meme personne "Jules ces"
Maintenant lors du traitement sur ma feuille RECAP comment faire pour tenir compte de cela? svp
voici le lien pour le fichier exemple:
https://www.cjoint.com/?3FopBl0vbAk
voici le code de la feuille RECAP
Sub recap()
'desactive rafraissement écran
Application.ScreenUpdating = False
' boucle sur les feuilles depuis la 2eme jusqu'à la dernière
For N = 2 To Sheets.Count
'selectionne la feuille
Sheets(N).Select
' dernière ligne non vide de la feuille
DL = Range("D" & Rows.Count).End(xlUp).Row
' boucle de la 2eme ligne à la dernière non vide de la feuille
For x = 2 To DL
' récup le nom en D
nom = Sheets(N).Range("D" & x).Value
' derniere ligne non vide de la feuille RECAP
DLR = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
' recherche du nom dans RECAP
resultat = Application.VLookup(nom, Sheets(1).Range("A2:A" & DLR), 1, False)
' si non trouvé la ligne où écrire sera la 1ere après la derniere non vide
'sinon on recherche en quel ligne est le nom dans la colonne A de RECAP
If (IsError(resultat)) Then ligne = DLR + 1 Else ligne = Application.WorksheetFunction.Match(nom, Sheets(1).Range("A:A"), False)
'Inscription dans RECAP du nom en colonne Aet addition des montants en colonne B et C
With Sheets(1)
.Range("A" & ligne) = nom
.Range("B" & ligne) = .Range("B" & ligne).Value + Sheets(N).Range("F" & x)
.Range("C" & ligne) = .Range("C" & ligne).Value + Sheets(N).Range("G" & x)
End With
Next x
Next N
Sheets(1).Select
Application.ScreenUpdating = True
End Sub
voici un extrait d'une feuille que jai réalisé. Seulement quand j'applique votre formule dans les colonne J et K, il ya des 0 qui s'affiche à la place de certains noms, ce que je ne comprend pas et cela aura des repercussion sur les résultats lors de la compilation. le format des cellules qui contient le nom est standard
Mon deuxieme probleme est que dans la colonne D (Nom et prenoms) les cellules vide qui sont sous un nom signifient que cest la meme personne. Par exemple de D2 à D13 c'est la meme personne "Jules ces"
Maintenant lors du traitement sur ma feuille RECAP comment faire pour tenir compte de cela? svp
voici le lien pour le fichier exemple:
https://www.cjoint.com/?3FopBl0vbAk
voici le code de la feuille RECAP
Sub recap()
'desactive rafraissement écran
Application.ScreenUpdating = False
' boucle sur les feuilles depuis la 2eme jusqu'à la dernière
For N = 2 To Sheets.Count
'selectionne la feuille
Sheets(N).Select
' dernière ligne non vide de la feuille
DL = Range("D" & Rows.Count).End(xlUp).Row
' boucle de la 2eme ligne à la dernière non vide de la feuille
For x = 2 To DL
' récup le nom en D
nom = Sheets(N).Range("D" & x).Value
' derniere ligne non vide de la feuille RECAP
DLR = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
' recherche du nom dans RECAP
resultat = Application.VLookup(nom, Sheets(1).Range("A2:A" & DLR), 1, False)
' si non trouvé la ligne où écrire sera la 1ere après la derniere non vide
'sinon on recherche en quel ligne est le nom dans la colonne A de RECAP
If (IsError(resultat)) Then ligne = DLR + 1 Else ligne = Application.WorksheetFunction.Match(nom, Sheets(1).Range("A:A"), False)
'Inscription dans RECAP du nom en colonne Aet addition des montants en colonne B et C
With Sheets(1)
.Range("A" & ligne) = nom
.Range("B" & ligne) = .Range("B" & ligne).Value + Sheets(N).Range("F" & x)
.Range("C" & ligne) = .Range("C" & ligne).Value + Sheets(N).Range("G" & x)
End With
Next x
Next N
Sheets(1).Select
Application.ScreenUpdating = True
End Sub
via55
Messages postés
14495
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
7 novembre 2024
2 735
Modifié par via55 le 14/06/2014 à 16:02
Modifié par via55 le 14/06/2014 à 16:02
La feuille est encore modifiée ! cette fois il y a plusieurs changements de montants en face de cellules vides; cela aurait été plus simple d'avoir la feuille complète dès le départ !
Bon alors on change tout :
En J2 de Feuil 1 mettre la formule : =SI(D2="";J1;D2) et étirer au bas de la colonne
En K2 mettre =SI(J2<>J1;F2;SI(F2<>F1;F2;0)) et étirer au bas de la colonne
Modifier ainsi la macro :
Sub recap()
'desactive rafraissement écran
Application.ScreenUpdating = False
' boucle sur les feuilles depuis la 2eme jusqu'à la dernière
For N = 2 To Sheets.Count
'selectionne la feuille
Sheets(N).Select
' dernière ligne non vide de la feuille
DL = Range("J" & Rows.Count).End(xlUp).Row
' boucle de la 2eme ligne à la dernière non vide de la feuille
For x = 2 To DL
' récup le nom en D
nom = Sheets(N).Range("J" & x).Value
' derniere ligne non vide de la feuille RECAP
DLR = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
' recherche du nom dans RECAP
resultat = Application.VLookup(nom, Sheets(1).Range("A2:A" & DLR), 1, False)
' si non trouvé la ligne où écrire sera la 1ere après la derniere non vide
'sinon on recherche en quel ligne est le nom dans la colonne A de RECAP
If (IsError(resultat)) Then ligne = DLR + 1 Else ligne = Application.WorksheetFunction.Match(nom, Sheets(1).Range("A:A"), False)
'Inscription dans RECAP du nom en colonne A et addition des montants en colonne B
With Sheets(1)
.Range("A" & ligne) = nom
.Range("B" & ligne) = .Range("B" & ligne).Value + Sheets(N).Range("K" & x)
End With
Next x
Next N
Sheets(1).Select
Application.ScreenUpdating = True
End Sub
Cdlmnt
Bon alors on change tout :
En J2 de Feuil 1 mettre la formule : =SI(D2="";J1;D2) et étirer au bas de la colonne
En K2 mettre =SI(J2<>J1;F2;SI(F2<>F1;F2;0)) et étirer au bas de la colonne
Modifier ainsi la macro :
Sub recap()
'desactive rafraissement écran
Application.ScreenUpdating = False
' boucle sur les feuilles depuis la 2eme jusqu'à la dernière
For N = 2 To Sheets.Count
'selectionne la feuille
Sheets(N).Select
' dernière ligne non vide de la feuille
DL = Range("J" & Rows.Count).End(xlUp).Row
' boucle de la 2eme ligne à la dernière non vide de la feuille
For x = 2 To DL
' récup le nom en D
nom = Sheets(N).Range("J" & x).Value
' derniere ligne non vide de la feuille RECAP
DLR = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
' recherche du nom dans RECAP
resultat = Application.VLookup(nom, Sheets(1).Range("A2:A" & DLR), 1, False)
' si non trouvé la ligne où écrire sera la 1ere après la derniere non vide
'sinon on recherche en quel ligne est le nom dans la colonne A de RECAP
If (IsError(resultat)) Then ligne = DLR + 1 Else ligne = Application.WorksheetFunction.Match(nom, Sheets(1).Range("A:A"), False)
'Inscription dans RECAP du nom en colonne A et addition des montants en colonne B
With Sheets(1)
.Range("A" & ligne) = nom
.Range("B" & ligne) = .Range("B" & ligne).Value + Sheets(N).Range("K" & x)
End With
Next x
Next N
Sheets(1).Select
Application.ScreenUpdating = True
End Sub
Cdlmnt
manubeni
Messages postés
33
Date d'inscription
lundi 26 mai 2014
Statut
Membre
Dernière intervention
6 juin 2020
19 juin 2014 à 10:14
19 juin 2014 à 10:14
bjr Mr via55
veuillez mexcuser. jétais souffrant et jai pas pu vs faire un retour. je vais essayer tout de suite sur les feuilles.
merci davance.
cdlmnt
veuillez mexcuser. jétais souffrant et jai pas pu vs faire un retour. je vais essayer tout de suite sur les feuilles.
merci davance.
cdlmnt
manubeni
Messages postés
33
Date d'inscription
lundi 26 mai 2014
Statut
Membre
Dernière intervention
6 juin 2020
20 juin 2014 à 10:16
20 juin 2014 à 10:16
bjr Mr via55.
merci beaucoup pour votre aide.
jai essayé votre code. ca marche. mais quand je compile, le message d'erreur suivant s'affiche:
Erreur d'exécution '1004':
la methode Select de la classe Worksheet a échoué.
Quand je fais debogage, la ligne d'erreur est celle que jai mis en gras (Sheets(N).Select)
que dois-je faire svp?
voici mon code:
Sub recap()
'desactive rafraissement écran
Application.ScreenUpdating = False
' boucle sur les feuilles depuis la 2eme jusqu'à la dernière
For N = 2 To Sheets.Count
'selectionne la feuille
Sheets(N).Select
' dernière ligne non vide de la feuille
DL = Range("J" & Rows.Count).End(xlUp).Row
' boucle de la 2eme ligne à la dernière non vide de la feuille
For x = 2 To DL
' récup le nom en D
nom = Sheets(N).Range("J" & x).Value
' derniere ligne non vide de la feuille RECAP
DLR = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
' recherche du nom dans RECAP
resultat = Application.VLookup(nom, Sheets(1).Range("A2:A" & DLR), 1, False)
' si non trouvé la ligne où écrire sera la 1ere après la derniere non vide
'sinon on recherche en quel ligne est le nom dans la colonne A de RECAP
If (IsError(resultat)) Then ligne = DLR + 1 Else ligne = Application.WorksheetFunction.Match(nom, Sheets(1).Range("A:A"), False)
'Inscription dans RECAP du nom en colonne A et addition des montants en colonne B
With Sheets(1)
.Range("A" & ligne) = nom
.Range("B" & ligne) = .Range("B" & ligne).Value + Sheets(N).Range("K" & x)
.Range("C" & ligne) = .Range("C" & ligne).Value + Sheets(N).Range("G" & x)
End With
Next x
Next N
Sheets(1).Select
Application.ScreenUpdating = True
End Sub
merci beaucoup pour votre aide.
jai essayé votre code. ca marche. mais quand je compile, le message d'erreur suivant s'affiche:
Erreur d'exécution '1004':
la methode Select de la classe Worksheet a échoué.
Quand je fais debogage, la ligne d'erreur est celle que jai mis en gras (Sheets(N).Select)
que dois-je faire svp?
voici mon code:
Sub recap()
'desactive rafraissement écran
Application.ScreenUpdating = False
' boucle sur les feuilles depuis la 2eme jusqu'à la dernière
For N = 2 To Sheets.Count
'selectionne la feuille
Sheets(N).Select
' dernière ligne non vide de la feuille
DL = Range("J" & Rows.Count).End(xlUp).Row
' boucle de la 2eme ligne à la dernière non vide de la feuille
For x = 2 To DL
' récup le nom en D
nom = Sheets(N).Range("J" & x).Value
' derniere ligne non vide de la feuille RECAP
DLR = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
' recherche du nom dans RECAP
resultat = Application.VLookup(nom, Sheets(1).Range("A2:A" & DLR), 1, False)
' si non trouvé la ligne où écrire sera la 1ere après la derniere non vide
'sinon on recherche en quel ligne est le nom dans la colonne A de RECAP
If (IsError(resultat)) Then ligne = DLR + 1 Else ligne = Application.WorksheetFunction.Match(nom, Sheets(1).Range("A:A"), False)
'Inscription dans RECAP du nom en colonne A et addition des montants en colonne B
With Sheets(1)
.Range("A" & ligne) = nom
.Range("B" & ligne) = .Range("B" & ligne).Value + Sheets(N).Range("K" & x)
.Range("C" & ligne) = .Range("C" & ligne).Value + Sheets(N).Range("G" & x)
End With
Next x
Next N
Sheets(1).Select
Application.ScreenUpdating = True
End Sub
via55
Messages postés
14495
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
7 novembre 2024
2 735
21 juin 2014 à 13:55
21 juin 2014 à 13:55
Bonjour manubeni
A première vue je ne vois pas ce qui cloche
As tu plusieurs classeurs différents?
Post moi ton classeur sur cjoint.com et indiques le lien fourni, (tu peux me l'indiquer en message privé si tu veux) je regarderai
Cdlmnt
A première vue je ne vois pas ce qui cloche
As tu plusieurs classeurs différents?
Post moi ton classeur sur cjoint.com et indiques le lien fourni, (tu peux me l'indiquer en message privé si tu veux) je regarderai
Cdlmnt
eriiic
Messages postés
24600
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2024
7 239
21 juin 2014 à 16:44
21 juin 2014 à 16:44
Bonjour,
tu as bien 2 feuilles dans ce classeur ?
eric
tu as bien 2 feuilles dans ce classeur ?
eric