Vba : Aditionner deux plages de cellules [Résolu/Fermé]

Signaler
Messages postés
14
Date d'inscription
vendredi 8 janvier 2010
Statut
Membre
Dernière intervention
25 mars 2010
-
Messages postés
14
Date d'inscription
vendredi 8 janvier 2010
Statut
Membre
Dernière intervention
25 mars 2010
-
Bonsoir à tous.

Je souhaiterai aditionner deux plages de cellules, Feuil1.Range("b3:E13") et Feuil2.range("B3:E13") et que les résultats apparaissent en Feuil3.range("B3:E13").

Est-ce possible ?

12 réponses

Messages postés
12235
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
6 janvier 2021
2 555
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...

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? --
5
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Messages postés
4239
Date d'inscription
lundi 20 avril 2009
Statut
Contributeur
Dernière intervention
12 septembre 2014
1 289
Merci pijaku, tu sauve Usgpa. De mon côté je n'ai hélas pas eu le temps de me pencher dessus. Je te remercie d'avoir pris le relais.

Cordialement.
Messages postés
12235
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
6 janvier 2021
2 555
Salut Chossette. Pas de quoi, nous sommes là pour ça. La prochaine sera pour toi.
@+
Messages postés
4239
Date d'inscription
lundi 20 avril 2009
Statut
Contributeur
Dernière intervention
12 septembre 2014
1 289
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.
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)"
Messages postés
14
Date d'inscription
vendredi 8 janvier 2010
Statut
Membre
Dernière intervention
25 mars 2010
1
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 ?
Messages postés
4239
Date d'inscription
lundi 20 avril 2009
Statut
Contributeur
Dernière intervention
12 septembre 2014
1 289
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 :
=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.
Messages postés
14
Date d'inscription
vendredi 8 janvier 2010
Statut
Membre
Dernière intervention
25 mars 2010
1
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.
Messages postés
4239
Date d'inscription
lundi 20 avril 2009
Statut
Contributeur
Dernière intervention
12 septembre 2014
1 289
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.
Messages postés
14
Date d'inscription
vendredi 8 janvier 2010
Statut
Membre
Dernière intervention
25 mars 2010
1
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.
Messages postés
14
Date d'inscription
vendredi 8 janvier 2010
Statut
Membre
Dernière intervention
25 mars 2010
1
Merci beaucoup d'avance Chossette9 !!!
Petit up !
Messages postés
4239
Date d'inscription
lundi 20 avril 2009
Statut
Contributeur
Dernière intervention
12 septembre 2014
1 289
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 :)
Merci, j'attendrais dans ce cas !
Messages postés
14
Date d'inscription
vendredi 8 janvier 2010
Statut
Membre
Dernière intervention
25 mars 2010
1
Si quelqu'un a une idée, je suis preneur car je suis vraiment bloqué.
Messages postés
14
Date d'inscription
vendredi 8 janvier 2010
Statut
Membre
Dernière intervention
25 mars 2010
1
Merci Pijaku !!! ca marche super bien !!! Merci vraiment à toi et à chossette pour avoir pris du temps pour m'aider. Merci beaucoup !
Messages postés
14
Date d'inscription
vendredi 8 janvier 2010
Statut
Membre
Dernière intervention
25 mars 2010
1
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