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 :

test sur une checkbox dans une feuille non active


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Points : 283
    Points
    283
    Par défaut test sur une checkbox dans une feuille non active
    Bonjour,

    J'ai une macro qui importe des données d'un fichier excel vers un autre.
    Je selectionne le fichier ou il y a les donnée au début de la macro.
    je parcours les feuilles de ce fichiers et je viens remplir la feuille à partir de laquelle j'ai lancé la macro. Jusque là tout allait bien.

    Maintenant j'aimerai ajouter une condition sur une checkbox présente dans les feuilles ou il y a les données. Seulement je ne sais pas comment ecrire le test:
    j'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test = Wksheet.checkbox1.Value
    Mais comme la feuille n'est pas active ça ne marche pas
    Y a t'il un moyen de faire ce test sans avoir à activer la feuille, faire le test, pour ensuite revenir sur la feuille ou j'ecris les donnée. D'autant plus que le fichier que j'ouvert via est caché: ma macro fait:

    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
    Sub recupdonnées()
    
    
    Dim fdest As Worksheet
    Dim fsource As Excel.Workbook
    Dim Wksheet As Worksheet
    Dim derligne As Integer, nbligne As Integer, ldest As Integer, i As Integer, j As Integer, dcelpleine As Integer
    Dim objectif As Variant
    Dim nom As String
    
    Set fdest = ThisWorkbook.Worksheets(1)
    Set fsource = xls
    ThisWorkbook.Sheets(1).Select
    
    Application.ScreenUpdating = False
    
    Call clear
    For Each Wksheet In fsource.Worksheets
    
    Select Case Wksheet.Name
       
        Case Is = "Feuille de Saisie"
        Case Is = "Feuil1"
        Case Else
        test = Wksheet.checkbox1.Value
        
            If test = False Then
            
            derligne = Wksheet.Range("A69").End(xlUp).Row
            nbligne = ((derligne - 15) / 2) + 1
            
            If nbligne = 0 Then GoTo fsuivante
            
            objectif = Wksheet.Cells(11, 9).Value
            nom = Wksheet.Range("A3").Value
            dcelpleine = fdest.Range("B65536").End(xlUp).Row
            
            If dcelpleine = 1 Then
            ldest = 1
            Else
            ldest = dcelpleine + 2
            End If
            
            Cells(ldest + 1, 1).Value = "Semaine"
            Cells(ldest + 2, 1).Value = "Réalisé"
            Cells(ldest + 3, 1).Value = "Cumul Réalisé"
            Cells(ldest + 4, 1).Value = "RAF"
            Cells(ldest + 5, 1).Value = "% Réalisé"
            Cells(ldest + 6, 1).Value = "% Chiffrage"
            Cells(ldest + 1, 2).Value = ""
            Cells(ldest + 2, 2).Value = 0
            Cells(ldest + 3, 2).Value = 0
            Cells(ldest + 4, 2).Value = objectif
            Cells(ldest + 5, 2).Value = 0
            Cells(ldest + 6, 2).Value = 0
            
            realise = 0
            j = 3
            
            For i = 15 To derligne Step 2
                fdest.Cells(ldest + 1, j).Value = Wksheet.Cells(i, 1).Value
                fdest.Cells(ldest + 2, j).Value = Wksheet.Cells(i, 29).Value
                realise = realise + Wksheet.Cells(i, 29).Value
                fdest.Cells(ldest + 3, j).Value = realise
                fdest.Cells(ldest + 4, j).Value = Wksheet.Cells(i, 33).Value
                fdest.Cells(ldest + 5, j).Value = Wksheet.Cells(i, 37).Value * 100
                fdest.Cells(ldest + 6, j).Value = (realise / objectif) * 100
                j = j + 1
            Next i
                
            If Cells(ldest + 5, j - 1).Value = 100 Then
            
            fdest.Range(Cells(ldest, 2), Cells(ldest, nbligne + 2)).Merge
            
            With Cells(ldest, 2)
            .Value = nom
            .Interior.ColorIndex = 36
            End With
            With Cells(ldest, 1)
            .Value = objectif
            .Interior.ColorIndex = 37
            End With
            
            With Range(Cells(ldest, 1), Cells(ldest + 6, nbligne + 2))
            .Borders.LineStyle = xlContinuous
            .Borders(xlEdgeBottom).Weight = xlMedium
            .Borders(xlEdgeLeft).Weight = xlMedium
            .Borders(xlEdgeRight).Weight = xlMedium
            .Borders(xlEdgeTop).Weight = xlMedium
            .Borders(xlInsideHorizontal).Weight = xlThin
            .Borders(xlInsideVertical).Weight = xlThin
            End With
            
            Else
            
            Cells(ldest + 3, j).Value = realise + Cells(ldest + 4, derligne).Value
            Cells(ldest + 4, j).Value = 0
            Cells(ldest + 5, j).Value = 100
            Cells(ldest + 6, j).Value = (Cells(ldest + 3, derligne + 1).Value * 100) / objectif
            
            fdest.Range(Cells(ldest, 2), Cells(ldest, nbligne + 3)).Merge
            
            With Cells(ldest, 2)
            .Value = nom
            .Interior.ColorIndex = 36
            End With
            With Cells(ldest, 1)
            .Value = objectif
            .Interior.ColorIndex = 37
            End With
            
            With Range(Cells(ldest, 1), Cells(ldest + 6, nbligne + 3))
            .Borders.LineStyle = xlContinuous
            .Borders(xlEdgeBottom).Weight = xlMedium
            .Borders(xlEdgeLeft).Weight = xlMedium
            .Borders(xlEdgeRight).Weight = xlMedium
            .Borders(xlEdgeTop).Weight = xlMedium
            .Borders(xlInsideHorizontal).Weight = xlThin
            .Borders(xlInsideVertical).Weight = xlThin
            End With
            
            End If
            
        End If
        End Select
        
    fsuivante:
    Next Wksheet
    
    Application.DisplayAlerts = False
    
    fsource.Close
    
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    
    End Sub

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Je n'ai pas compris ces lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Select Case Wksheet.Name
     
        Case Is = "Feuille de Saisie"
        Case Is = "Feuil1"
        Case Else
        test = Wksheet.checkbox1.Value
    ....
    End Select
    et cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Wksheet In fsource.Worksheets
    c'est quoi fsource?

    Tu es sûr de cela?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbligne = ((derligne - 15) / 2) + 1

  3. #3
    Membre actif
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Points : 283
    Points
    283
    Par défaut
    En fait je suis sur de tout la seul chose qui ne va pas c'est le test sur la checkbox.
    Si je l'enlève tout marche comme sur des roulettes.
    fsource est mon fichier source que je selectionne via opengetfilename.
    J'ai mis cette procedure dans une fonction que j'ai appelé xls pour pouvoir l'utiliser svt.
    Sinon le reste c'est de la mise en forme pour mes tableaux.

  4. #4
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Je ne vois pas la déclaration de la variable test.
    Le mieux serait de la créer en type boolean si pas déja fait en public

    Si le problème est

    Mais comme la feuille n'est pas active ça ne marche pas
    Pourquoi ne pas l'activer puis réactiver la précédente feuille avec la récupération de la valeur ?

  5. #5
    Membre actif
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Points : 283
    Points
    283
    Par défaut
    En fait pour l'instant test n'est pas déclaré, j'ai mis cette ligne tout en pensant que ça ne marcherait pas, j'ai fait plusieurs essais mais je n'ai pas trouvé.

    Pour ce qui est de selectionner la feuille j'ai essayé mais je n'y arrive pas:

    J'ai fait

    De plus je ne sais pas comment revenir à la feuille d'origine?
    Je suis plutot débutant sur la manipulation de fichiers, j'ai appris tout seul et jusque la je n'ai fait que des manip dans un seul et même fichier et la je suis un peu dépassé
    Des idées?

  6. #6
    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
    bonsoir diude54 jfontaine mercatog le forum
    du classeur1 je teste si dans le classeur2 de la feuil1 la CheckBox1 est a vrai!!
    le classeur2 est ouvert.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Workbooks("classeur2").Worksheets("Feuil1").CheckBox1 = True Then MsgBox "ok" Else MsgBox "pas ok"
    pour revenir a la feuille de depart tu peus utiliser un code de ce type a adapter!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim i As String
    i = ActiveSheet.Name
    'ton code
    Sheets(i).Select

  7. #7
    Membre actif
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Points : 283
    Points
    283
    Par défaut
    C'est parfait ça fonctionne merci beaucoup

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

Discussions similaires

  1. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  2. Réponses: 3
    Dernier message: 25/03/2011, 18h29
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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