Résolu Cumuler les valeurs de plusieurs cellules dans une cellule ayant déjà un montant

  • Auteur de la discussion nass370
  • Date de début

nass370

Nouveau membre
Bonjour à tous,

J'ai realisé un code macro ligne à ligne qui fonctionne correctement sur un fichier où j'ai très peu de lignes. J'ai voulu adapter ce code afin de le formater sur environ 200 lignes.

Mon objectif: j'ai des valeurs mensuelles et trimestrielles, je veux remettre à zéro mes lignes mensuelles en collant leurs valeurs dans leurs lignes trimestrielles sans écraser les valeurs déjà collées en trimestrielle. Un même dossier a une colonne montant mensuelle et une colonne montant trimestrielle.

Veuillez trouver ci-joint le code VBA sous excel qui me pose problème :

1.Sub CumuldonneesAnnee()
2.Dim A As Integer
3.A = MsgBox("Voulez vous cumuler les données M en T?", vbYesNo + vbQuestion, "Cumul Données")
4.If A = vbYes Then
5.Range("bn8:bn200").Select
6.ActiveCell.FormulaR1C1 = Range("bn8:bn200").Value + Range("bq8:bq200").Value
7.Range("bn8:bn200").Select
8.Selection.Copy
9.Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
10.MsgBox "Opération effectuée", vbOKOnly + vbInformation, "Cumul Données"
11.Else
12.MsgBox "Aucune opération effectuée", vbOKOnly + vbInformation, "Cumul Données"
13.End If
14.End Sub

NB : Range ("BN8:BN200")= cellules trimestrielles
Range ("BQ8:BQ200")= cellules mensuelles

En espérant avoir respectée le règlement ainsi qu'avoir été clair et synthétique.
D'avance merci pour votre aide.
 

zeb

Modérateur
Meilleure réponse
Salut,

Et non, tu ne respectes pas le règlement.
Il faut présenter le code entre les balises [code=vb] et [/code].
Ce n'est pas grave si tu modifie ton message.

--------------------------


Concernant la fonction MsgBox(), il ne faut pas additioner les valeurs possibles pour le paramètre Buttons avec l'opérateur + des réels, mais avec l'opérateur OU (Or) logique.
Par ailleurs, cette fonction renvoie une valeur de type VbMsgBoxResult qui est en fait un long. Ton A en Integer peut être trop petit.

--------------------------

Ce code est très intéressant :
Code:
Range("BN8:BN200").Select
Selection.Copy

Mais si tu veux ralentir Excel, c'est comme ça qu'il faut faire.
Par principe, il ne faut rien sélectionner ni activer dans une macro, sauf à la rigueur en toute fin, pour donner le focus à une page, une cellule en particulier.

Donc la ligne précédente s'écrit :
Code:
Range("BN8:BN200").Copy

Code:
' non
zone.Select
Selection.action

' oui
zone.action

--------------------------

Je te propose une autre façon de programmer avec des questions à l'utilisateur ou autrs vérifications.
Le principe est simple : si ce n'est pas OK, on s'arrête. Sous-entendu, si c'est OK on continue.
Code:
Sub CumuldonneesAnnee()

	If Not condition_1_pour_continuer Then
		MsgBox "Impossible de continuer dans ces conditions", vbOKOnly Or vbExclamation, "Cumul Données"
		Exit Sub ' on s'arrête !
	End If
	If Not condition_2_pour_continuer Then
		MsgBox "Impossible de continuer dans ces conditions", vbOKOnly Or vbExclamation, "Cumul Données"
		Exit Sub ' on s'arrête !
	End If
	...
	
	' Toutes les conditions ont été vérifiées, on peut y aller !
	
	...
	
	MsgBox "Opération effectuée", vbOKOnly Or vbInformation, "Cumul Données"
End Sub

--------------------------

Le presses-papier est une zone de mémoire qui permet à l'utilisateur de stocker ses valeurs.
Un programme, fut-il une macro Excel ne doit pas polluer cet espace.
Par principe, ne pas faire de copier-coller dans une macro.

Je refais ton programme :
Code:
Sub CumuldonneesAnnee()
	Dim A As VbMsgBoxResult
	A = MsgBox("Voulez vous cumuler les données M en T?", vbYesNo Or vbQuestion, "Cumul Données")
	If A <> vbYes Then
		MsgBox "Aucune opération effectuée", vbOKOnly Or vbExclamation, "Cumul Données"
		Exit Sub ' on s'arrête !
	End If

	Dim Cell As Range
	For Each Cell In Range("BN8:BN200")
		Cell.Value = Cell.Value + Cell.Offset(,3).Value
	Next
	
	MsgBox "Opération effectuée", vbOKOnly Or vbInformation, "Cumul Données"
End Sub

--------------------------

Maintenant, la zone BN8-BN200 peut être calculée plutôt que fixe, non ?
Veux-tu qu'on en discute ?
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 131
Messages
6 717 941
Membres
1 586 382
Dernier membre
alejandrooo
Partager cette page
Haut