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 :

Pb de navigation dans les feuilles de calcul


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2009
    Messages : 74
    Par défaut Pb de navigation dans les feuilles de calcul
    Bonjour chacun, forum

    Je suis débutante, voici le code qui me pose le pb suivant. Les données qui sont lues avec ce code proviennent de la feuille conference tandis qu'elles devraient provenir de la feuille résultats. La seconde est une copie de la première sans les lignes vides et les entêtes...et je souhaites travailler au niveau de la seconde pour faire le traitement...

    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
    Sub MonProgramme()
     
        Dim Gain As Variant
        Gain = ObjectifGain  ' rapporte les gains de la sélection effectuée
     
        Dim MonRange As Range
        Set MonRange = SupprLigneVideVersion3  ' rapporte la plage des conférences à lire sans ligne vide
        Dim Xls As Worksheet
        Set Xls = ThisWorkbook.Worksheets("Résultats")
        Sheets("Résultats").Select
     
        Dim MaConference As Conference
        Dim LastRow As Long, sRow  As Integer
        sLastRow = Range("A1").End(xlDown).Row
     
        For sRow = 1 To sLastRow
     
            With MaConference
                 .Nom = MonRange.Cells(sRow, 3).Value  ' 3 est le nombre correspondant à C
                 .Domaine = MonRange.Cells(sRow, 4).Value ' 4 est le nombre correspondant à D
    '            .Du = MonRange.Cells(sRow, 8).Value ' 4est le nombre correspondant à G
    '            .Au = MonRange.Cells(sRow, 9).Value '  est le nombre correspondant à H
    '            .DateR =MonRange.Cells(sRow, ).Value '  est le nombre correspondant à J
    '            .DateN =MonRange.Cells(sRow, ).Value '  est le nombre correspondant à K
    '            .DateF =MonRange.Cells(sRow, ).Value '  est le nombre correspondant à L
                 .Donnees.Envergure = MonRange.Cells(sRow, 19).Value '  est le nombre correspondant à S
                 .Donnees.Envergure = Convertir(1, MaConference.Donnees.Envergure) * Gain(0)
    je vous épargne le reste du code. Quelqu'un a une idée pour expliquer ceci.

    Merci bien,

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

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    bonjour Bocage le forum pas simple ton code!! difficile de comprendre le mieux c ' est mettre un petit fichier sans données confide... avec le résultat désire

    sans conviction

    remplacer par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with Sheets("Résultats")

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2009
    Messages : 74
    Par défaut Pb de navigation...suite
    Merci du conseil. Je crois avoir trouvé un forme viable de code.

    J'aurai eu le réflexe de lire les données d'une feuille de calcul et de façon virtuelle faire le traitement nécessaire et ensuite d'inscrire le résultat à une autre feuille de calcul. Je ne sais pas faire ca en VBA . Alors je fais une copie de la feuille qui contient les données (sans lignes vides et entêtes), mais le traitement appliqué au range de cette nouvelle feuille, s'est effectué sur les données de départ (avec lignes vides et entêtes). J'ai alors cru que le range était associé à la feuille de calcul de départ...Je crois que c'est résolu.

    Je ne vois pas l'avantage de l'o.o. si l'on ne peut jouer avec des objets virtuels lues dans le chiffrier...Il y a définitivement quelque chose que je ne comprends pas ...

  4. #4
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Tu fais bien un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Set Xls = ThisWorkbook.Worksheets("Résultats")
    mais, ensuite tu oublies ton objet Xls.

    Ceci est parfaitement inutile:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Sheets("Résultats").Select
    sauf pour des raisons "cosmétiques" (montrer la feuille à l'utilisateur).

    La bonne solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        sLastRow = Xls.Range("A1").End(xlDown).Row
    Il y a des chances que ta définition de MonRange souffre du même défaut (non utilisation de l'objet feuille concerné).
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2009
    Messages : 74
    Par défaut Pb de navigation
    Bonjour/soir Forum, AlainTech

    MonRange est déclaré as range : je ne vois pas comment le relier à la feuille de calcul dans la déclaration. Dans la sub qui retourne la plage au pgm principal, la déclaration est la suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    While Range(MaPlage.End(xlDown).Address(rowabsolute:=False, columnabsolute:=False)).Value <> ""
        Set MaPlage = Range(MaPlage.End(xlDown).Address(rowabsolute:=False, columnabsolute:=False))
    Wend
    Set MaPlage = Range("A1:" & MaPlage.Address(rowabsolute:=False, columnabsolute:=False))
    J'ai tenté l'ajout de la proposition sans grand succès...

    Merci et a+

    Bo

  6. #6
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Citation Envoyé par Bocage Voir le message
    MonRange est déclaré as range : je ne vois pas comment le relier à la feuille de calcul dans la déclaration.
    Ce n'est pas dans la déclaration mais au moment de l'affectation.

    Un Range est un objet, propriété d'une feuille.

    Dans le code que tu montres, je ne vois pas MonRange.
    De plus, je ne vois pas l'utilité de travaiiler sur les adresses comme tu le fais.

    Un exemple pour trouver la dernière cellule utilisée d'une colonne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      Dim wksDest As Worksheet
      Dim rLastCell As Range
      Set wksDest = ThisWorkbook.Sheets("Feuil1")  ' Par exemple
      Set rLastCell = wksDest.Cells(Rows.Count, 1).End(xlUp)
    Si tu veux la cellule vide suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      Dim wksDest As Worksheet
      Dim rLastCell As Range
      Set wksDest = ThisWorkbook.Sheets("Feuil1")
      Set rLastCell = wksDest.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

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

Discussions similaires

  1. Navigation dans les feuilles de calcul
    Par pelerin98 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/03/2014, 23h31
  2. Réponses: 0
    Dernier message: 29/12/2011, 09h57
  3. Réponses: 9
    Dernier message: 27/04/2011, 10h08
  4. Réponses: 3
    Dernier message: 04/07/2008, 12h00
  5. Navigation dans les objets
    Par hunter dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/05/2005, 11h31

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