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 - Création d'une Boucle à partir d'un Tableau


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 6
    Par défaut VBA - Création d'une Boucle à partir d'un Tableau
    Bonjour,

    Dans le cadre d'un travail informatique, j'ai réalisé un code qui permet d'envoyer certaines informations (envoyer une pub à un conducteur, envoyer une réduction) en fonction de certains critères.
    Cependant, ce code ne fonctionne que pour des nouvelles entrées de conducteurs, j'aimerais réalisé une boucle? pour que ce code s'applique directement aux conducteurs de mon tableau déjà créé.

    Je vous envoie ci-joint, mon code ainsi que le tableau en question pour une meilleure compréhension.

    Je vous remercie d'avance pour votre réponse.

    Nom : CodeConducteur.jpg
Affichages : 677
Taille : 111,7 Ko

    Nom : TableauConducteur.jpg
Affichages : 540
Taille : 345,7 Ko

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonsoir,
    adaptes ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub envoi()
    Dim Cel As Range, Plg As Range
    Dim DC As Range
    With ActiveSheet
      Set DC = .Range("A" & .Rows.Count).End(xlUp)
      Set Plg = .Range("A2", DC)
      For Each Cel In Plg
      Cel = Cel(0, 1) + 1
      Cel(1, 2) = InputBox("entrez le prénom de la personne", "prénom")
      'etc......à adapter et attention aux "Offset", éviter les "Select"
      Next Cel
    End With
     
    End Sub
    Plutôt que d'envoyer une image, tu aurais envoyer le code, j'aurais pu faire un copier/coller et j'aurai nettoyé ton code

    Bonne soirée
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 6
    Par défaut
    Bonsoir,

    Merci beaucoup pour votre réponse ! Etant débutant avec VBA, j'ai eu du mal à adopter votre code à mon tableau.
    Dans mon code, j'ai écrit des lignes pour pouvoir entrer de nouveaux conducteurs mais je me rend compte que ce je souhaite faire, c'est appliquer les commandes d'envois aux conducteurs déjà encodés.
    Je suppose donc que mes premières lignes sont inutiles ?

    Voici mon code (en copiant/collant) :

    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
    Sub Macro1()
     
    ActiveCell.FormulaR1C1 = ActiveCell.Offset(-1, 0).Value + 1
    ActiveCell.Offset(0, 1).Select
    ActiveCell.FormulaR1C1 = InputBox("Entrez le prenom de la personne", "Prenom")
    ActiveCell.Offset(0, 1).Select
    ActiveCell.FormulaR1C1 = InputBox("Entrez la date de naissance", "Date")
    ActiveCell.Offset(0, 1).Select
    ActiveCell.FormulaR1C1 = InputBox("Entrez le numero de gsm", "Numéro")
    ActiveCell.Offset(0, 1).Select
    ActiveCell.FormulaR1C1 = InputBox("Entrez l'émail", "émail")
    ActiveCell.Offset(0, 1).Select
    ActiveCell.FormulaR1C1 = InputBox("Entrez le numero de gsm", "Numéro")
    ActiveCell.Offset(0, 1).Select
    ActiveCell.FormulaR1C1 = InputBox("Est-ce que la voiture est fumeuse ? oui=1 non =0", "fumeur")
    ActiveCell.Offset(0, 1).Select
    experience = InputBox("Niveau d'experience", "expérience")
    ActiveCell.FormulaR1C1 = experience
    ActiveCell.Offset(0, 1).Select
    evaluation = InputBox("Entrez la cote d'evaluation", "Evaluation")
    ActiveCell.FormulaR1C1 = evaluation
    ActiveCell.Offset(0, 1).Select
    ActiveCell.FormulaR1C1 = InputBox("Entrez la description du conducteur", "description")
    ActiveCell.Offset(0, 1).Select
     
    If evaluation <= 6 Then
        If experience <= 10 Then
            pub = "envoyer une publicité pour des cours de pilotage"
        Else
            pub = "envoyer une publicité pour les transports en commun"
        End If
    Else
        If experience <= 6 Then
            pub = "envoyer une publicité pour une reduction tarifaire de 10% sur notre site"
        Else
            pub = "envoyer une publicité pour une reduction tarifaire de 20% sur notre site"
        End If
    End If
     
    ActiveCell.FormulaR1C1 = pub
     
     
    ActiveCell.Offset(1, -10).Select
     
    End Sub
    Merci pour votre réponse,

    Maxime

  4. #4
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Pour la 1ère partie, si j'ai compris, tu dois pouvoir adapter ce code
    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
    Dim experience As Integer, evaluation As Integer
    Dim pub As String
    Dim Cel As Range, Plg As Range
    Dim DC As Range
    With ActiveSheet
      Set DC = .Range("A" & .Rows.Count).End(xlUp)(2, 1) 'on cherche la 1ère cellule vide en A
      Set Plg = .Range("A2", DC(0, 1))
    End With
    DC = DC(-1, 0).Value + 1
    DC(1, 2) = InputBox("Entrez le prenom de la personne", "Prenom")
    DC(1, 3) = InputBox("Entrez la date de naissance", "Date")
    DC(1, 4) = InputBox("Entrez le numero de gsm", "Numéro")
    DC(1, 5) = InputBox("Entrez l'émail", "émail")
    DC(1, 6) = InputBox("Entrez le numero de gsm", "Numéro") 'ici question déjà posée plus haut
    DC(1, 7) = InputBox("Est-ce que la voiture est fumeuse ? oui=1 non =0", "fumeur")
    experience = InputBox("Niveau d'experience", "expérience")
    DC(1, 8) = experience
    evaluation = InputBox("Entrez la cote d'evaluation", "Evaluation")
    DC(1, 9) = evaluation
    DC(1, 10) = InputBox("Entrez la description du conducteur", "description")
    Pour la suite, ça demande des explications plus précises, surtout quand je regarde ton tableau
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 6
    Par défaut
    Merci de votre réponse ,
    C'est bien cela que nous cherchions a faire, ajouter de nouvelles personnes à notre liste .
    Pour ce qui est de la condition avec les pubs , nous cherchons à ce que pour chaque personne de la liste ainsi que les nouvelles personnes enregistré une nouvelle cellule apparait dans laquelle est écrit quel type de pub il faut lui envoyer en fonction du niveau d’expérience et de son évaluation.


    Nom : Capture d’écran 2014-12-27 à 11.22.19.png
Affichages : 446
Taille : 23,4 Ko

    Ps : on va simplifier le niveau d'expérience et l’évaluation des conducteurs dans le tableau par des valeurs numériques simples.

    Je vous remercie d'avance.
    Bien à vous

  6. #6
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Ok, mais tu ne dis rien sur ce je propose en post #4.
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 6
    Par défaut
    Merci pour votre réponse et pour le temps que vous nous accordez !

    Notre tableau conducteur provient d'Access 2013. En effet, nous avons créé une base de donnée et nous avons importé la table "conducteur" sous forme de tableau dans une feuille Excel.
    Dans Access, il est possible de créer une colonne (chez nous évaluation et permis de conduire) avec une bande déroulante qui affiche plusieurs propositions. Dès lors, lorsque l'on enregistre un nouveau conducteur "un ruban" se déroule et laisse apparaitre pour :

    - la colonne évaluation une sélection pour des notes allant de " 1/10 à 10/10 ".
    - la colonne permis de conduire plusieurs choix : "permis depuis moins d'un an, moins de 5 ans, plus de 10 ans, plus de 20 ans,...

    Or, ce procédé ne semble pas fonctionner via Excel. Ce que nous pensons donc faire, c'est remplacer dans Excel les valeurs contenues dans ces colonnes par de simples valeurs numériques.

    On obtient alors ceci :

    Nom : Tableauconducteur2 2.jpg
Affichages : 549
Taille : 326,6 Ko

    la colonne évaluation n'afficherait plus que des valeurs tels que : 1, 2 , 3 ...... jusqu'a 10
    la colonnne permis de conduire n'afficherait plus que des valeurs tels que : 1, 2, 3 ......20 ...30 ... (pour désigner le nombre d'années d'expérience)



    Ceci dans le but d'appliquer ce code :
    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
    If evaluation <= 6 Then
        If experience <= 10 Then
            pub = "envoyer une publicité pour des cours de pilotage"
        Else
            pub = "envoyer une publicité pour les transports en commun"
        End If
    Else
        If experience <= 6 Then
            pub = "envoyer une publicité pour une reduction tarifaire de 10% sur notre site"
        Else
            pub = "envoyer une publicité pour une reduction tarifaire de 20% sur notre site"
        End If
    End If
     
    ActiveCell.FormulaR1C1 = pub
    Ce code ayant pour but pour chaque conducteur de la liste ainsi que les nouvelles personnes enregistrées, la création d'une nouvelle cellule dans laquelle serait écrit le type de publicité qu'il faut lui envoyer en fonction de son niveau d’expérience et de son évaluation.

    Nom : 10884830_1547462972164730_226833710_n.jpg
Affichages : 424
Taille : 12,4 Ko



    J'espère que mes explications sont claires, merci pour votre aide,

    Maxime

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 6
    Par défaut
    Re,

    J'ai réussi péniblement a sortir ce code ci (il est simplifié mais l'idée y est ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Publicité()
     
    'evaluation
    If Range("I2").Value <= 6 Then
         Range("K2").Value = " envoyer une publicité pour des cours de pilotage"
    ElseIf Range("I2").Value > 6 Then
         Range("K2").Value = " ne pas envoyer de publicité pour des cours de pilotage"
     
    End If
     
    End Sub
    Le problème, c'est que lorsque je l'applique il fonctionne pour mon premier conducteur mais pas pour les suivants, je cherche a ce qu'il s'applique à tout les conducteurs...

    Bien à vous

    Maxime

  9. #9
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 560
    Par défaut
    Bonjour

    Citation Envoyé par m.renauld Voir le message
    ...
    Dans access, il est possible de créer une colonne (chez nous évaluation et permis de conduire) avec une bande déroulante qui affiche plusieurs propositions. Dès lors, lorsque l'on enregistre un nouveau conducteur "un ruban" se déroule et laisse apparaitre pour :

    - la colonne évaluation une sélection pour des notes allant de " 1/10 à 10/10 ".
    - la colonne permis de conduire plusieurs choix : "permis depuis moins d'un an, moins de 5 ans, plus de 10 ans, plus de 20 ans,...

    Or, ce procédé ne semble pas fonctionner via excel. ...
    Si j'ai bien compris, tu parles de liste déroulante de choix : cela existe dans Excel via Données, Validation.

    Ce que je ne saisis pas, c'est l'intérêt d'exporter les données dans Excel alors que tout cela est réalisable dans Access par une simple requête...

  10. #10
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    regardes et adaptes ce code en fonction des colonnes, ici on parcourt toutes les données
    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
    Sub eval()
    'Dim experience As Integer, evaluation As Integer
    Dim pub As String
    Dim Cel As Range, Plg As Range
    Dim DC As Range
    With ActiveSheet
      Set DC = .Range("I" & .Rows.Count).End(xlUp) 'on cherche la dernière cellule renseignée en A
      Set Plg = .Range("I2", DC)
    End With
    For Each Cel In Plg
      If Cel.Value <= 6 Then
        If Cel(1, 0) <= 10 Then
          pub = "envoyer une publicité pour des cours de pilotage"
        Else
          pub = "envoyer une publicité pour les transports en commun"
        End If
      Else
        If Cel(1, 0) <= 6 Then
          pub = "envoyer une publicité pour une reduction tarifaire de 10% sur notre site"
        Else
          pub = "envoyer une publicité pour une reduction tarifaire de 20% sur notre site"
        End If
      End If
      Cel(1, 3) = pub
    Next Cel
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 6
    Par défaut
    Citation Envoyé par 78chris Voir le message
    Bonjour



    Si j'ai bien compris, tu parles de liste déroulante de choix : cela existe dans Excel via Données, Validation.

    Ce que je ne saisis pas, c'est l'intérêt d'exporter les données dans Excel alors que tout cela est réalisable dans Access par une simple requête...
    Bonjour, merci pour votre réponse. Il est vrai qu'il aurait été plus facile de créer une requête à partir de ma base de données mais dans le cadre de mon travail, je dois obligatoirement réaliser un code à partir de VBA et ce pour après en tirer une analyse statistique.


    Citation Envoyé par casefayere Voir le message
    regardes et adaptes ce code en fonction des colonnes, ici on parcourt toutes les données
    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
    Sub eval()
    'Dim experience As Integer, evaluation As Integer
    Dim pub As String
    Dim Cel As Range, Plg As Range
    Dim DC As Range
    With ActiveSheet
      Set DC = .Range("I" & .Rows.Count).End(xlUp) 'on cherche la dernière cellule renseignée en A
      Set Plg = .Range("I2", DC)
    End With
    For Each Cel In Plg
      If Cel.Value <= 6 Then
        If Cel(1, 0) <= 10 Then
          pub = "envoyer une publicité pour des cours de pilotage"
        Else
          pub = "envoyer une publicité pour les transports en commun"
        End If
      Else
        If Cel(1, 0) <= 6 Then
          pub = "envoyer une publicité pour une reduction tarifaire de 10% sur notre site"
        Else
          pub = "envoyer une publicité pour une reduction tarifaire de 20% sur notre site"
        End If
      End If
      Cel(1, 3) = pub
    Next Cel
    End Sub
    Merci !! c'est exactement ce que je souhaitais faire ! Je vais maitenant essayer de l'associer à un autre code afin de réaliser un graphique à partir des données collectées, je viendrai poster le résultat.

    Merci pour votre aide,

    Maxime

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/06/2012, 08h08
  2. Réponses: 1
    Dernier message: 07/04/2011, 20h28
  3. Réponses: 1
    Dernier message: 25/10/2009, 20h26
  4. Création d'une boucle VBA pour la fonction SOMME.SI
    Par choudoudou15 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/05/2009, 12h03
  5. [Net]Création d'une URL à partir d'une File
    Par maxvador dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 11/12/2005, 21h22

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