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 :

macro récupération de données et boucle


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Femme Profil pro
    stagiaire
    Inscrit en
    Mai 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : stagiaire
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2016
    Messages : 10
    Par défaut macro récupération de données et boucle
    Bonjour,
    j'ai un classeur excel prep_nouvelle_organisation qui contient deux pages, une importations et une aideprep
    je souhaite faire une (ou plusieurs) macros, qui
    1) récupère automatiquement les informations des cellules Ai, Ci, Di, Ii, Mi de la feuille importations vers la feuille aideprep dans les cellules B3, B4, B5, B6, B7.
    Pour le moment, j'ai réussi à créer la macro suivante:
    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 Macro7() 
    ' 
    ' Macro7 Macro 
    ' 
    ActiveCell.FormulaR1C1 = "=importation!R[-1]C[-1]" 
    ActiveCell.Offset(1, 0).Range("A1").Select 
    ActiveCell.FormulaR1C1 = "=importation!R[-2]C[1]" 
    ActiveCell.Offset(1, 0).Range("A1").Select 
    ActiveCell.FormulaR1C1 = "=importation!R[-3]C[2]" 
    ActiveCell.Offset(1, 0).Range("A1").Select 
    ActiveCell.FormulaR1C1 = "=importation!R[-4]C[7]" 
    ActiveCell.Offset(1, 0).Range("A1").Select 
    ActiveCell.FormulaR1C1 = "=importation!R[-5]C[11]" 
    ActiveCell.Offset(1, 0).Range("A1").Select 
    End Sub
    Je voudrais faire une boucle qui, quand je clique sur le bouton suivant efface les informations des cellules de la feuille importations et récupère celles de la ligne suivante de la feuille aideprep
    2) je rajoute une contrainte: il faut que si/tant que Ai (feuille importation)= Ai+1 (feuille importation),
    C3 (feuille aideprep) = Ai (feuille importation)
    et C4 (feuille aideprep) = Ci+1 (feuille importation)
    et C5 (feuille aideprep) = Di+1 (feuille importation)
    et C6 (feuille aideprep) = Ii+1 (feuille importation)
    et C7 (feuille aideprep) = Mi+1 (feuille importation)
    Sinon,
    on reprend la première macro
    B3 (feuille aideprep) = Ai (feuille importation)
    et B4 (feuille aideprep) = Ci (feuille importation)
    et B5 (feuille aideprep) = Di (feuille importation)
    et B6 (feuille aideprep) = Ii (feuille importation)
    et B7 (feuille aideprep) = Mi (feuille importation)
    Merci beaucoup de votre aide, ça fait plusieurs jours que je galère.
    N'hésitez pas à me dire si vs n'avez pas assez d'infos!

  2. #2
    Membre expérimenté
    Homme Profil pro
    développeur
    Inscrit en
    Février 2013
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : développeur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 123
    Par défaut
    Bonjour.

    Tes explications ne sont pas très claires.
    La variable i va de quelle valeur à quelle valeur?
    Tu souhaites concaténer le contenu de plusieurs cellules dans une seule?
    Je voudrais faire une boucle qui, quand je clique sur le bouton suivant efface les informations des cellules de la feuille importations et récupère celles de la ligne suivante de la feuille aideprep
    Comment veux-tu les récupérer? Tu veux les inscrire quelque part ou les stocker dans une variable?
    Le bouton effectuera ces actions pour toutes les valeurs de i?

    Sinon, utilises les balises [CODE] pour afficher tes lignes de code, plus facile à lire

    Bonne journée !

  3. #3
    Membre régulier
    Femme Profil pro
    stagiaire
    Inscrit en
    Mai 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : stagiaire
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2016
    Messages : 10
    Par défaut
    Alors,

    ma variable i va de 1 à 1000 par exemple, ce sont les numéros des lignes remplies sur ma feuille importation.

    et non je ne souhaite pas concaténer le contenu de plusieurs cellules dans une seule mais simplement mettre 5 cellules de la feuille importation dans 5 cellules de la feuille aideprep. Et ensuite, en appuyant sur un bouton suivant, mettre 5 autres cellules de la feuille importation (celles la ligne en dessous) dans les mêmes 5 cellules de la feuille aideprep (les autres sont donc effacées c'est pas un problème).

    En fait, la feuille importation c'est mon stock de données et la feuille aideprep vient tirer 5 infos clés pour chaque ligne.
    Donc Le bouton effectuera ces actions pour toutes les valeurs de i oui et je veux inscrire mes infos dans 5 cellule de la feuille aideprep et pas les stocker

    et merci bp de ta réponse!
    dsl je débute tout juste je suis pas une pro, demande si tu as besoin de plus d'explications.

    en pj j'ai mis le code que j'ai fait si tu veux
    Images attachées Images attachées  

  4. #4
    Membre expérimenté
    Homme Profil pro
    développeur
    Inscrit en
    Février 2013
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : développeur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 123
    Par défaut
    Tout d'abord, il faut une variable qui servira de compteur, elle ne devra pas se réinitialiser, je pense donc à une variable publique
    Dans un nouveau module, mettre :
    Ensuite, pour les 5 premières cellules :
    Dans la macro de l'event workbook_open :
    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
     
    i = 1
    if sheets("importation").range("A1") = sheets("importation").range("A2") then
    sheets("aideprep ").range("C3") = sheets("importation").range("A1")
    sheets("aideprep ").range("C4") = sheets("importation").range("C2")
    sheets("aideprep ").range("C5") = sheets("importation").range("D2")
    sheets("aideprep ").range("C6") = sheets("importation").range("I2")
    sheets("aideprep ").range("C7") = sheets("importation").range("M2")
    else
    sheets("aideprep ").range("B3") = sheets("importation").range("A1")
    sheets("aideprep ").range("B4") = sheets("importation").range("C1")
    sheets("aideprep ").range("B5") = sheets("importation").range("D1")
    sheets("aideprep ").range("B6") = sheets("importation").range("I1")
    sheets("aideprep ").range("B7") = sheets("importation").range("M1")
    endif
    Pour le reste :
    Dans la macro du bouton "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
     
    i = i+1
    if sheets("importation").range("A" & i) = sheets("importation").range("A" & i+1) then
    sheets("aideprep ").range("C3") = sheets("importation").range("A" & i)
    sheets("aideprep ").range("C4") = sheets("importation").range("C" & i+1)
    sheets("aideprep ").range("C5") = sheets("importation").range("D" & i+1)
    sheets("aideprep ").range("C6") = sheets("importation").range("I" & i+1)
    sheets("aideprep ").range("C7") = sheets("importation").range("M" & i+1)
    else
    sheets("aideprep ").range("B3") = sheets("importation").range("A" & i)
    sheets("aideprep ").range("B4") = sheets("importation").range("C" & i)
    sheets("aideprep ").range("B5") = sheets("importation").range("D" & i)
    sheets("aideprep ").range("B6") = sheets("importation").range("I" & i)
    sheets("aideprep ").range("B7") = sheets("importation").range("M" & i)
    endif
    Je pense que ça devrait être bon comme ça

  5. #5
    Membre régulier
    Femme Profil pro
    stagiaire
    Inscrit en
    Mai 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : stagiaire
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2016
    Messages : 10
    Par défaut
    Merci bp!
    Par contre quand on met dans un nouveau module Public i As Integer, il faut que le module commence par sub?

  6. #6
    Membre expérimenté
    Homme Profil pro
    développeur
    Inscrit en
    Février 2013
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : développeur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 123
    Par défaut
    Pas besoin. C'est seulement nécessaire pour les fonctions publiques.

  7. #7
    Membre régulier
    Femme Profil pro
    stagiaire
    Inscrit en
    Mai 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : stagiaire
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2016
    Messages : 10
    Par défaut
    Je suis dsl, je dois pas être douée mais j'ai un msg d'erreur "Erreur de compilation attribut incorrect dans une procédure sub ou function"

    en fait je peux pas faire un module sans commencer par sub? du coup je commence par sub et je continue par Public i As Integer et ça met un msg d'erreur

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

Discussions similaires

  1. [XL-2010] Problème macro récupération de données
    Par dy974 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/08/2014, 11h51
  2. [MySQL] Création de variables dans une boucle et récupération de données avec une requête
    Par lavande4 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/09/2008, 11h10
  3. Réponses: 2
    Dernier message: 02/01/2008, 23h58
  4. [VBA-E] Macro Récupération de donnée afin d'en faire un rapport.
    Par strifer dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 25/07/2006, 15h37
  5. [D6 => XML] Récupération de données avec une boucle.
    Par Bason_sensei dans le forum Delphi
    Réponses: 1
    Dernier message: 23/05/2006, 13h50

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