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

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 85
    Points : 33
    Points
    33
    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 éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    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
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 85
    Points : 33
    Points
    33
    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 éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    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
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 85
    Points : 33
    Points
    33
    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
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 85
    Points : 33
    Points
    33
    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 éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    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

  8. #8
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 85
    Points : 33
    Points
    33
    Par défaut
    non je n'ai pas le bon code.

  9. #9
    Membre émérite

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Points : 2 523
    Points
    2 523
    Billets dans le blog
    1
    Par défaut
    salut
    le code vba est obligatoire ?
    parce que ça marche aussi en matricielle?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME(SI($A8=$M$8:$M$144;SI(B$6=$N$8:$N$144;$O$8:$O$144;0);0))
    a placer en B8 à valider par Ctrl+shift+entrée
    et à tirer à droite jusqu'en K8 et tirer la ligne jusqu'en K84
    Daranc
    j'oubliais mettre dans les options l'affichage de la valeur zéro décoché

  10. #10
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 85
    Points : 33
    Points
    33
    Par défaut
    Merci Daranc, oui je dois tout faire en VBA.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 85
    Points : 33
    Points
    33
    Par défaut
    En fait mes données changent régulièrement donc je ne peux fixer ni le nombre de colonne ni le nombre de lignes.

    Merci pour votre aide!

+ 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