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").
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? --
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 ?
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.
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.
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 ?
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.
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
Cordialement.
@+