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 :

Recuperer la valeur d'une cellule


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 51
    Par défaut Recuperer la valeur d'une cellule
    Bonjour à tous,
    Je chercher à recuperer la valeur d'une cellule en VBA, j'utilise
    Feuille.Cells(numlig, numcol) ce qui marche bien si la cellule contient DIRECTEMENT une valeur (ex:"SALUT").

    Mais si je fais pointer vers une cellule contenant un pointeur vers une autre cellule ou une formule, cela ne marche pas. (ex: cellule B2 contient =A1)

    Merci pour votre aide.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Ce que tu dis là m'étonne fort...

    Pourrais-tu donner le code que tu utilises?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 95
    Par défaut
    Bonjour,

    Tu as essayé de faire cells(numligne,numcolonne).value ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 51
    Par défaut
    J'ai Error 2023
    Explications:
    Permet d'ouvrir une basse ingres en ODBC, puis ouvre un autre fichier excel TEST.xsl pour recupérer des valeurs et les intégrer dans la base de données.
    Le début de code commence à Button1_Click()

    -Button1_Click->ExportDonneesExcel->AjoutDansTableIngres
    voir la ligne: "rr = Feuille.Cells(2, 2 + 10)"
    Pointe vers une cellule contenant =B2 (B2 = SALUT)

    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
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
     Public AppExcel As Object
         Public Classeur As Object
         Public Feuille As Object
         Public ADOCnx As New ADODB.Connection
         Public mRst As New ADODB.Recordset
     
    Private Sub Button1_Click()
     
    ret = InitConnection("mag", "xx", "xx")
    ret = ExportDonneesExcel()
     
    ret = CloseConnection()
     
    End Sub
     
    Private Function ExportDonneesExcel()
        ret = OuvrirFichierExcel("TEST.xls", "Resultat")
        ret = AjoutDansTableIngres("mb_commande_ad")
        ret = FermerFichierExcel()
     
    End Function
     
    Private Function OuvrirFichierExcel(NomFichier As String, NomFeuille As String)
    MyPath = ActiveWorkbook.Path
     
         ' Déclaration de référence d'objet à une variable
     
         Application.StatusBar = "Ouverture du classeur Excel contenant les données à exporter ..."
     
         Set AppExcel = CreateObject("Excel.Application")
         Set Classeur = AppExcel.Workbooks.Open(MyPath & "/" & NomFichier)
         Set Feuille = Classeur.Worksheets(NomFeuille)    ' Adapter le nom de la feuille
        Application.StatusBar = ""
     
    End Function
    Private Function AjoutDansTableIngres(NomTable As String)
     
         Dim I As Integer
         Dim rr As String
     
             'Inscrit les valeurs dans la table ListeClients
    If NomTable = "mb_commande_ad" Then
         With mRst
              .CursorType = 1
              .LockType = 3
              .Open "SELECT * FROM " & NomTable, ADOCnx
     
              'Ajout de plusieurs enregistrements situés à partir de
              ' la ligne 2 afin d'éviter les entêtes de colonnes
    rr = Feuille.Cells(2, 2 + 10)
              For I = 2 To Feuille.Range("A65536").End(-4162).Row
                   Nbrecords = Feuille.Range("A65536").End(-4162).Row - 1
                   .AddNew
                   .Fields("mb_nomag") = Feuille.Cells(I, 2 + 10)
                   .Fields("mb_noart") = Feuille.Cells(I, 3 + 10)
                   .Fields("mb_qtecde") = Feuille.Cells(I, 4 + 10)
                   .Fields("mb_datesais") = Feuille.Cells(I, 6 + 10)
                   .Fields("mb_pahtcde") = 0
                   .Fields("mb_remise") = 0
                   .Fields("mb_noligne") = 0
                   .Fields("mb_heursais") = 0
                   .Fields("mb_topfour") = ""
                   .Fields("mb_topentr") = ""
                   .Fields("mb_coddev") = ""
     
                   .Update
              Next I
         End With
    End If
    '-------------------------------------------------------------------
    If NomTable = "mb_message_ad" Then
     With mRst
              .CursorType = 1
              .LockType = 3
              .Open "SELECT * FROM " & NomTable, ADOCnx
     
              'Ajout de plusieurs enregistrements situés à partir de
              ' la ligne 2 afin d'éviter les entêtes de colonnes
     
              For I = 2 To Feuille.Range("A65536").End(-4162).Row
                   Nbrecords = Feuille.Range("A65536").End(-4162).Row - 1
                   .AddNew
                   .Fields("mb_mag") = Feuille.Cells(I, 2 + 10)
                   .Fields("mb_nofour") = Feuille.Cells(I, 5 + 10)
                   .Fields("mb_lig1four") = Feuille.Cells(I, 9 + 10)
                   .Fields("mb_lig2four") = ""
                   .Fields("mb_lig3four") = ""
                   .Fields("mb_lig4four") = ""
                   .Fields("mb_lig5four") = ""
                   .Fields("mb_lig1mag") = ""
                   .Fields("mb_lig2mag") = ""
                   .Fields("mb_lig3mag") = ""
                   .Fields("mb_lig4mag") = ""
                   .Fields("mb_lig5mag") = ""
                   .Fields("mb_datliv") = Feuille.Cells(I, 8 + 10)
                   .Fields("mb_mhtpub") = 0
     
                   .Update
              Next I
         End With
    End If
     
    End Function
     
    Public Function InitConnection(DSN As String, UserName As String, PassWord As String) As Boolean
     
      Dim query As String
      Dim cnxString As String
      Dim iAffected As Integer
     
    'Connection à la BDD
     
      InitConnection = False
      'Initialisation de la chaine de connexion
      cnxString = "DSN=" & DSN & ";"
      'Vérifie que la connexion est bien fermée
      If ADOCnx.State = adStateOpen Then
        ADOCnx.Close
      End If
      On Error GoTo BadConnection
      'Connexion à la base de données
      ADOCnx.Open cnxString, UserName, PassWord, adAsyncConnect
     
      'Attente que la connexion soit établie
      While (ADOCnx.State = adStateConnecting)
        DoEvents
       Wend
      'Vérification des erreurs dans le cas d'une mauvaise connexion
      If ADOCnx.Errors.Count > 0 Then
        'Affichage des erreurs
        MsgBox ADOCnx.Errors.Item(0)
        InitConnection = False
        Exit Function
      Else
        InitConnection = True
       End If
     
    Exit Function
     
    BadConnection:
    If ADOCnx.Errors.Count > 0 Then
        'Affichage des erreurs
        MsgBox ADOCnx.Errors.Item(0)
        InitConnection = False
        Exit Function
    Else
        MsgBox Err.Description
    End If
     
    End Function
     
    Private Function CloseConnection()
     
    'Fermeture de la connection à la BDD
    If ADOCnx.State = adStateOpen Then
        ADOCnx.Close
    End If
     
    End Function
    Private Function FermerFichierExcel()
     
        Classeur.Close
         AppExcel.Quit
     
         ' Met fin à l'association entre la variable et l'objet associé
     
         Set AppExcel = Nothing
         Set Classeur = Nothing
         Set Feuille = Nothing
    End Function
    Merci par avance

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 51
    Par défaut
    Oui j'ai fait le test avec le .value
    Même punition.....

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Si j'ai bien compris, l'erreur survient sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ´rr= feuille.cells(2, 2 + 10)
    Que contient cette cellule? (Cellule L2). Est-ce bien vers cette cellule que tu veux pointer?

    En parcourant ton code, sauf erreur, je ne vois pas que tu utilises rr dans la suite de la fonction... donc je ne vois pas bien l'utilité de cette ligne de code...

    En mode pas à pas, que se passe-t'il?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 51
    Par défaut
    Oui c'est bien L2, elle contient =B2
    En fait le rr est juste pour tester le retour de valeur... qui ne marche pas sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Fields("mb_nomag") = Feuille.Cells(I, 2 + 10)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    B2==+IF(INDIRECT(CONCATENATE(REFARR;article1col;article1lig))="ACREER";MID(1000+INDIRECT(CONCATENATE(REFARR;"A";article1lig+M1lig));2;8))
    Cette formule est ok.

    donc L2=AAA dans la feuille excel.

    Cependant mon but est de prendre directement B2 pour l'intégrer dans la base, mais cela ne marche pas.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 51
    Par défaut
    Pour rappel: si L2 ou B2 contienent directement AAA cela marche.

    Sinon j'ai error 2023 dans rr

    Donc la fct Feuille.Cells(2, 12).Value est t'elle capable de recuperer la valeur d'un champ avec une formule?

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 95
    Par défaut
    Tu repère les valeurs quand excel est fermé ?
    ou plus précisement tu récupère les informations du fichier excel sans l'ouvrir ?

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Il est établi que
    renvoie la valeur calculée d'une cellule. Que cette cellule contienne une formule qui va chercher la valeur dans une autre cellule qui contient elle-même une formule ne change rien.

    Donc, le problème ne vient pas de la récupération de la valeur de la cellule.

    Il faut regarder ailleurs.

    L'objet Feuille que tu utilises est-il correctement instancié? Pour le savoir, avance en pas-à-pas dans ta fonction, ou place un point d'arrêt sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rr = feuille.cells(2,2 + 10)
    Autre solution, place ton objet Feuille en espion...

    Qu'est-ce que cela donne?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 51
    Par défaut
    Je vous remercie pour le temps passé à m'aider.

    J'ai avancé sur le problème:
    En fait j'ouvre un claseur excel a partir de ma macro, dans ce classeur se trouve 2 feuilles (Parametre et Resultat).

    La feuille "Resultat" utilise la feuille "parametre" pour afficher ses valeurs.

    Donc je viens d'essayer de mettre dans ma feuille "Resultat" une cellule qui pointe sur une autre de cette même feuille et cela marche bien.

    Par contre si une cellule de Resultat pointe sur une cellule de la feuille "Paramettre" ->là j'ai le pb.

    Donc je pense, que le fait d'ouvrir le classeur et le feuille "Resultat" n'est pas suffisant.... et je viens d'ajouter l'ouverture de la feuille "Parametre" dans mon code. Mais j'ai toujours le pb....

    A votre avis.

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Tu ne nous simplifie pas la tâche...

    A l'heure actuelle et à la lecture de tes messages, je ne comprends plus ce que tu souhaites obtenir, ni ce que tu fais.

    S'il te plait, essaie d'expliquer en français, sans code, ce que tu souhaites réaliser...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 51
    Par défaut
    Je sais que cela devient compliqué, MAIS j'ai trouver la solution

    J'ai un classeur excel qui comporte un bouton pour lancer le code.

    Par ce code, j'ouvre un autre classeur excel (Resultat) qui comporte des references à un 3eme classeur excel (ORIGINE)
    Le tout avec plusieurs onglets dans chaque classeurs qui se font reference mutuellement.....

    Je croyais que le fait d'avoir mon classeurs ORIGINE ouvert sur mon bureau suffirait à alimenter mon classeur (Resultat) ouvert dans mon code.....

    Et bien non il faut aussi l'ouvrir dans le code VB et là c'est ok
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set AppExcel = CreateObject("Excel.Application")
         Set Classeur = AppExcel.Workbooks.Open(MyPath & "/" & NomFichier)
         Set Feuille = Classeur.Worksheets(NomFeuille)
         Set Feuille2 = Classeur.Worksheets(NomFeuille2)   
     
        Set Classeur2 = AppExcel.Workbooks.Open(MyPath & "/" & "tableau recap  N4  TEST.xls")
         Set Feuille3 = Classeur2.Worksheets("CATALOGUE")
    Un grand merci à vous pour le temps passé.

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

Discussions similaires

  1. recuperer la valeur d'une cellule de tableau HTML
    Par cfouc dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 24/01/2007, 13h34
  2. recuperer la valeur d'une cellule ayant le focus
    Par stefano dans le forum Bases de données
    Réponses: 4
    Dernier message: 05/03/2006, 20h07
  3. [SWING][JTable] recuperer la valeur d'une cellule
    Par Psykorel dans le forum Composants
    Réponses: 1
    Dernier message: 05/01/2006, 20h53
  4. [VB.NET] Recuperer la valeur d'une cellule d'un DataTable
    Par graphicsxp dans le forum Windows Forms
    Réponses: 2
    Dernier message: 29/03/2005, 10h59
  5. recuperer la valeur d une cellule
    Par Invité(e) dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/01/2005, 18h05

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