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

IHM Discussion :

édition d'une matrice comparant les données respectives de 2 tableaux


Sujet :

IHM

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut édition d'une matrice comparant les données respectives de 2 tableaux
    Bonjour,

    Je suis nouveau sur le forum et débutant en VBA. Depuis quelque temps je cherche à résoudre une problématique "pas à pas" en dénichant des solutions de part et d'autre, mais premièrement je ne suis pas convaincu d'aller dans la bonne direction pour avoir un code optimal, et deuxièmement à chacune des ces étapes (potentiellement inutile) je me heurte à des erreurs que je ne comprends pas. Voici ma question :

    Je voudrais intégrer dans un classeur Excel 2 tableaux dans 2 feuilles séparées, puis dans une troisième feuille éditer un tableau dont les valeurs dépendent des 2 premiers (avec dans chaque cellule du 3e tableau le ratio des cellules correspondantes des 2 premiers tableaux). Il existe des solutions sans VBA, mais lorsque je veux faire ce 3e tableau je ne connais pas forcément le nombre de lignes et de colonnes des 2 premiers tableaux. Et comme je dois faire cette édition régulièrement ce serait plus simple de lancer la macro plutôt que de reporter les formules de lignes en ligne et de colonne en colonne en changeant à chaque fois le 3e argument de la fonction "vlookup"...

    Je suis quand même parti sur la fonction vlookup dans le code VBA qui me permettrait de retrouver en fonction de mes étiquettes de lignes les valeurs à comparer. Pour l'utilise il faut donc que j'y inclue les champs où elle va piocher les données dans les 2 premiers tableaux, or ces champs ont un nombre de lignes/colonnes inconnu. Voici mon début de code qui ne fonctionne malheureusement pas (et qui doit paraître horrible pour les yeux de visualbaseurs aguerris) :

    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
     
    sub edition_matricecomparee ()
    Dim Table1 as Range, Table2 as Range
    Dim derlig1 as long, dercol1 as long, derlig2 as long, dercol2 as long
     
    derlig1 = sheets("1").cell.find("*", , , , xlByRow, xlPrevious).Row
    dercol1 = sheets("1").cell.find("*", , , , xlByRow, xlPrevious).Column
    derlig2 = sheets("2").cell.find("*", , , , xlByRow, xlPrevious).Row
    dercol2 = sheets("2").cell.find("*", , , , xlByRow, xlPrevious).Column
    'normalement derlig1=derlig2 et dercol1=dercol2
     
     
    Set table1= worksheets("1").range(cells(1,1), cells(derlig1,dercol1))
    Set table2= worksheets("2").range(cells(1,1), cells(derlig2,dercol2))
    'là j'ai un pb quand je rentre cette deuxième ligne "set", alors que la première toute seule a l'air d'être correcte
     
    For n = 2 to derlig1     'numéro de ligne
    For i =2 to dercol1      'numéro de colonne
    worksheets("3").cells(n,i) = Application.function.vlookup(cells(n,1),table1,i,false)/Application.function.vlookup(cells(n,1),table2,i,false)
    end
     
    End sub
    Merci de me dire ce que vous en pensez, ce que je pourrais corriger, si je suis très loin d'une solution beaucoup plus efficace et si vous avez des pistes de tutos à me conseiller (et donc merci mille fois!)

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    je ne connais pas forcément le nombre de lignes et de colonnes des 2 premiers tableaux
    Est-ce que tu as un nombre totalement variables ou tu as un minimum et un maximum connus ?
    Est-ce que tes données ont toujours la même forme ?

    Parce que personnellement je ferai plutôt cela avec de formule Excel qu'avec du VBA.

    Je ferai :
    1. Créer un modèle pour la comparaison des mes données : 2 feuilles de données + 1feuille de comparaison. 100% pur formule Excel.
      En concevant des formules qui travail sur colonne fixe et non variable, quitte à dupliquer de l'information.
      On peut aussi utiliser certaine fonction Excel pour calculer des colonnes ou des lignes en fonction d'information.
      J'ai par exemple fait une fonction VLookUp (TrouverV) dont la colonne de recherche change en fonction de certains paramètres.
    2. Copier le modèle sous un nom de travail
    3. Copier les données 1 et 2 dans le Excel de travail
    4. Afficher le Excel.


    Cela aurait l'avantage de séparé nettement ce qui dépend en fait de Excel et ce qui dépend de Access.
    Et, probablement, de rendre la chose plus maintenable.

    Sinon comment fais-tu le rapprochement entre tes données 1 et 2 ? As-tu un identifiant unique ?

    Quel est la structure de tes données ?

    As-tu le contrôle et peux-tu éventuellement les modifier ou dois-tu les utiliser telle-que ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour marot_r

    L'ordre de grandeur du nombre de lignes est assez petit (environ 150 - 200), mais ça peut évoluer et je n'ai pas de maximum défini. Je pense que ça n'ira jamais au-delà de 500.
    Il est vrai que mon but était aussi de réaliser ma première vrai macro, mais oui j'avais pensé aussi à la Vlookup variable.
    Sinon comment fais-tu le rapprochement entre tes données 1 et 2 ? As-tu un identifiant unique ?
    Je ne comprend pas ces deux questions.
    Le rapprochement? J'ai deux matrices (tableaux à doubles entrées hors étiquettes de lignes et de colonne)
    (a1 b1 c1) (a2 b2 c2)
    (d1 e1 f1) (d2 e2 f2)
    (g1 h1 i1) (g2 h2 i2)
    et j'en fait un 3e tableau où chaque valeur correspond au quotient des 2 premières :
    (a1/a2 b1/b2 c1/c2)
    (d1/d2 e1/e2 f1/f2)
    (g1/g2 h1/h2 i1/i2)

    Je peux éventuellement modifier la structure des données si besoin.

    ps: sans macro je crois que le plus simple c'est même sans fonction vlookup, c'est directement la formule dans la cellule B2 de la feuille 3 = feuille1!B2/feuille2!B2
    et glisser la formule en colonne puis en ligne.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    OK, merci de ces précisions.

    Vu que tu fais un rapprochement par position (ç-à-d que une cellule dans une feuille correspond à la même dans l'autre feuille) pourquoi te casser la tête ?

    Personnellement je créerai simplement une feuille dans mon Excel modèle avec une formule comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    si(et(feuille1!B2 <>0; feuille2!B2<>0); feuille1!B2/feuille2!B2; si( et(feuille2!B1=0; feuille2!B1<>0); #N/A; "")
    Tu recopies cette formule sur 1000 lignes par sécurité et voilà.

    Moins tu as de pièces dans une application moins tu as de chance qu'elle brise.

    Si tu tiens à ne pas avoir de lignes inutiles, utilises l'enregistreur de macro de Excel et ajoute une formule à une cellule.
    Après va voir le code généré, il suffira de le répéter autant de fois que tu as de ligne de données (avec une boucle évidement :-).

    Voici un algorithme possible :

    1. Efface le contenu de la feuille de ratio.
    2. Pour chacune des lignes
    3. Pour chacune des colonnes
    4. Ajouter la formule à la cellule(ligne, colonne)



    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Je reviens avec un peu de retard juste pour dire merci marot_r
    Option macro abandonnée, je fonctionne avec les fonctions de cellules et ça marche.

    A+

Discussions similaires

  1. [MySQL] Comparer les données d'un formulaire avec celle d'une BDD
    Par roms95200 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 10/04/2015, 00h02
  2. Réponses: 2
    Dernier message: 26/08/2014, 16h37
  3. [XL-2010] [Novice] Comparer les données de Msgbox à un tableaux
    Par fasedan dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/06/2014, 00h14
  4. [XL-2007] comparer les données reçues sur un mois et completer les données manquantes par une macro.
    Par wisemanvsfatboy dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/11/2010, 17h16
  5. Réponses: 3
    Dernier message: 09/04/2006, 12h58

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