Calcul dans cellule à fusionner

Bonjour tout le monde!

je viens exposer un petit problème que je rencontre en VBA.

En fait, suivant certaines conditions référencées ci-après, je souhaiterais créer en colonne S plusieurs cases, et réaliser un calcul:

Conditions:

  • La fusion s'effectue si les cellules Cells(i, "D") et Cells(i + 1, "D") ne sont pas vides.
  • La fusion s'effectue si les cellules Cells(i, "D") = .Cells(i + 1, "D") et les cellules .Cells(i, "A") = .Cells(i + 1, "A")
  • Dans la cellule fusionnée, colonne S, le code me calcule le produit des chiffres des cellules à fusioner (qui sont en colonne R).
J'ai codé ceci, j'arrive à fusionner, mais le calcul effectué n'est pas correct:
Private Sub CommandButton2_Click()
  Dim i As Integer

  For i = 3 To 2000 '2000 for margin

    With Sheets("Units")
     If .Cells(i, "D") <> "" And .Cells(i + 1, "D") <> "" Then
      If .Cells(i, "D") = .Cells(i + 1, "D") And .Cells(i, "A") = .Cells(i + 1, "A") Then
         .Range(Cells(i, "S"), Cells(i + 1, "S")).Merge
         .Cells(i, "S") = .Cells(i, "R") * .Cells(i + 1, "R")

      ElseIf .Cells(i, "A") <> .Cells(i + 1, "A") Then
             .Cells(i, "S") = ""
      End If
      ElseIf .Cells(i, "D") = "" Then
      .Cells(i, "S") = ""

    End If

    End With

Next

End Sub

Auriez-vous des suggestion pour m'orienter?

Merci d'avance,

Bonne fin de journée!

Bonjour,

Un petit fichier aurait été mieux :

Inverse ces deux lignes

au lieu de

.Range(Cells(i, "S"), Cells(i + 1, "S")).Merge

.Cells(i, "S") = .Cells(i, "R") * .Cells(i + 1, "R")

Mettre :

.Cells(i, "S") = .Cells(i, "R") * .Cells(i + 1, "R")

.Range(Cells(i, "S"), Cells(i + 1, "S")).Merge

A Tester

Bonjour,

J'aurais conseillé d'abord de respecter la syntaxe(la méthode Cells est Cells(numéro ligne,numéro colonne)) même si VBA est parfois laxiste en acceptant des syntaxes non conformes, ensuite d'indenter correctement ton code pour y voir plus clair, mais là le problème immédiat évident est autre :

Tu défiles des lignes dans le sens descendant, et à chaque ligne tu es susceptible de fusionner la cellule en S avec la cellule de la ligne suivante... Quand tu vas passer à la ligne en-dessous, qui comporte une cellule fusionnée avec celle de la ligne précédente, il est évident que cela risque de poser quelque problème...

Cordialement.

Merci pour vos réponses.

En intervertissant les deux lignes cela ne change malheureusement pas le résultat.

Effectivement, il y a un problème d'incrémentation, mais je ne vois pas trop comment formuler cà en VBA... J'ai modifié comme suivant mais cela ne fonctionne toujours pas. La fusion de 3 cellules successives est bonnes mais pas la valeur implémentée dans la cellule fusionnée...

Private Sub CommandButton2_Click()
  Dim i As Integer

  For i = 3 To 2000 '2000 for margin

    With Sheets("Units")
     If .Cells(i, "D") <> "" And .Cells(i + 1, "D") <> "" Then
      If .Cells(i, "D") = .Cells(i + 1, "D") And .Cells(i, "A") = .Cells(i + 1, "A") Then
         .Cells(i, "S") = .Cells(i, "R") * .Cells(i + 1, "R")
         .Range(Cells(i, "S"), Cells(i + 1, "S")).Merge

         If .Cells(i, "D") = .Cells(i - 1, "D") And .Cells(i, "A") = .Cells(i - 1, "A") Then
            .Cells(i, "S") = .Cells(i, "R") * .Cells(i - 1, "S")
         End If

      ElseIf .Cells(i, "A") <> .Cells(i + 1, "A") Then
             .Cells(i, "S") = ""
      End If

      ElseIf .Cells(i, "D") = "" Then
      .Cells(i, "S") = ""

    End If

    End With

Next

End Sub

Lorsque des cellules sont fusionnées, seule une cellule contient une valeur, les autres sont vides...

MFerrand a écrit :

Lorsque des cellules sont fusionnées, seule une cellule contient une valeur, les autres sont vides...

Merci.

Mais je n'arrive pas à me dépatouiller de cette affaire...

Tant que tu ne changes pas de sens, tu verras des valeurs disparaître, il ne peut y en avoir que dans la cellule supérieure.

J'entends bien, mais je n'arrive pas à coder çà...(je débute depuis une semaine même pas, je ne sais pas comment retranscrire ca en code...)

Tu inverses ta boucle, tu pars de la fin pour terminer ligne 3 avec un pas de -1, et tu testes la ligne au-dessus au lieu de celle en dessous.

Merci pour la réponse.

J'ai essayé en faisant une boucle "for" mais je pense que je le code mal...

For i = .Cells(Rows.Count, 1).End(xlUp).Row To 3 Step -1

Je mets en pièce jointe mon fichier..pour plus de clarté...

lyfe12 a écrit :

Mais je n'arrive pas à me dépatouiller de cette affaire...

Il n'est pas du tout idéal de fusionner, c'est une source de problème

P.

ps: à MFerrand, as-tu reçu mon MP ?

ah ben je vois bien ca

Rechercher des sujets similaires à "calcul fusionner"