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 :

Probleme de Range: Pouvez vous me dire ou se trouve l'erreur dans ce code ?


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 40
    Points : 18
    Points
    18
    Par défaut Probleme de Range: Pouvez vous me dire ou se trouve l'erreur dans ce code ?
    Bonsoir,

    J'ai ecrit un code assez simple ou je dois manipuler deux tableaux passée en Variant Mais la au moment de la compiler il y une erreur 13 et je sais pas de quoi il s'agit.

    il est simple a lire et pour des experimenté l'erreur sautera au yeux . En rouge ce sont les lignes ou j'ai des doutes surtout avec la fdacon dont j'affecte les elemants aux tableaux Variant

    Merci d'avance

    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
    
    Sub test()
    
    tab_entree = ActiveSheet.Range("D5:IJ2627").Value  'Tableau d'input a l'entree
    
    Dim tab1 As Variant
    Dim tab2 As Variant
    
    Dim i As Long
    Dim j As Long
    
    Dim i_debut As Long
    Dim i_fin As Long
    
    Dim j_debut As Long
    Dim j_fin As Long
    
    i_debut = LBound(tab_entree, 1)
    i_fin = UBound(tab_entree, 1)
    
    j_debut = LBound(tab_entree, 2)
    i_fin = UBound(tab_entree, 2)
    
    ' 1 plus
    
    For i = i_debut To i_fin
        For j = j_debut To j_fin
            tab1(i, j) = tab_entree(i, j) + 1
            
        Next j
        
    Next i
    
    ' Pusssance
    
    For i = i_debut To i_fin
      tab2(i, 1) = tab1(i, 1)
      tab2(i, 2) = (tab1(i, 1) * tab1(i, 2)) ^ (0.5)
      tab2(i, 3) = (tab1(i, 1) * tab1(i, 2) * tab1(i, 3)) ^ (1 / 3)
      
      If Application.WorksheetFunction.Type(tab2(i, 1) = 16) Then
     
                    tab2(i, 1) = ""
                    
                    Else
                    
                     tab2(i, 1) = tab2(i, 1)
                     
      End If
      
      If Application.WorksheetFunction.Type(tab2(i, 2) = 16) Then
     
                    tab2(i, 2) = ""
                    
                    Else
                    
                     tab2(i, 2) = tab2(i, 2)
                     
      End If
      
      If Application.WorksheetFunction.Type(tab2(i, 3) = 16) Then
     
                    tab2(i, 3) = ""
                    
                    Else
                    
                     tab2(i, 1) = tab2(i, 3)
                     
      End If
      
      For j = 4 To j_fin
      
           tab2(i, j) = (tab1(j - 3) * tab1(j - 2) * tab1(j - 1) * tab1(j)) ^ (1 / 4)
           
           If Application.WorksheetFunction.Type(tab2(i, j) = 16) Then
     
                    tab2(i, j) = ""
                    
                    Else
                    
                     tab2(i, j) = tab2(i, j)
                     
      End If
           
      Next j
      
    Next i
    
    Worksheet.Add
    Worksheet.Name = "resultats"
    
    Worksheets("resultats").Activate
    ActiveSheet.Range(Cells(1, 1), Cells(i_fin, j_fin)).Value = tab2
    
    End Sub

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Points : 451
    Points
    451
    Par défaut
    Citation Envoyé par bourbe
    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
     
     
    Sub test()
    Dim i As Long
    Dim j As Long
    Dim i_debut As Long
    Dim i_fin As Long
    Dim j_debut As Long
    Dim j_fin As Long
     
    i_debut = LBound(tab_entree, 1)
    i_fin = UBound(tab_entree, 1)
     
    j_debut = LBound(tab_entree, 2)
    i_fin = UBound(tab_entree, 2)
     
    For i = i_debut To i_fin
        For j = j_debut To j_fin
            tab1(i, j) = tab_entree(i, j) + 1
     
        Next j
     
    Next i
    Bonjour, est-ce là ton véritable code?
    Si oui, j_fin n'est pas défini (tu définis seulement 2 fois le i_fin), donc il est à 0 par défaut. Ainsi ta boucle sur j ne fonctionnera peut-etre pas.

    Rem. Il serait mieux que tu nous dises sur quelle ligne ton code plante, en l'executant en pas à pas ([F8]), par exemple.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 40
    Points : 18
    Points
    18
    Par défaut reponse
    En effet je ne m'étais pas rendu compte pour le j_fin, c'est juste une erreur de ma part. La je l'ai corrigé et en gras en bleue c'est ou ca me fait la premiere erreur lorsque je fais F8;



    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
    Sub test()
    
    tab_entree = ActiveSheet.Range("D5:IJ2627").Value  'Tableau d'input a l'entree
    
    Dim tab1 As Variant
    Dim tab2 As Variant
    
    Dim i As Long
    Dim j As Long
    
    Dim i_debut As Long
    Dim i_fin As Long
    
    Dim j_debut As Long
    Dim j_fin As Long
    
    i_debut = LBound(tab_entree, 1)
    i_fin = UBound(tab_entree, 1)
    
    j_debut = LBound(tab_entree, 2)
    i_fin = UBound(tab_entree, 2)
    
    ' 1 plus
    
    For i = i_debut To i_fin
        For j = j_debut To j_fin
            tab1(i, j) = tab_entree(i, j) + 1
            
        Next j
        
    Next i
    
    ' Pusssance
    
    For i = i_debut To i_fin
      tab2(i, 1) = tab1(i, 1)
      tab2(i, 2) = (tab1(i, 1) * tab1(i, 2)) ^ (0.5)
      tab2(i, 3) = (tab1(i, 1) * tab1(i, 2) * tab1(i, 3)) ^ (1 / 3)
      
      If Application.WorksheetFunction.Type(tab2(i, 1) = 16) Then
     
                    tab2(i, 1) = ""
                    
                    Else
                    
                     tab2(i, 1) = tab2(i, 1)
                     
      End If
      
      If Application.WorksheetFunction.Type(tab2(i, 2) = 16) Then
     
                    tab2(i, 2) = ""
                    
                    Else
                    
                     tab2(i, 2) = tab2(i, 2)
                     
      End If
      
      If Application.WorksheetFunction.Type(tab2(i, 3) = 16) Then
     
                    tab2(i, 3) = ""
                    
                    Else
                    
                     tab2(i, 1) = tab2(i, 3)
                     
      End If
      
      For j = 4 To j_fin
      
           tab2(i, j) = (tab1(j - 3) * tab1(j - 2) * tab1(j - 1) * tab1(j)) ^ (1 / 4)
           
           If Application.WorksheetFunction.Type(tab2(i, j) = 16) Then
     
                    tab2(i, j) = ""
                    
                    Else
                    
                     tab2(i, j) = tab2(i, j)
                     
      End If
           
      Next j
      
    Next i
    
    Worksheet.Add
    Worksheet.Name = "resultats"
    
    Worksheets("resultats").Activate
    ActiveSheet.Range(Cells(1, 1), Cells(i_fin, j_fin)).Value = tab2
    
    End Sub

  4. #4
    Membre averti Avatar de mordrhim
    Inscrit en
    Avril 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 270
    Points : 314
    Points
    314
    Par défaut
    tu définis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab_entree = ActiveSheet.Range("D5:IJ2627").Value  'Tableau d'input a l'entree
    et tu utilises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab1(i, j) = tab_entree(i, j) + 1
    or ton tableau d'entrée n'est pas défini selon i et j mais donne toujours la même chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Range("D5:IJ2627").Value

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 40
    Points : 18
    Points
    18
    Par défaut Suite
    Je ne sais pas trop mais je pense pas que l'erreur vienne de la car je me suis inspriré de

    http://vb.developpez.com/faqvba/?page=3.4.4#TabVariant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Dim Montab As Variant, cmpt1 As Long, cmpt2 As Long
    Montab = Range("A1:J65535").Value
    For cmpt1 = LBound(Montab, 1) To UBound(Montab, 1)
        For cmpt2 = LBound(Montab, 2) To UBound(Montab, 2)
            Montab(cmpt1, cmpt2) = Montab(cmpt1, cmpt2) * 2 + 3
        Next cmpt2
    Next cmpt1
    Range("A1:J65535").Value = Montab
    tu voii la on passe de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Montab = Range("A1:J65535").Value
    a ...........


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Montab(cmpt1, cmpt2) = Montab(cmpt1, cmpt2) * 2 + 3

  6. #6
    Membre averti Avatar de mordrhim
    Inscrit en
    Avril 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 270
    Points : 314
    Points
    314
    Par défaut
    donc référence quoi ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 40
    Points : 18
    Points
    18
    Par défaut sais pas
    Je pense que lre probleme vient de la et tu as saisi surtout ce que j'ai envie de faire mais je ne sais pas comment le corriger i.e introduire des elements calculés à un tableau variant

Discussions similaires

  1. Pouvez-vous me dire comment on appelle ceci?
    Par legrandse dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/06/2011, 11h55
  2. Réponses: 3
    Dernier message: 16/03/2009, 17h37
  3. Réponses: 1
    Dernier message: 01/10/2007, 17h32
  4. Pouvez-vous me dire yé mon problème simonac??
    Par STRUFIELD dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 06/12/2005, 17h34

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