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 :

VBA - Récupérer données de plusieurs feuilles dans userform


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Mars 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2015
    Messages : 8
    Par défaut VBA - Récupérer données de plusieurs feuilles dans userform
    Bonsoir,

    J'utilise actuellement un formulaire pour gérer des informations sur des patients. Je souhaiterai savoir comment je peux dire en vba que je veux telle infos de la feuil1 et telle infos de la feuil2.

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    'Correspond à la liste déroulante Prénom
    Private Sub ComboBox2_Change()
    Dim Ligne As Long
    Dim I As Integer
    Dim TB
      Nettoyage 'Lance le programme Nettoyage
      If Me.ComboBox2.ListIndex = -1 Then Exit Sub
      Ligne = Me.ComboBox2.List(Me.ComboBox2.ListIndex, 1)
      For I = 1 To 117
        Me.Controls("TB31") = Ws.Cells(Ligne, "A").Value
        Me.Controls("TB32") = Ws.Cells(Ligne, "B").Value
        Me.Controls("TB33") = Ws.Cells(Ligne, "C").Value
        Me.Controls("TB2") = Ws.Cells(Ligne, "E").Value
        Me.Controls("TB30") = Ws.Cells(Ligne, "F").Value
        Me.Controls("TB1") = Ws.Cells(Ligne, "G").Value
        Me.Controls("TB12") = Ws.Cells(Ligne, "H").Value
        Me.Controls("TB11") = Ws.Cells(Ligne, "I").Value
        Me.Controls("TB4") = Ws.Cells(Ligne, "J").Value
        Me.Controls("TB16") = Ws.Cells(Ligne, "K").Value
        Me.Controls("TB17") = Ws.Cells(Ligne, "L").Value
        Me.Controls("TB27") = Ws.Cells(Ligne, "M").Value
        Me.Controls("TB28") = Ws.Cells(Ligne, "N").Value
        Me.Controls("TB29") = Ws.Cells(Ligne, "O").Value
        Me.Controls("TB13") = Ws.Cells(Ligne, "P").Value
        Me.Controls("TB14") = Ws.Cells(Ligne, "Q").Value
        Me.Controls("TB15") = Ws.Cells(Ligne, "R").Value
        Me.Controls("TB5") = Ws.Cells(Ligne, "S").Value
        Me.Controls("TB3") = Ws.Cells(Ligne, "T").Value
        Me.Controls("TB7") = Ws.Cells(Ligne, "U").Value
        Me.Controls("TB8") = Ws.Cells(Ligne, "V").Value
        Me.Controls("TB18") = Ws.Cells(Ligne, "W").Value
        Me.Controls("TB10") = Ws.Cells(Ligne, "X").Value
        Me.Controls("TB19") = Ws.Cells(Ligne, "Y").Value
        Me.Controls("TB20") = Ws.Cells(Ligne, "Z").Value
        Me.Controls("TB21") = Ws.Cells(Ligne, "AA").Value
        Me.Controls("TB22") = Ws.Cells(Ligne, "AB").Value
        Me.Controls("TB23") = Ws.Cells(Ligne, "AC").Value
        Me.Controls("TB9") = Ws.Cells(Ligne, "AD").Value
        Me.Controls("TB6") = Ws.Cells(Ligne, "AE").Value
        Me.Controls("TB24") = Ws.Cells(Ligne, "AF").Value
        Me.Controls("TB25") = Ws.Cells(Ligne, "AG").Value
        Me.Controls("TB26") = Ws.Cells(Ligne, "AH").Value
     
        Me.Controls("TB45")=  Ws.Cells(Ligne, "C").Value
        Me.Controls("TB46")=  Ws.Cells(Ligne, "D").Value
    etc jusqu'à 117
     
      Next I
    Ou dois-je ajouter sheets ("feuil1") pour que ça fonctionne.

    Merci à vous

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    l'ajouter devant la référence de la cellule ou encore directement comme par exemple Range("Feuil1!A1").

    Voir l'aide VBA …   Rappel du modèle objet d'Excel :  Application.Workbooks.Worksheets.Range ou Cells …

    ___________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  3. #3
    Membre régulier
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Mars 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2015
    Messages : 8
    Par défaut
    J'ai essayé de l'ajouter dedans mais ça ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Controls("TB31") = Ws.Cells(Ligne, "2017!A").Value
    2017 étant le nom de ma feuille mais ça me renvoie une erreur.
    J'ai également essayé with worksheet ("actes") mais idem, j'ai une erreur. Pourriez-vous m'éclairer?

    Merci

  4. #4
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 705
    Par défaut
    Bonjour

    Attention, compare bien ce que tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ws.Cells(Ligne, "2017!A").Value
    Avec ce que Marc-L écrit :
    Ce n'est pas pareil !!

    Quelques explications :
    Quand tu écris Range("A1"), tu dis que tu t'intéresses à la cellule A1. Quand tu écris Sheets("Feuil1"), tu dis que tu t'intéresses à la feuille Feuil1. En VBA, pour dire que tu t'intéresses à la cellule A1 de la feuille Feuil1, tu écris : Sheets("Feuil1").Range("A1").
    Si tu utilises la syntaxe avec Cells, cela équivaut à : Sheets("Feuil1").Cells(1, 1). La syntaxe Cells demande 2 nombres --> Cells(n° ligne, n° colonne). Si tu veux utiliser la lettre de la colonne, il faut utiliser Range (comme expliqué ci-dessus).
    Tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ws.Cells(Ligne, "2017!A").Value
    mais tu ne dis jamais ce qu'est Ws ! J'imagine que tu as copié ce code de quelque part. Ws est très sûrement une référence à une feuille (le Sheets("Feuil1") que je t'explique ci-dessus).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    'Soit tu écris:
    Dim Ws As Worksheet
    Ws = Sheets("Feuil1")
    Ws.Cells(1, 1).Range("A1").Value = 1
     
    'Soit tu écris:
    Sheets("Feuil1").Range("A1").Value = 1
    Autres remarques par rapport à ton code:
    • Je pense que tu n'as pas bien compris le principe d'une boucle.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      For i = 1 To 10
           MsgBox i
      Next i
      Ce code va te renvoyer 10 fois une message box avec le nombre i. A chaque fois le nombre i sera incrémenté de 1.
      Dans ton code, tu utilises une boucle, mais tu n'utilises pas le I de la boucle. De plus, tu dis que tu as 117 controles, tu les écris tous à la main ET tu fais une boucle pour I = 1 à 117. Donc, tu vas faire 117 fois l'opération sur les 117 controles.

      S'il y a une logique dans les numéros de controles et les numéros de colonnes associés, tu peux écrire quelque chose comme :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      For I = 1 To 117
          Me.Controls("TB" & I) = Ws.Cells(Ligne, I).Value
      Next I
      A chaque I, le controle n° I sera pris en compte et la cellule à la colonne n° I et la ligne n° Ligne sera prise en compte.
    • Tu déclares des variables que tu n'utilises pas et au contraire tu utilises des variables sans jamais dire ce que c'est
      Tu déclares TB, mais tu n'utilises jamais une variable nommée TB. Comme dit précédemment, tu utilises une variable Ws sans jamais dire ce que c'est.




    Il y a beaucoup d'incohérences dans ton code. A ta place, je parcourerais quelques tutos sur VBA avant de continuer, car tu vas te retrouver avec beaucoup de problèmes si tu avances à tatons. Bon courage !

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/06/2015, 11h23
  2. [10g] Récupérer données de plusieurs bases dans un seul script
    Par damienopolis dans le forum PL/SQL
    Réponses: 4
    Dernier message: 13/01/2015, 21h52
  3. [XL-2010] Importer des données de plusieurs fichiers dans une feuille excel en VBA
    Par Alibel dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/10/2013, 15h16
  4. Regrouper les données de plusieurs feuilles dans une
    Par djinero dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/10/2011, 23h47
  5. import de données de plusieurs feuilles dans une seule
    Par naevus dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 10/01/2008, 13h32

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