IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

deplacement dans matrice


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 85
    Par défaut deplacement dans matrice
    Bonjour,

    Je veux faire une macro à partir du classeur que j'ai mis en pièces jointes.
    Mes données sont dans les trois colonnes m n et o. Pour chaque GOP (en ligne, de b à k) je souhaite attribuer le montant correspondant a chaque nom (dans la coloone A).

    Exemple: Pour bakhos et FTD je dois avoir le montant correspondant ,c.a.d "887 524.23" en D8 et ainsi de suite.

    Voila j'espère que je suis assez clair et que quelqu'un pourra m'aider, merci!

    Ah et au fait , je ne peux pas enregistrer ou ouvrir les pièces jointes depuis mon poste car c'est bloqué par la boite ou je travaille.
    Si vous répondez pouvez-vous mettre le code dans une balise , ca serait sympa, merci.

    Bonjour,

    je renvois mon fichier en piece jointe, j'ai codé ce que j'arrivais à coder..mais qui ne suffit pour faire ce que je veux. Ma procedure fai appel à une table de correspondance qui cherche et attribue le montant dans la colonne B (Or je veux que ce montant soit collé dans la bonne colonne en fonction du nom qui lui est attribué). Cf:piece jointe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    Sub colgop()
     
        Dim PlageSource As Range
        Dim PlageRecherche As Range
        Dim CelSource As Range
        Dim CelTrouvee As Range
        Dim ValeurTrouvee As Variant
     
     
        Set PlageSource = Worksheets("test").Range("a8:a" & Worksheets("test").Range("a8").End(xlDown).Row)
        Set PlageRecherche = Worksheets("test").Range("m8:m" & Worksheets("test").Range("m8").End(xlDown).Row)
     
        For Each CelSource In PlageSource
            Set CelTrouvee = PlageRecherche.Find(what:=CelSource.Value, LookIn:=xlValues, lookat:=xlWhole)
            If Not CelTrouvee Is Nothing Then CelSource(1, 2).Value = CelTrouvee(1, 3).Value
        Next CelSource
     
        Set PlageSource = Nothing
        Set PlageRecherche = Nothing
        Set CelSource = Nothing
        Set CelTrouvee = Nothing
        Set ValeurTrouvee = Nothing
     
    End Sub
    Je pense qu'il faut que je definisse une autre variable pour les noms qui sont en lignes 6, mais je ne sais pas comment faire.

    Pouvez-vous m'aider ou bien me donner un conseil?

    Merci d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    bonjour,

    une solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Sub MesSommes()
     
    Nom = Worksheets("Sheet1").Range("m8:m" & Worksheets("Sheet1").Range("m8").End(xlDown).Row).Address(, , xlR1C1) '
    GOP = Worksheets("Sheet1").Range("n8:n" & Worksheets("Sheet1").Range("n8").End(xlDown).Row).Address(, , xlR1C1) '
    Montant = Worksheets("Sheet1").Range("o8:o" & Worksheets("Sheet1").Range("o8").End(xlDown).Row).Address(, , xlR1C1) '
     
    With Sheets("Sheet1").Range("B8:k" & Worksheets("Sheet1").Range("a8").End(xlDown).Row)
      'insertion formule
      .FormulaR1C1 = "=SUMPRODUCT((" & Nom & "=RC1)*(" & GOP & "=R6C)*" & Montant & ")"
      ' pour n'obtenir que la valeur
      .Copy:  .PasteSpecial Paste:=xlPasteValues
      'format de celluel
      .Style = "Currency"
    End With
    End Sub
    cordialement

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 85
    Par défaut
    Bonjour Fred, je te remercie pour ton aide.

    Je dois maintenant faire la somme de chaque colonne de GOP en ligne7 (juste au dessus des montants que j'ai dans le tableau) .

    J'ai commencer à coder ceci mais il me manque quelque chose:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Sub totauxGop()
    Dim dercol As Integer
    Dim derli As Integer
    Dim i As Integer
    Dim j As Integer
     
        derli = Columns(1).Find("*", , , , , xlPrevious).Row
        dercol = Rows(6).Find("*", , , , , xlPrevious).Column
        For i = derli To 8 Step -1
            For j = dercol To 2 Step -1
            Cells(7, j) = Cells(i - 1, j) + Cells(i, j)
     
        Next j
        Next i
     
    End Sub

    Ce qui se passe c'est que ma ligne 7 ne garde pas le montant précédent et donc je n'ai pas la somme de toutes les valeurs de toute la colonne.

    Je ne veux pas faire une formule somme (formula R1C1) a moins que l'on puisse que l'on puisse intégrer des variables dans cette formule, car la taille de ma ligne 6 est variable(nombre de GOP).

    Peux tu m'éclairer la dessus, merci

  4. #4
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    bonjour
    sans boucle, plus rapide.
    Accepte un nombre de GOP variable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    Sub MesSommes()
     
    Nom = Worksheets("Sheet1").Range("m8:m" & Worksheets("Sheet1").Range("m8").End(xlDown).Row).Address(, , xlR1C1) '
    GOP = Worksheets("Sheet1").Range("n8:n" & Worksheets("Sheet1").Range("n8").End(xlDown).Row).Address(, , xlR1C1) '
    Montant = Worksheets("Sheet1").Range("o8:o" & Worksheets("Sheet1").Range("o8").End(xlDown).Row).Address(, , xlR1C1) '
     
    derli = Worksheets("Sheet1").Columns(1).Find("*", , , , , xlPrevious).Row
    dercol = Worksheets("Sheet1").Rows(6).Find("*", , , , , xlPrevious).Column
     
    'insertion formules
    Sheets("Sheet1").Range(Cells(8, dercol), Cells(derli, dercol)).FormulaR1C1 = _
      "=SUMPRODUCT((" & Nom & "=RC1)*(" & GOP & "=R6C)*" & Montant & ")"
    Sheets("Sheet1").Range(Cells(7, 2), Cells(7, dercol)).FormulaR1C1 = _
      "=SUM(R8C:R" & derli & "C)"
     
    With Sheets("Sheet1").Range(Cells(7, 2), Cells(derli, dercol))
      ' pour n'obtenir que la valeur
      .Copy:  .PasteSpecial Paste:=xlPasteValues
      'format de cellule
      .Style = "Currency"
    End With
     
    End Sub
    cordialement

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 85
    Par défaut
    Ok merci c'est bien optimisé comme ça!

    Je viens juste de trouver de mon coté (pour les soustotaux ligne 7)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Sub totauxGop()
    Dim j As Integer
    Dim i As Integer
    Dim dercol As Integer
    Dim derli As Integer
     
    dercol = Rows(6).Find("*", , , , , xlPrevious).Column
    derli = Columns(1).Find("*", , , , , xlPrevious).Row
        For j = 2 To dercol
            For i = 8 To derli
                Cells(7, j) = Cells(7, j) + Cells(i, j) + Cells(i + 1, j)
                i = i + 1
            Next i
        Next j
    j = j + 1
    End Sub
    Je pense quand meme que je vai utiliser ta solution! merci beaucoup et bonne journée Fred!

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 85
    Par défaut
    J'ai le problème suivant, le code fonctionne, aucun problème de syntaxe, mais ne remplit que la dernière colonne du tableau.

    Je ne sais pas d'ou ça peut venir, peut etre de l'insertion des formules:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    'insertion formules
    Sheets("Sheet1").Range(Cells(8, dercol), Cells(derli, dercol)).FormulaR1C1 = _
      "=SUMPRODUCT((" & Nom & "=RC1)*(" & GOP & "=R6C)*" & Montant & ")"
    Sheets("Sheet1").Range(Cells(7, 2), Cells(7, dercol)).FormulaR1C1 = _
      "=SUM(R8C:R" & derli & "C)"

  7. #7
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    bonjour

    il y avait une erreur dans le dernier code, je l'ai réédité environ 5 minutes après l'avoir posté. As tu le bon?

    Pour moi toutes les cellules sont correctement remplies

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Se deplacer dans la fenetre de console
    Par barthelv dans le forum Windows
    Réponses: 3
    Dernier message: 01/08/2006, 00h17
  2. [VBA-E] ComboBox en cascade avec correspondance dans matrice
    Par ViperSpy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/06/2006, 17h01
  3. les boutons de deplacements dans les formullaire
    Par adil_math2006 dans le forum Access
    Réponses: 2
    Dernier message: 26/05/2006, 21h44
  4. [C#][debutant]deplacement dans un datagrid
    Par christophebmx dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/11/2005, 14h48
  5. Se deplacer dans le contenu d un combobox
    Par gilles641 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 17/08/2005, 08h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo