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 :

Le programme tourne dans le vide


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 39
    Par défaut Le programme tourne dans le vide
    Bonjour!
    Je ne comprend pas où est le problème dans mon programme. L'objectif est de rechercher (dans la feuille "Feuilledonnées") des valeurs présentes dans la feuille "Feuillegrille".
    Puis je souhaiterais que le programme pointe la valeur qui est sur la colonne trouvée et sur la 4ème ligne et qu'il la copie dans la feuille "Feuillerésultats".
    La boucle permet de descendre d'une ligne pour réeffectuer la même chose.
    Malheureusement, le programme ne me renvois aucune valeur alors que la correspondance est présente dans la recherche Feuillegrille -> Feuilledonnées et qu'il y a des données sur la ligne 4.
    Il y a sûrement une erreur quelque part mais je ne la vois pas .

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
     
    Sub Traitement()
     
    Dim i As Variant
    Dim a As Variant
    Dim b As Variant
    Dim c As Variant
    Dim d As Variant
    Dim e As Variant
    Dim f As Variant
    Dim g As Variant
    Dim h As Variant
    Dim k As Variant
     
    Dim ax As Variant
    Dim bx As Variant
    Dim cx As Variant
    Dim dx As Variant
    Dim ex As Variant
    Dim fx As Variant
    Dim gx As Variant
    Dim hx As Variant
    Dim kx As Variant
     
    Dim ay As Variant
    Dim by As Variant
    Dim cy As Variant
    Dim dy As Variant
    Dim ey As Variant
    Dim fy As Variant
    Dim gy As Variant
    Dim hy As Variant
    Dim ky As Variant
     
    Dim NumLigne As Variant
     
    Dim celluletrouveea As Range
    Dim celluletrouveeb As Range
    Dim celluletrouveec As Range
    Dim celluletrouveed As Range
    Dim celluletrouveee As Range
    Dim celluletrouveef As Range
    Dim celluletrouveeg As Range
    Dim celluletrouveeh As Range
    Dim celluletrouveek As Range
     
    Dim cola As Variant
    Dim colb As Variant
    Dim colc As Variant
    Dim cold As Variant
    Dim cole As Variant
    Dim colf As Variant
    Dim colg As Variant
    Dim colh As Variant
    Dim colk As Variant
    Dim PlageDeRecherche As Range
    Set PlageDeRecherche = Sheets("Feuilledonnées").Rows(1)
    NumLigne = 1
     
    For i = 6 To 20
     
     a = Sheets("Feuillegrille").Cells(i, 10)
      b = Sheets("Feuillegrille").Cells(i + 1, 10 - 1)
       c = Sheets("Feuillegrille").Cells(i + 1, 10)
        d = Sheets("Feuillegrille").Cells(i + 1, 10 + 1)
         e = Sheets("Feuillegrille").Cells(i, 10 + 1)
          f = Sheets("Feuillegrille").Cells(i - 1, 10 + 1)
           g = Sheets("Feuillegrille").Cells(i - 1, 10)
            h = Sheets("Feuillegrille").Cells(i - 1, 10 - 1)
             k = Sheets("Feuillegrille").Cells(i, 10 - 1)
     Set celluletrouveea = PlageDeRecherche.Find(a, lookat:=xlWhole)
      Set celluletrouveeb = PlageDeRecherche.Find(b, lookat:=xlWhole)
       Set celluletrouveec = PlageDeRecherche.Find(c, lookat:=xlWhole)
        Set celluletrouveed = PlageDeRecherche.Find(d, lookat:=xlWhole)
         Set celluletrouveee = PlageDeRecherche.Find(e, lookat:=xlWhole)
          Set celluletrouveef = PlageDeRecherche.Find(f, lookat:=xlWhole)
           Set celluletrouveeg = PlageDeRecherche.Find(g, lookat:=xlWhole)
            Set celluletrouveeh = PlageDeRecherche.Find(h, lookat:=xlWhole)
             Set celluletrouveek = PlageDeRecherche.Find(k, lookat:=xlWhole)
     cola = celluletrouveea.Column
      colb = celluletrouveeb.Column
       colc = celluletrouveec.Column
        cold = celluletrouveed.Column
         cole = celluletrouveee.Column
          colf = celluletrouveef.Column
           colg = celluletrouveeg.Column
            colh = celluletrouveeh.Column
             colk = celluletrouveek.Column
     ax = Cells(4, cola)
     ay = Cells(4, cola + 1)
      bx = Cells(4, colb)
      by = Cells(4, colb + 1)
       cx = Cells(4, colc)
       cy = Cells(4, colc + 1)
        dx = Cells(4, cold)
        dy = Cells(4, cold + 1)
         ex = Cells(4, cole)
         ey = Cells(4, cole + 1)
          fx = Cells(4, colf)
          fy = Cells(4, colf + 1)
           gx = Cells(4, colg)
           gy = Cells(4, colg + 1)
            hx = Cells(4, colh)
            hy = Cells(4, colh + 1)
             kx = Cells(4, colk)
             ky = Cells(4, colk + 1)
     Sheets("Feuillerésultats").Cells(NumLigne, 1) = ax
     Sheets("Feuillerésultats").Cells(NumLigne, 2) = ay
      Sheets("Feuillerésultats").Cells(NumLigne + 1, 1) = bx
      Sheets("Feuillerésultats").Cells(NumLigne + 1, 2) = by
       Sheets("Feuillerésultats").Cells(NumLigne + 2, 1) = cx
       Sheets("Feuillerésultats").Cells(NumLigne + 2, 2) = cy
        Sheets("Feuillerésultats").Cells(NumLigne + 3, 1) = dx
        Sheets("Feuillerésultats").Cells(NumLigne + 3, 2) = dy
         Sheets("Feuillerésultats").Cells(NumLigne + 4, 1) = ex
         Sheets("Feuillerésultats").Cells(NumLigne + 4, 2) = ey
          Sheets("Feuillerésultats").Cells(NumLigne + 5, 1) = fx
          Sheets("Feuillerésultats").Cells(NumLigne + 5, 2) = fy
           Sheets("Feuillerésultats").Cells(NumLigne + 6, 1) = gx
           Sheets("Feuillerésultats").Cells(NumLigne + 6, 2) = gy
            Sheets("Feuillerésultats").Cells(NumLigne + 7, 1) = hx
            Sheets("Feuillerésultats").Cells(NumLigne + 7, 2) = hy
             Sheets("Feuillerésultats").Cells(NumLigne + 8, 1) = kx
             Sheets("Feuillerésultats").Cells(NumLigne + 8, 2) = ky
     
    NumLigne = NumLigne + 9
    Next i
    End Sub
    Merci d'avance de votre aide !

    Signé : un noob de programmation

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 684
    Par défaut
    Bonjour,

    Essaye de lancer le programme en mode pas à pas (touche F8), tu pourras vérifier le contenu de tes variables pendant l'éxécution.

  3. #3
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,

    Sheets("Feuillegrille").Cells(i, 10) --> c'est ta cellule

    tu veux quoi ? de ta cellule...

    si c'est sa valeur --> a = Sheets("Feuillegrille").Cells(i, 10).Value.

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 33
    Par défaut
    Bonjour,
    Peut être que cela ne répondra pas à ta question mais je vais te proposer quelque chose de beaucoup plus simple : Mettre un nom à tes plages de cellules
    Sélection de la plage à analyser/Clic droit/Définir un nom
    par la suite, on peut retrouver un code simple :
    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
     
    Sub cherhce()
    Dim vale As Long, c As range, nm As Name, y As Long
        vale = 10 ' tu mets la valeur que tu recherches
                  ' si c'est un texte, remplace as long par as string
        For Each nm In ActiveWorkbook.Names ' ou le classeur que tu veux, ou bien la feuille que tu veux
            Set c = range(nm.Name).Find(vale, LookIn:=xlValues, lookat:=xlWhole) 'le programme cherche
            If Not c Is Nothing Then
                c.Activate
                    While Worksheets("Feuillerésultat").cell(4, y) <> "" ' a chaque fois qu'il trouve , il envoie la valeur à la ligne 4
                        y = y + 1                                          ' mais décalée d'une colonne si la place est deja prise
                    Wend
                cell(4, y).Value = c.Value
            End If
        Next nm
        Set c = Nothing
    End Sub
    Voila comment j'aurai fait à ta place ou en tout cas la façon dont j'aurais procédé et qui est facilement améliorable
    Il faut noter que le programme cherche dans toutes les plages qui ont un nom donc il suffit de rajouter un nom à une plage pour qu'il cherche aussi la-bas.
    En espérant t'avoir aidé,
    Un aspirant à la programmation

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 39
    Par défaut Résolu !
    Merci beaucoup à vous, le mode pas à pas m'a permis de comprendre où il manquait une ligne et il manquait effectivement le .Value aussi!
    Vous êtes des boss merci encore !

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 39
    Par défaut Réponse à Overeath
    Mais le problème c'est que j'ai trop de cellules pour les nommées... (environ 300 )

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 33
    Par défaut
    300 cellules c'est pas mal mais tu peux les nommer paquet par paquet et tu vois qu'une fois cela fait, le code diminue en conséquence
    Enfin le mode pas à pas est pas mal non plus

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

Discussions similaires

  1. Programme VBA qui tourne dans le vide puis crash
    Par Lyndils dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 23/06/2015, 17h34
  2. [PHP 5.2] ftp_rawlist tourne dans le vide
    Par ninikkhuet dans le forum Langage
    Réponses: 1
    Dernier message: 12/10/2009, 10h32
  3. plant de maintenance tourne dans le vide
    Par SILO dans le forum MS SQL Server
    Réponses: 16
    Dernier message: 12/03/2009, 18h02
  4. [nagios] 3-D Status map : tourne dans le vide ?
    Par marveljojo75 dans le forum Réseau
    Réponses: 0
    Dernier message: 07/01/2009, 12h58
  5. [MySQL 5.0.21] Requête tourne dans le vide
    Par dpin33 dans le forum Requêtes
    Réponses: 10
    Dernier message: 06/11/2008, 10h38

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