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
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

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
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...

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
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
25 mars 2010 à 11:43
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.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
25 mars 2010 à 11:46
Salut Chossette. Pas de quoi, nous sommes là pour ça. La prochaine sera pour toi.
@+
0
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
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.
1
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)"
0
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
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 ?
0

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 306
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 :
=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.
0
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
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.
0
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
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.
0
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
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.
0
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
Merci beaucoup d'avance Chossette9 !!!
0
Petit up !
0
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
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 :)
0
Merci, j'attendrais dans ce cas !
0
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
Si quelqu'un a une idée, je suis preneur car je suis vraiment bloqué.
0
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
Merci Pijaku !!! ca marche super bien !!! Merci vraiment à toi et à chossette pour avoir pris du temps pour m'aider. Merci beaucoup !
0
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
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
0