Copier coller en fonction d'un coefficient

Bonjour à toute et à tous,

Je vais essayer de vous exposer mon problème de manière claire mais si vous avez des interrogations n'hésitez pas :

En pièce jointe un exemple du fichier dont je dispose. Le vrai fichier étant confidentiel.

Le vrai fichier comporte pour le Fauilles 1 plus de 1000 lignes et 300 colonnes, et la feuilles 2 est quasi identique.

Dans la feuille1 appelé MCI Launch, l'opérateur rentre dans les colonnes N , S, X des coefficients compris entre 0 et 1 dans différent module et les 4 colonnes suivantes se remplissent automatiquement.

Dans la feuille 2, je souhaiterai regrouper les valeurs des différents modules.

Les valeurs en N représentent les coefficients affectés au module A, S au module 2, X au module 3.

Lorque je clique sur le bouton Calcul_Page, je voudrai que l'opération suivant se produise :

- dans le feuille vérifier pour chaque de chaque sous ensemble si la valeur dans la case N, S X est nul ou non

- Si elle est non nul, reporter le nom de l'équipement dans la colonne A de la feuille 2, et les valeurs de O,P,Q,R modulo 5 dans les cellules B,C,D,E de la feuille 2 mais dans le tableau correspondant au module.

Pour ce faire j'ai écrit le code suivant, je le lance. Mais rien ne se passe ni aucune erreur ne se produit.

 
Private Sub Calcul_Page_Click()
    Dim LgTablo()
    Dim LgTabloH()
    Dim H As Long, a As Long, b As Long ' Feuille MCI par panneau lien
    Dim i As Long, j As Long, K As Long ' Feuille Launch

LgTabloK = Array(44, 11, 15, 22, 26, 33, 37, 44)
LgTabloH = Array(4, 15, 18, 29, 33, 44)

For K = 0 To UBound(LgTabloK) Step 2
    For j = 13 To 24 Step 5
        If Sheets("MCI Launch").Cells(LgTabloK(K), j).Value <> 0 And Cells(LgTabloK(K), j) <> " " Then
          If Cells(2, j) = "=A" & LgTabloH(H) - 2 Then
            a = Cells(LgTabloH(H), j).End(xlDown).Row
            Range(Cells(a, "A"), Cells(a, "B")) = Sheets("MCI Launch").Range(Sheets("MCI Launch").Cells(LgTabloK(K), "A")).Value
            Range(Cells(a, "C"), Cells(a, "F")) = Sheets("MCI Launch").Range(Sheets("MCI Launch").Cells(LgTabloK(K), j + 1), Sheets("MCI Launch").Cells(LgTabloK(K), j + 4)).Value
          Else
          End If
        Else
        End If
    Next j
Next K

End Sub

Le premier test :

 If Sheets("MCI Launch").Cells(LgTabloK(K), j).Value <> 0 And Cells(LgTabloK(K), j) <> " " Then 

à l'air de fonctionner correctement

Mais le second ne s'active jamais :

 If Cells(2, j) = "=A" & LgTabloH(H) - 2 Then 

J'espère avoir été suffisamment clair.

Merci pour votre aide.

30classeur2.zip (15.30 Ko)

Voilà où j'en suis à l'heure actuelle, mais la structure est à mon avis fausse!

Private Sub Calcul_Page_Click()
    Dim LgTabloK()
    Dim LgTabloH()
    Dim MCI As Worksheet
    Dim H As Long, a As Long ' Feuille MCI par panneau lien
    Dim i As Long, j As Long, K As Long ' Feuille Launch

    Set MCI = Sheets("MCI Launch")

LgTabloH = Array(4,15,18,29,33,44)
LgTabloK = Array(4,11,15,22,16,33,37,44)
a = 0
For K = 0 To UBound(LgTabloK) Step 2
    For j = 13 To 24 Step 5
        With Range(Cells(LgTabloH(H(a)), "A"), Cells(LgTabloH(H(a + 1)), "A"))
            .Formula = "=IF (" & MCI.Cells(LgTabloK(K), j).Address(rowabsolute:=False) & "=0,0,A" & MCI.LgTabloK(K) & ")"
            .Value = .Value
        End With
        With Range(Cells(LgTabloH(H(a)), "B"), Cells(LgTabloH(H(a + 1)), "B"))
            .Formula = "=IF (" & MCI.Cells(LgTabloK(K), j).Address(rowabsolute:=False) & "=0,0,B" & MCI.LgTabloK(K) & ")"
            .Value = .Value
        End With
        With Range(Cells(LgTabloH(H(a)), "C"), Cells(LgTabloH(H(a + 1)), "C"))
            .Formula = "=IF (" & MCI.Cells(LgTabloK(K), j).Address(rowabsolute:=False) & "=0,0," & j + 1 & MCI.LgTabloK(K) & ")"
            .Value = .Value
        End With
        With Range(Cells(LgTabloH(H(a)), "D"), Cells(LgTabloH(H(a + 1)), "D"))
            .Formula = "=IF (" & MCI.Cells(LgTabloK(K), j).Address(rowabsolute:=False) & "=0,0," & j + 2 & MCI.LgTabloK(K) & ")"
            .Value = .Value
        End With
        With Range(Cells(LgTabloH(H(a)), "E"), Cells(LgTabloH(H(a + 1)), "E"))
            .Formula = "=IF (" & MCI.Cells(LgTabloK(K), j).Address(rowabsolute:=False) & "=0,0," & j + 3 & MCI.LgTabloK(K) & ")"
            .Value = .Value
        End With
        With Range(Cells(LgTabloH(H(a)), "F"), Cells(LgTabloH(H(a + 1)), "F"))
            .Formula = "=IF (" & MCI.Cells(LgTabloK(K), j).Address(rowabsolute:=False) & "=0,0," & j + 4 & MCI.LgTabloK(K) & ")"
            .Value = .Value
        End With

        a = a + 2

    Next j
Next K

End Sub

Quelqu'un peut-il m'aider svp???

Hello?

Orchyd a écrit :

Quelqu'un peut-il m'aider svp???

Bonjour

J'ai (j'avais déjà) regardé ton fichier, on ne sait ce qu'il faut faire

Tu dis que ta macro ne fonctionne pas

Mais comme on ne sait pas ce qui faut trouver, la solution est vite trouvée : On ferme le fichier et on passe à autre chose

Mon avis : Tu reprends ton fichier, tu y places la dernière macro que tu as faite, tu notes le résultat manuellement (en y expliquant pourquoi cela serait bien)

Et repostes le tout

Bonjour,

Merci pour ta réponse.

Je vais essayer d'être un peu plus clair. J'ai remi le fichier rempli manuellement avec le résultat que je souhaite obtenir pour les deux premières lignes.

Lorsque je clique sur le bouton Calcul :

Prenons le fichier avec un exemple ( la ligne 4) :

  • Si le coefficient dans la cellule N4 de la feuille "MCI launch" (qui correspond au module A) est différent de zéro, je souhaiterai recopier la cellules A4 et les cellules O4 à R4 dans la feuille "par panneau cellule" A4 à E4.
  • si le coefficient de la cellule N4 de la feuille "MCI Launch" est égale à zéro, on ne recopie pas la valeur.
  • Si le coefficient dans la cellule N5 de la feuille "MCI launch" (qui correspond au module A) est différent de zéro, je souhaiterai recopier la cellules A5 et les cellules O5 à R5 dans la feuille "par panneau cellule" A5 à E5.
  • si le coefficient de la cellule N5 de la feuille "MCI Launch" est égale à zéro, on ne recopie pas la valeur.
Et ainsi de suite pour la colonne N de la feuille "MCI Launch"

Passons à la colonne suivante :

  • Si le coefficient dans la cellule S4 de la feuille "MCI launch" (qui correspond au module B) est différent de zéro, je souhaiterai recopier la cellules A4 et les cellules T4 à W4 dans la feuille "par panneau cellule" A18 à E18.
  • si le coefficient de la cellule N4 de la feuille "MCI Launch" est égale à zéro, on ne recopie pas la valeur.
  • Si le coefficient dans la cellule S5 de la feuille "MCI launch" (qui correspond au module B) est différent de zéro, je souhaiterai recopier la cellules A5 et les cellules T5 à W5 dans la feuille "par panneau cellule" A19 à E19.
  • si le coefficient de la cellule S5 de la feuille "MCI Launch" est égale à zéro, on ne recopie pas la valeur.
Et ainsi de suite pour la colonne S de la feuille "MCI Launch"

Et ainsi de suite pour toutes les cinq colonnes pour chaque sous système de la feuille "MCI Launch"

Comme je l'ai écris dans mon premier poste, le fichier qui est en copie n'est qu'un exemple. Le fichier réel comprend plus de 2000 lignes se répartissant en une vingtaine de sous ensemble et une cinquantaine de modules. c'est pour cette raison que mon code comporte des champs Array.

  • LgTabloK représente les sous systèmes de la feuille "MCI Launch"
  • LgTabloH représente les modules de la feuille "par panneau.
Private Sub Calcul_Page_Click()
    Dim LgTabloK()
    Dim LgTabloH()
    Dim MCI As Worksheet
    Dim H As Long, a As Long ' Feuille MCI par panneau lien
   Dim i As Long, j As Long, K As Long ' Feuille Launch

    Set MCI = Sheets("MCI Launch")

LgTabloH = Array(4, 15, 18, 29, 33, 44)
LgTabloK = Array(4, 11, 15, 22, 16, 33, 37, 44)
a = 0
For K = 0 To UBound(LgTabloK) Step 2
    For j = 13 To 24 Step 5
        With Range(Cells(LgTabloH(H(a)), "A"), Cells(LgTabloH(H(a + 1)), "A"))
            .Formula = "=IF (" & MCI.Cells(LgTabloK(K), j).Address(rowabsolute:=False) & "=0,0,A" & MCI.LgTabloK(K) & ")"
            .Value = .Value
        End With
        With Range(Cells(LgTabloH(H(a)), "B"), Cells(LgTabloH(H(a + 1)), "B"))
            .Formula = "=IF (" & MCI.Cells(LgTabloK(K), j).Address(rowabsolute:=False) & "=0,0," & j + 1 & MCI.LgTabloK(K) & ")"
            .Value = .Value
        End With
        With Range(Cells(LgTabloH(H(a)), "C"), Cells(LgTabloH(H(a + 1)), "C"))
            .Formula = "=IF (" & MCI.Cells(LgTabloK(K), j).Address(rowabsolute:=False) & "=0,0," & j + 2 & MCI.LgTabloK(K) & ")"
            .Value = .Value
        End With
        With Range(Cells(LgTabloH(H(a)), "D"), Cells(LgTabloH(H(a + 1)), "D"))
            .Formula = "=IF (" & MCI.Cells(LgTabloK(K), j).Address(rowabsolute:=False) & "=0,0," & j + 3 & MCI.LgTabloK(K) & ")"
            .Value = .Value
        End With
        With Range(Cells(LgTabloH(H(a)), "E"), Cells(LgTabloH(H(a + 1)), "E"))
            .Formula = "=IF (" & MCI.Cells(LgTabloK(K), j).Address(rowabsolute:=False) & "=0,0," & j + 4 & MCI.LgTabloK(K) & ")"
            .Value = .Value
        End With

        a = a + 2

    Next j
Next K

J'espère que cela est plus clair.

23classeur2.zip (20.21 Ko)

Bonjour

Ce que tu voulais est fait (normalement) dans ce fichier

Merci! Je ne suis plus au boulot, je l'essaie demain matin et je te dit!

En tout cas merci pour ton investissement et ton aide!

C'est quasiment cela.

Dans ton code tu ne travailles que sur le Sous-système 1 de la feuille MCI Launch.

For J = LgTabloK(0) To LgTabloK(1)

En voulant appliquer ton code à tous les Sous systèmes de la feuille MCI Launch défini par LgTabloK(K) à LgTabloK(K+1) :

For J = 0 To UBound(LgTabloK) Step 2

j'obtiens une erreur 1004.

Voici le code en entier et le fichier avec le code modifié en pièce jointe.

Option Explicit

Private Sub Calcul_Page_Click()
Dim LgTabloK(), LgTabloH()
Dim WsMCI As Worksheet
Dim K As Integer, Colonne As Integer ' Feuille Launch
Dim J As Long

  Application.ScreenUpdating = False
  Set WsMCI = Sheets("MCI Launch")

  ' Ligne début et ligne fin de chaque tableau dans la page "MCI Launch"
  ' Un erreur sur le 3ème groupe 16,33 il faut 26,33
  'LgTabloK = Array(4, 11, 15, 22, 16, 33, 37, 44)
  LgTabloK = Array(4, 11, 15, 22, 26, 33, 37, 44)

  ' Ligne début et ligne fin de chaque tableau dans la page "Par panneau"
  LgTabloH = Array(4, 15, 18, 29, 33, 44)

  For K = 0 To UBound(LgTabloH) Step 2
    Colonne = 14 + ((K \ 2) * 5)      ' Donne comme résultat 14 - 19 - 24
    For J = 0 To UBound(LgTabloK) Step 2
    'For J = LgTabloK(0) To LgTabloK(1)
      If WsMCI.Cells(J, Colonne) <> 0 Then
        Range("A" & LgTabloH(K)) = WsMCI.Range("A" & J)
        Range("B" & LgTabloH(K) & ":E" & LgTabloH(K)).Value = WsMCI.Cells(J, Colonne + 1).Resize(1, 4).Value
        LgTabloH(K) = LgTabloH(K) + 1
      End If
    Next J
  Next K
End Sub

Bonjour

La macro correspond à ta demande ?

Que veux tu que je fasse de plus

Quand je te demande de faire un exemple ce n'est pas pour faire joli, car il n'y a que toi qui sait ce qu'il faut obtenir, moi je me suis basé sur ce que tu avais marqué

Je ne devine pas à ta place

Ce que j'ai peur de comprendre

C'est que tu vas essayer de copier 13 lignes (colonne N feuille "MCI Lauch") dans 12 lignes dans le module A de la page "Par panneau"

C'est que tu vas essayer de copier 20 lignes (colonne S feuille "MCI Lauch") dans 12 lignes dans le module B de la page "Par panneau"

et dans le même ordre d'idée pour la colonne X

Je me suis dit que je fais erreur

Il faut que tu fasses un exemple

Franchement, je ne vois pas comment je peux être plus clair!

Le fichier que j'ai posté,, n'est qu'un exemple. Le fichier sur lequel je travaille est adapté à ce que je demande.

Ton code est bien mais ne travaille que le premier sous système et j'aimerai que celui ci travaille sur l'ensemble des sous système. En bref, tu réalises la même chose que ce que tu as fait pour le Sous Système 1 sur les autres sous système. Je ne vois pas ce qu'il y a de compliqué à comprendre!

J'ai refait un exemple, en espérant que celui là t'ira. Onglet : "par panneau original"

Bonjour

Orchyd a écrit :

Franchement, je ne vois pas comment je peux être plus clair!

En m'expliquant

Tu reprends le fichier que je t'ai envoyé

Tu vois dans la colonne N (feuille "MCI Lauch") il y a 13 cellules différentes de 0

Comment fais tu pour stocker ces 13 informations dans une zone qui ne peut en contenir que 12

Et dans la colonne S il y a 20 informations à stocker dans une zone qui ne peut en contenir que 12

C'est ce que j'ai fait si tu regardes le fichier que j'ai mi en pièce jointe dans mon poste précédent.

Le résultat que je souhaite obtenir tu le trouveras dans la feuille "par panneau original". Et j'ai retouché la feuille "MCI Launch" afin qu'elle soit plus adapté à ce que je demande.

Bonjour

C'est un vrai casse tête, et moi qui a du mal à comprendre

A vérifier

Je suis désolé mais je ne peux pas faire mieux pour t'expliquer!


Dsl pour le double poste!

Je te remercie c'est exactement ce que je voulais! Merci beaucoup. Et désolé pour les problèmes de compréhension.

Rechercher des sujets similaires à "copier coller fonction coefficient"