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 :

[E-03] Récupérer la valeur d'une cellule après un test dans une autre (boucle)


Sujet :

Macros et VBA Excel

  1. #1
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut [E-03] Récupérer la valeur d'une cellule après un test dans une autre (boucle)
    Bonjour, je voudrais effectuer une boucle, afin de récupérer des données dans des variables.

    J'ai deux colonnes dans ma feuille de classeur :
    -Une avec des type d'intervention
    -L'autre avec des temps
    (Voir pièce jointe)

    Je veux venir tester la colonne A, si je trouve par exemple le champs "Dépannage", alors j'attribue à une variable que j'appelle ici VarDépannage, le temps correspondant au dépannage (Colonne B).

    Mais je ne sais pas comment faire. Pour le momment j'ai fait comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For Each cel In Range("b:b")
    If cel.Value = Dépannage Then
    VarDépannage = ActiveCell.Offset(0, 1).Value
    Else
    End If
    Next
    Pouvez vous me dire ce qui ne va pas?

    Merci
    Images attachées Images attachées  

  2. #2
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    bonjour moilou2 le forum a adapter
    Option Explicit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test6()
    Dim c As Range, VarDépannage As String
    For Each c In Range("a:a")
    If c = "Dépannage" Then
    VarDépannage = c.Offset(0, 1)
    MsgBox VarDépannage
    End If: Next
    End Sub
    autrement tu peus t orienter sur un truc dans ce genre un InputBox

    Option Explicit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub cherche()
     Dim nom As String, c As Range, champ, premier As Variant
     nom = InputBox("Nom cherché?")
     Set champ = [A:A]
      Set c = champ.Find(nom, LookIn:=xlValues, LookAt:=xlWhole)
     If Not c Is Nothing Then
       premier = c.Address
      Do
      MsgBox nom & "   temps   " & c.Offset(0, 1).Value
       Set c = champ.FindNext(c)
      Loop While Not c Is Nothing And c.Address <> premier
      End If
    End Sub
    SALUTATIONS

  3. #3
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Re et merci pour ton aide, mais je ne veux pas les afficher les variables.

    En fait, j'ai une feuille avec des données annuelle, et tous les mois, à l'aide de code vba, je viens faire des statistiques sur ces données, en appuyant sur un bouton (il y a 12 boutons, 1 par mois), l'opérateur vient génerer tout un tat de tableau croisé dynamique.

    Dans cette discussion, ce que je cherche à faire, c'est venir tester dans le tableau croisé dynamique si je retrouve mes champs "Dépannage", "Réglage"...

    Si je les retrouve alors j'enregistre le temps qui est leur est attribué dans une variable, et après je voudrais pouvoir faire des calculs avec ces temps, afin de pouvoir additioner les variables, pour faire des grandes parties, et coller les résultats dans une autre feuille de mon classeur pour le mois qui correspond à mon traitement. Suis-je clair.

    Si je prend un exemple. dans la pièce jointe que je vous ai envoyé précédement, on retrouve (Dépannage, Réglage, Préventif, Amélioration, Changement de format, Montage/Démontage pour nettoyage, Préparation d'intervention, Commande,Travaux neuf, Nettoyage, Assistance...)

    Donc la ce que je cherche à faire dans un premier temps, c'est à venir tester si je retrouve ces champs dans mon tableau croisé dynamique (car d'un mois sur l'autre il vont ou ne pas être présent), si ils sont présents, j'enregistre dans une variable la durée en temps qui leur est attribué (colonne de droite), si ils ne sont pas présent je passe aux suivants...

    Une fois que j'ai tester si chacun de ces champs étaient présents, et donc que j'ai regroupé les temps dans les variables, je voudrais pouvoir les regrouper en 5 grandes parties, par exemple:

    Curatif=VarDépannage + VarRéglage + VarNettoyage...

    Et comme dans mes variables j'aurais des temps, j'aurais bien au bout du compte "Curatif"= A la somme des temps des variables que j'ai additionné.

    Ensuite quand j'aurais récupérer les temps de mes 5 grandes parties, je viendrais coller le résultat dans une feuille de mon classeur excel, dans les cellules qui vont bien!

    Je pense que c'est clair?

  4. #4
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Bon c'est bon sa marche en fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Worksheets("TCD entre 2 dates").Select
    For Each c In Range("b:b")
    If c = "Dépannage" Then
    VarDépannage = c.Offset(0, 1)
    End If: Next
    Par contre, si je veux tester une multitude de champs, est ce qu'il existe une façon plus propre que celle de répeter 40 fois la boucle?

    Et si je veux éviter de perdre du temps, comment lui dire qu'il execute la boucle juste d'une cellule, jusqu'à la dernière qui contient des données?

    Merci en tout cas sa me débloque!

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

Discussions similaires

  1. Réponses: 21
    Dernier message: 26/02/2015, 21h20
  2. Réponses: 3
    Dernier message: 13/12/2009, 17h04
  3. [Toutes versions] Extraire une valeur d'une ListBox pour l'afficher dans une cellule
    Par stid59 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/04/2009, 22h05
  4. Réponses: 5
    Dernier message: 26/07/2007, 21h13
  5. Réponses: 4
    Dernier message: 26/04/2006, 17h43

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