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 :

Obtenir information d'une cellule d'un autre tableau


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juin 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Juin 2014
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Obtenir information d'une cellule d'un autre tableau
    Bonjour à tous,
    Je vais sans doute vous poser une question qui va sembler stupide mais je débute en VBA. J'effectue en ce moment un stage, et je dois réaliser un programme dans lequel je vais chercher des informations dans X tableaux de X employés. Avec ces informations (présence ou absence jour par jour) je dois réaliser un tableau "base" unique de x lignes (une par employé). Voilà je tâtonne, et je n'arrive pas à partir d'une macro effectuée dans le tableau "résultat" obtenir des données d'un autre tableau. Pour être plus clair je voudrais par exemple que la cellule (i,j) de "résultat" soit égale à 1 si la cellule (i,j) du tableau toto vaut 1. Je ne connais pas la syntaxe VBA pour faire un "cells" dans un autre tableau que celui où je programme.
    Voilà j'espère avoir était clair.
    Par avance merci
    Arno

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Il faut simplement indiquer au compilateur les feuilles que tu souhaite prendre en compte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Worksheets("Feuil1").Cells(I, J).Value = Worksheets("Feuil2").Cells(I, J).Value
    Mais à priori, pour ce que tu veux faire, une simple formule Excel devrait suffire !

    Hervé.

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il faudrait savoir ce que tu appelles par tableau.
    Est-ce une plage de données ou un tableau que l'on insère par l'onglet [Insertion], groupe Tableaux, commande Tableau
    Si c'est la dernière hypothèse, il faut utiliser l'objet ListObject

    Scénario 1 - Lecture d'un tableau
    Exemple 1 - On veux lire la cellule de la ligne 1, colonne 2 de la plage de données du tableau nommé monTableau de la feuille nommée [Feuil3]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub ListObjectAccess()
     Dim sht As Worksheet, oList As ListObject
     Set sht = ThisWorkbook.Worksheets("Feuil3")
     Set oList = sht.ListObjects("monTableau")
     With oList
      MsgBox .DataBodyRange.Cells(1, 2) ' Lecture de la ligne 1, colonne 2 de la plage des valeurs du tableau [monTableau]
     End With
     Set sht = Nothing: Set oList = Nothing
    End Sub
    Explications Extraites de l'aide (F1))
    DataBodyRange : Cette propriété renvoie un objet Range qui représente la plage de valeurs, à l'exception de la ligne d'en-tête dans une table. Type de données en lecture seule
    Cells : Cette propriété renvoie un objet Range qui représente les cellules contenues dans la plage spécifiée.

    Exemple 2 : On est certain qu'il y a un seul tableau dans toutes les feuilles du classeur (ThisWorkbook) dont le nom commence par [Employe]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub LectureTableau()
     Dim sht As Worksheet, olist As ListObject
     For Each sht In ThisWorkbook.Worksheets
      If Trim(LCase(Left(sht.Name, 7))) = "employe" Then
       Set olist = sht.ListObjects(1)
        MsgBox olist.DataBodyRange.Cells(1, 2) ' Lecture de la ligne 1, colonne 2 de la plage des valeurs du tableau 1
      End If
     Next
     Set sht = Nothing: Set olist = Nothing
    End Sub
    On peut également lire la ligne d'une colonne en donnant le nom de son étiquette.

    Scénario 2 - Lecture d'une cellule d'une plage de cellules
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub PLageCellule()
     Dim sht As Worksheet, rng As Range
     Set sht = ThisWorkbook.Worksheets("Feuil4")
     Set rng = sht.Range("A1").CurrentRegion
     MsgBox rng.Cells(2, 1) ' Lecture de la ligne 2, colonne 1
     Set sht = Nothing: Set rng = Nothing
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juin 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Juin 2014
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Merci
    Merci à vous 2 pour cette réponse, je vais m'y plonger pour tenter de comprendre.
    J'ai fait un petit test, avec le programme suivant :

    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
    Sub boucle_while()
        Workbooks.Open Filename:="D:\uzo35o\Mes Documents\Stage\source\feuilletest.xls"
        Dim ligne As Integer
        Dim col As Integer
        ligne = 15
        col = 3
        While ligne < 30
        If Cells(ligne, col) = 1 Then  'pose problème : je voudrais qu'il aille chercher dans un autre tableau
        Cells(ligne - 2, col + 6) = 1 'pour mettre le résultat dans ce tableau
        Else
        Cells(ligne - 2, col + 6) = 0
        End If
        ligne = ligne + 1
        Wend
    End Sub
    En fait le programme marche, c'est juste que lorsque je fais If Cells(ligne, col) = 1 Then Excel teste la cellule de la feuille dans laquelle je programme alors que je voudrais qu'il teste les cellules se trouvant dans un autre tableau excel ,enregistrer ailleurs : à l'endroit définit au début :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks.Open Filename:="D:\uzo35o\Mes Documents\Stage\source\feuilletest.xls"
    Voilà ça doit être évident pour des habitués mais là je sèche!
    Merci

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    En fait le programme marche, c'est juste que lorsque je fais "If Cells(ligne, col) = 1 Then" Excel teste la cellule de la feuille dans laquelle je programme alors que je voudrais qu'il teste les cellules se trouvant dans un autre tableau excel ,enregistrer ailleurs : à l'endroit définit au début : Workbooks.Open Filename:="D:\uzo35o\Mes Documents\Stage\source\feuilletest.xls"
    Voilà ça doit être évident pour des habitués mais là je sèche!
    Le problème vient du fait que lorsque tu testes avec cette instruction if Cells(Ligne, Colonne) then, tu ne précises pas de quelle feuille et de quel classeur il s'agit. Donc tu as l'information de la cellule de la feuille active.
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Workbooks("NomClasseur").Worksheets("Nomfeuille").Cells(1, 2) = 1 Then ...
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juin 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Juin 2014
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Merciiiiiiii
    Un grand merci Philippe ça marche maintenant, tu me retires une grosse épine du pied, je vais pouvoir continuer à avancer (enfin essayer)
    Merci !!!

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juin 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Juin 2014
    Messages : 10
    Points : 6
    Points
    6
    Par défaut encore bloqué ..
    Bonjour,
    J'ai bien avancé grâce à tes conseils.
    Je me permets une autre question :
    Le tableau à partir duquel j'obtiens mes données, que je mets en forme grâce à ma macro, proviens lui même d'une macro excel.
    Est-il possible de faire "marcher" la macro du programme d'origine à partir de ma macro.
    C'est-à-dire :
    - Dans la macro source on choisit d'obtenir des tableaux par employé ensuite on choisit l'employé et enfin on obtient le tableau final que j'utilise.
    - est-il possible dans ma macro de lancer la création des tableaux de tous les employés?
    Je ne sais pas si j'ai été très clair!

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je ne sais pas si j'ai bien compris la question.
    Ce que l'on appelle macro est en fait une procédure "Sub" et il existe également des "function". Une procédure peut bien entendu appeler une autre procédure.
    Soit par son nom suivi de son ou de ses arguments ou bien par le mot clé Call

    La procédure nommée Main peut appeler la procédure nommée LectureTableau comme l'exemple ci-dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Main()
      LectureTableau
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juin 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Juin 2014
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Merci pour ta réponse

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juin 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Juin 2014
    Messages : 10
    Points : 6
    Points
    6
    Par défaut impossible?
    En fait, je ne pense pas que ce que je voulais faire à l'origine soit possible. Il existe à l'origine une macro VBA qui lorsque l'on clique sur un bouton donne une liste d'employés puis si on clique sur un employé donne son planning.
    J'aurais aimé récupérer le planning directement en indiquant à ma macro : "appuyer sur le bouton" puis "sélectionner l'employé X" mais les programme est protégé par un mot de passe. dommage.
    Merci tout de même

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/07/2014, 16h46
  2. Réponses: 1
    Dernier message: 09/05/2014, 19h25
  3. Réponses: 5
    Dernier message: 13/11/2012, 18h48
  4. [VBA]Copier le contenu d'une cellule d'un autre classeur
    Par dudu59 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 01/02/2006, 17h08
  5. Réponses: 3
    Dernier message: 27/01/2006, 18h35

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