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 :

Problème - Erreur 438 - Excel vba 2003


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nanoucha
    Invité(e)
    Par défaut Problème - Erreur 438 - Excel vba 2003
    Bonjour,

    J'ai fait une macro pour générer des valeurs aléatoires et j'ai l'erreur 438 "Objet ne gère pas cette propriété ou méthode". Cette erreur survient sur la ligne mise en gras:

    J'ai essayé de faire ceci mais je me rends compte que mon delete ne marche pas lorsque je rappelle la macro pour générer d'autres valeurs aléatoires :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            Worksheets("Feuil2").Activate
            DerniereLigne = Worksheets("Feuil2").UsedRange.Rows.Count
    
            Application.ScreenUpdating = False
            For r = DerniereLigne To 1 Step -1
                    If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
            Next r
            GoTo DEBUT_GENERATION
    Code la macro :
    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
    
    Sub MNbAleatoire()
      ' Déclaration de variables
        Dim Cellule As Range
        Dim NbLignes As Integer, NbLignesResult As Integer, NbAleatoires As Integer
        Dim Tableau()
        Dim i As Integer, j As Integer, k As Integer, nbLignesDestination As Integer
       
        Dim FDestination As Worksheet   'FeuilleDestination
        Dim FSource As Worksheet        'FeuilleSource
    
        Dim Message As String
        Dim nbVoulu As Integer
        Dim nbColonnes As Integer
        Dim DerColonneFDestination As Long
        Dim DerColonneFSource As Long
        Dim DerColFSource As Long
      
    DEBUT_GENERATION:
            
         Message = ""
    
        nbColonnes = 0
        DerColonneFDestination = 0
        DerColonneFSource = 0
        DerColFSource = 0
    
        Set FSource = Nothing
        Set FDestination = Nothing
        Set Cellule = Nothing
        
        Set FSource = Worksheets("Feuil1")
        Set FDestination = Worksheets("Feuil2")
        
        
        'Indique le numéro de la dernière ligne non vide dans la colonne A
        NbLignes = FSource.Range("A65536").End(xlUp).Row
      
        'Dernière colonne de la FeuilleDestination
        DerColonneFDestination = FDestination.Cells(1, Rows(1).Cells.Count).End(xlToLeft).Column
        
        'Dernière colonne de la FeuilleSource
        DerColonneFSource = FSource.Cells(1, Rows(1).Cells.Count).End(xlToLeft).Column
        
        'Permet à l'utilisateur de saisir le nombre de valeurs aléatoires voulus.
        Message = InputBox("Entrez le nombre de valeurs aléatoires voulues :", "Génération de nombres aléatoires", "10")
        
        
        'La ligne suivante arrête la procédure si l'utilisateur 'clique sur "Annuler"
        If Message = "" Then Exit Sub
    
        'La ligne suivante place la valeur saisie dans la cellule 'A1 de la feuille active
        nbVoulu = Int(Message)
        k = 0
        
        ReDim Tableau(NbLignes)
        'Remplit le tableau qui va servir au tirage aléatoire
        'en utilisant les données de la colonne A.
        For Each Cellule In Range("A1:A" & NbLignes)
            Tableau(Cellule.Row - 1) = Cellule
        Next Cellule
        
        'Permute les données de façon aléatoire.
        For i = 1 To nbVoulu
            Randomize 'Initialise le générateur de nombre aléatoire
            
            'Permet de générer un nombre aléatoire (valeur entière) compris entre 0 et 1.
            'Le nombre aléatoire est spécifié par l'utilisateur.
            NbAleatoires = Int(Rnd * NbLignes) + 1
            
            'Insére dans la cellule la donnée du tableau correspondant à cette valeur aléatoire
            FDestination.Cells((i + 1), 1) = Tableau(NbAleatoires - 1)
            
            'Nb colonnes dans la FeuilleSource
            nbColonnes = FSource.UsedRange.Columns.Count
             
            'Copier les lignes rattachées aux valeurs aléatoires trouvées
            'Pour chaque colonne de la FeuilleSource, copier les valeurs associées
            ' aux différentes valeurs aléatoires dans la FeuilleDestination.
            For j = 1 To nbColonnes
                FDestination.Cells((i + 1), j) = FSource.Cells(NbAleatoires, j).Value
            Next j
        Next i
        
        'Copier les entêtes de ma FeuilleSource dans ma FeuilleDestination
        'Pour chaque colonne à la première ligne de la FeuilleSource,
        'copier les entêtes à la première ligne dans la FeuilleDestination
        For k = 1 To DerColonneFSource
            FDestination.Cells(1, k) = FSource.Cells(1, k).Value
        Next k
        
    '-- Afficher un message de succès lorsque le remplissage est complété
    '-- Demander à l'utilisateur s'il désire appliquer le remplissage sur une autre colonne
        If (MsgBox(prompt:=". : : Génération de valeurs aléatoires complétée: : ." & vbCrLf & vbCrLf & "Les valeurs aléatoires trouvées " & FSource.Name & " sont maintenant insérées dans la feuille « " & FDestination.Name & " »." & vbCrLf & vbCrLf & "Désirez-vous appliquer la génération de nouvelles valeurs aléatoires?", Buttons:=vbYesNo, Title:="Générer les valeurs aléatoires") = vbYes) Then
            ' Effacer les valeurs de la feuille "Feuil2"
    
            Dim DerniereLigne
            Dim r
            
            DerniereLigne = FDestination.ActiveSheet.UsedRange.Rows.Count
    
            Application.ScreenUpdating = False
            For r = DerniereLigne To 1 Step -1
                    If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
            Next r
            GoTo DEBUT_GENERATION
        Else
            GoTo FIN_GENERATION
        End If
    
    FIN_GENERATION:
     End Sub

  2. #2
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    CountA n'est pas, je crois, une méthode de l'objet application, mais de WorksheetFunction.

    Si tu essaies de compiler le code, tu dois déjà avoir une erreur, avant exécution.

    PGZ

  3. #3
    Nanoucha
    Invité(e)
    Par défaut
    Lorsque j'exécute le code, mon erreur survient sur cette ligne (qui est avant la ligne où il a la fonction "CountA"):
    DerniereLigne = FDestination.ActiveSheet.UsedRange.Rows.Count...

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut Nanoucha et le forum
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim FDestination As Worksheet
    ......
    DerniereLigne = FDestination.UsedRange.Rows.Count
    A+

Discussions similaires

  1. SUMIFS--formule - erreur 13-excel VBA
    Par expertdev dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 11/07/2013, 17h52
  2. Problème avec Find(), Excel Vba
    Par mmmxtina dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 28/05/2009, 11h57
  3. problème arrière plan excel vba
    Par xav30 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 04/12/2007, 00h32
  4. Excel VBA 2003 - combobox
    Par jpo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/05/2007, 15h26
  5. Problème avec open() [Excel VBA]
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 28/11/2005, 16h21

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