Vba : Aditionner deux plages de cellules
Résolu/Fermé
Usgpa
Messages postés
14
Date d'inscription
vendredi 8 janvier 2010
Statut
Membre
Dernière intervention
25 mars 2010
-
Modifié par Usgpa le 23/03/2010 à 17:53
Usgpa Messages postés 14 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 25 mars 2010 - 25 mars 2010 à 16:25
Usgpa Messages postés 14 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 25 mars 2010 - 25 mars 2010 à 16:25
A voir également:
- Vba : Aditionner deux plages de cellules
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
- Mkdir vba ✓ - Forum VB / VBA
- Excel compter cellule couleur sans vba - Guide
- Vba range avec variable ✓ - Forum VB / VBA
- Vba dépassement de capacité ✓ - Forum Excel
12 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
Modifié par pijaku le 25/03/2010 à 11:34
Modifié par pijaku le 25/03/2010 à 11:34
Salut,
Je n'y connaissais rien aux variables tableaux sur VBA, avant de parcourir ce site
Effectivement selon la longueur de tes plages à additionner, utiliser les tableaux semble une bonne solution. Après recherche, essais divers (et beaucoup de tricherie sur le site cité plus haut), je t'ai fait ce code qui additionne les plages B3:E13 de tes feuil1 et 2 et envoie le résultat en Feuil3. Tu pourras adapter facilement ce code à ton cas en suivant les commentaires...
Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --
Je n'y connaissais rien aux variables tableaux sur VBA, avant de parcourir ce site
Effectivement selon la longueur de tes plages à additionner, utiliser les tableaux semble une bonne solution. Après recherche, essais divers (et beaucoup de tricherie sur le site cité plus haut), je t'ai fait ce code qui additionne les plages B3:E13 de tes feuil1 et 2 et envoie le résultat en Feuil3. Tu pourras adapter facilement ce code à ton cas en suivant les commentaires...
Option Explicit Option Base 0 Sub addition_plages() Dim Tableau() As Integer Dim x As Integer, y As Integer Dim i As Integer, j As Integer 'ici x est la dernière ligne, y la dernière colonne x = 13 y = 5 'Redimensionne le tableau de la ligne 3 à x et de la 2ème col à la yème ReDim Tableau(3 To x, 2 To y) 'complète les valeurs du tableau par l'addition des cellules de la même plage sur 2 feuilles For i = 3 To x For j = 2 To y Tableau(i, j) = Sheets("Feuil1").Cells(i, j) + Sheets("Feuil2").Cells(i, j) Next j Next i 'restitue les valeurs du tableau dans la feuil3 With Sheets("Feuil3") .Range("B3:E13") = Tableau End With End Sub
Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --
chossette9
Messages postés
4239
Date d'inscription
lundi 20 avril 2009
Statut
Contributeur
Dernière intervention
12 septembre 2014
1 308
24 mars 2010 à 10:10
24 mars 2010 à 10:10
Merci de tes réponses, avec cela on va pouvoir avancer plus rapidement ^^
Je regarde ça quand j'ai un trou dans mon emploi du temps.
Cordialement,
Chossette9.
Je regarde ça quand j'ai un trou dans mon emploi du temps.
Cordialement,
Chossette9.
Oui, bien sûr !
Avec l'enregistreur de macros, tu peux facilement trouver la soluce tout seul...
Mais le résultat n'apparaitra que dans une seule cellule !
Je t'aide un peu :
Range("tacelluleoutuveuxvoirleresultat").FormulaR1C1 = "=SUM(Feuil1!TaPlagefeuil1)+SUM(Feuil2!TaPlagefeuil2)"
Avec l'enregistreur de macros, tu peux facilement trouver la soluce tout seul...
Mais le résultat n'apparaitra que dans une seule cellule !
Je t'aide un peu :
Range("tacelluleoutuveuxvoirleresultat").FormulaR1C1 = "=SUM(Feuil1!TaPlagefeuil1)+SUM(Feuil2!TaPlagefeuil2)"
Usgpa
Messages postés
14
Date d'inscription
vendredi 8 janvier 2010
Statut
Membre
Dernière intervention
25 mars 2010
1
24 mars 2010 à 09:05
24 mars 2010 à 09:05
Merci Noan mais je ne veux pas que cela apparaisse dans une seule cellule, je voulais un tableau qui servait à compiler les valeurs de la feuille 1 avec celles de la Feuille 2. Selon vous il serait donc impossible d'aditionner les cellules de la feuille2 à celle de la feuille1 ? Pour m'expliquer un peu mieux, serait-il possible d'avoir dans le tableau de la feuille 1 grâce à un code VBA : A1 = A1 + Feuil2!A1 ? et cela seulement lors de la pression d'un COmmandbutton ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
chossette9
Messages postés
4239
Date d'inscription
lundi 20 avril 2009
Statut
Contributeur
Dernière intervention
12 septembre 2014
1 308
24 mars 2010 à 09:19
24 mars 2010 à 09:19
Bonjour,
je n'ai pas bien compris ce que tu veux faire exactement ? tu veux additionner par exemple les cellules B3 des feuilles 1 et 2, et que le résultat apparaisse en cellule B3 de la feuille 3 ? Et recopier ceci dans toutes les cases de la plage B3:E13 ?
Si c'est ça, il te suffit de te mettre en Feuille 3, cellule B3, et de taper dedans :
Ensuite, tu fais un cliquer-glisser (se mettre en bas à droite de la case B3, la flèche se transformera en croix) d'abord en ligne, de B3 à E3, puis en colonne, ou inversement.
Bien évidemment, si j'ai pas bien compris le but de ton sujet, ma réponse ne t'apporte rien.
Cordialement,
Chossette9.
je n'ai pas bien compris ce que tu veux faire exactement ? tu veux additionner par exemple les cellules B3 des feuilles 1 et 2, et que le résultat apparaisse en cellule B3 de la feuille 3 ? Et recopier ceci dans toutes les cases de la plage B3:E13 ?
Si c'est ça, il te suffit de te mettre en Feuille 3, cellule B3, et de taper dedans :
=SOMME(Feuil2!B3;Feuil1!B3)
Ensuite, tu fais un cliquer-glisser (se mettre en bas à droite de la case B3, la flèche se transformera en croix) d'abord en ligne, de B3 à E3, puis en colonne, ou inversement.
Bien évidemment, si j'ai pas bien compris le but de ton sujet, ma réponse ne t'apporte rien.
Cordialement,
Chossette9.
Usgpa
Messages postés
14
Date d'inscription
vendredi 8 janvier 2010
Statut
Membre
Dernière intervention
25 mars 2010
1
24 mars 2010 à 09:22
24 mars 2010 à 09:22
C'est plus ou moins ça oui. Sauf que dans mon cas les feuilles sont dans deux classeurs différents, le tableau est beaucoup plus grand que ("B3:E13") et je ne souhaite aditionner ces tableaux uniquement à la fermeture d'un des classeurs. De plus je souhaiterai faire un Clearcontents juste après d'un des deux tableaux. C'est un peu complexe et je vous remercie de vous être intéréssé à mon problème.
chossette9
Messages postés
4239
Date d'inscription
lundi 20 avril 2009
Statut
Contributeur
Dernière intervention
12 septembre 2014
1 308
24 mars 2010 à 09:32
24 mars 2010 à 09:32
les feuilles sont dans deux classeurs différents
-> le résultat sera dans quel classeur ? un des deux ? un troisième ?
Le tableau est beaucoup plus grand que ("B3:E13")
-> cela ne devrait pas être un problème pour un tableau plus grand. Après il faut voir si la taille du tableau est fixe ou si elle est amenée à changer.
Je ne souhaite additionner ces tableaux uniquement à la fermeture d'un des classeurs
-> on va devoir passer par les macros VBA !
De plus je souhaiterai faire un Clearcontents juste après d'un des deux tableaux
-> Juste après quoi ? juste après le calcul ? ou bien tu souhaites qu'à l'ouverture du classeur le dit tableau soit vide ?
Des réponses à ces questions la suite découle.
-> le résultat sera dans quel classeur ? un des deux ? un troisième ?
Le tableau est beaucoup plus grand que ("B3:E13")
-> cela ne devrait pas être un problème pour un tableau plus grand. Après il faut voir si la taille du tableau est fixe ou si elle est amenée à changer.
Je ne souhaite additionner ces tableaux uniquement à la fermeture d'un des classeurs
-> on va devoir passer par les macros VBA !
De plus je souhaiterai faire un Clearcontents juste après d'un des deux tableaux
-> Juste après quoi ? juste après le calcul ? ou bien tu souhaites qu'à l'ouverture du classeur le dit tableau soit vide ?
Des réponses à ces questions la suite découle.
Usgpa
Messages postés
14
Date d'inscription
vendredi 8 janvier 2010
Statut
Membre
Dernière intervention
25 mars 2010
1
24 mars 2010 à 09:40
24 mars 2010 à 09:40
les feuilles sont dans deux classeurs différents
-> le résultat sera dans quel classeur ? un des deux ? un troisième ?
Le resultat sera dans un des deux classeurs (celui qui sert à compiler les données).
Le tableau est beaucoup plus grand que ("B3:E13")
-> cela ne devrait pas être un problème pour un tableau plus grand. Après il faut voir si la taille du tableau est fixe ou si elle est amenée à changer.
La taille sera fixe.
Je ne souhaite additionner ces tableaux uniquement à la fermeture d'un des classeurs
-> on va devoir passer par les macros VBA !
C'est ce que je
De plus je souhaiterai faire un Clearcontents juste après d'un des deux tableaux
-> Juste après quoi ? juste après le calcul ? ou bien tu souhaites qu'à l'ouverture
du classeur le dit tableau soit vide ?
Une fois les données du classeur 1 ajoutée à celle du Classeur 2 , je souhaite que les données du classeur 1 soient effacées.
-> le résultat sera dans quel classeur ? un des deux ? un troisième ?
Le resultat sera dans un des deux classeurs (celui qui sert à compiler les données).
Le tableau est beaucoup plus grand que ("B3:E13")
-> cela ne devrait pas être un problème pour un tableau plus grand. Après il faut voir si la taille du tableau est fixe ou si elle est amenée à changer.
La taille sera fixe.
Je ne souhaite additionner ces tableaux uniquement à la fermeture d'un des classeurs
-> on va devoir passer par les macros VBA !
C'est ce que je
De plus je souhaiterai faire un Clearcontents juste après d'un des deux tableaux
-> Juste après quoi ? juste après le calcul ? ou bien tu souhaites qu'à l'ouverture
du classeur le dit tableau soit vide ?
Une fois les données du classeur 1 ajoutée à celle du Classeur 2 , je souhaite que les données du classeur 1 soient effacées.
Usgpa
Messages postés
14
Date d'inscription
vendredi 8 janvier 2010
Statut
Membre
Dernière intervention
25 mars 2010
1
24 mars 2010 à 10:13
24 mars 2010 à 10:13
Merci beaucoup d'avance Chossette9 !!!
Petit up !
chossette9
Messages postés
4239
Date d'inscription
lundi 20 avril 2009
Statut
Contributeur
Dernière intervention
12 septembre 2014
1 308
24 mars 2010 à 15:41
24 mars 2010 à 15:41
Je regarde ça ce soir chez moi, pas trop le temps au boulot.
Mais ça n'empêche pas les réponses d'autres personnes bien évidemment :)
Mais ça n'empêche pas les réponses d'autres personnes bien évidemment :)
Usgpa
Messages postés
14
Date d'inscription
vendredi 8 janvier 2010
Statut
Membre
Dernière intervention
25 mars 2010
1
25 mars 2010 à 10:06
25 mars 2010 à 10:06
Si quelqu'un a une idée, je suis preneur car je suis vraiment bloqué.
Usgpa
Messages postés
14
Date d'inscription
vendredi 8 janvier 2010
Statut
Membre
Dernière intervention
25 mars 2010
1
25 mars 2010 à 11:32
25 mars 2010 à 11:32
Merci Pijaku !!! ca marche super bien !!! Merci vraiment à toi et à chossette pour avoir pris du temps pour m'aider. Merci beaucoup !
Usgpa
Messages postés
14
Date d'inscription
vendredi 8 janvier 2010
Statut
Membre
Dernière intervention
25 mars 2010
1
25 mars 2010 à 16:25
25 mars 2010 à 16:25
Excusez-moi de vous déranger à nouveau mais ma fonction bug à cause d'un dépassement de capacité. Savez vous si je peux contourner ce problème ?
Dim Tableau1() As Integer
Dim x1 As Integer, y1 As Integer
Dim i1 As Integer, j1 As Integer
x1 = 1465
y1 = 119
ReDim Tableau1(2 To x1, 3 To y1)
For i1 = 2 To x1
For j1 = 3 To y1
Tableau1(i1, j1) = Workbooks("Fichier Personnel X.xls").Sheets("Statistiques").Cells(i1, j1) + Workbooks("Classeur Commun X").Sheets("Statistiques").Cells(i1, j1)
Next j1
Next i1
With Workbooks("Classeur Commun X.xls").Sheets("Statistiques")
.Range("C2:D01465") = Tableau1
End With
Range("C2:D01465").ClearContents
Dim Tableau1() As Integer
Dim x1 As Integer, y1 As Integer
Dim i1 As Integer, j1 As Integer
x1 = 1465
y1 = 119
ReDim Tableau1(2 To x1, 3 To y1)
For i1 = 2 To x1
For j1 = 3 To y1
Tableau1(i1, j1) = Workbooks("Fichier Personnel X.xls").Sheets("Statistiques").Cells(i1, j1) + Workbooks("Classeur Commun X").Sheets("Statistiques").Cells(i1, j1)
Next j1
Next i1
With Workbooks("Classeur Commun X.xls").Sheets("Statistiques")
.Range("C2:D01465") = Tableau1
End With
Range("C2:D01465").ClearContents
25 mars 2010 à 11:43
Cordialement.
25 mars 2010 à 11:46
@+