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 :

Excel VBA : erreur 1004, définir plage de donnée variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2017
    Messages : 36
    Par défaut Excel VBA : erreur 1004, définir plage de donnée variable
    Bonjour, je cherche a faire une macro qui va lire une plage de données dans un classeurs excel et qui va les recopier dans un autre classeur excel. Mais j'ai l'erreur 1004 sur la ligne 86 . J'ai cherché sur internet et c'est parce que la plage de cellule que je recopie est trop importante. Cela veut donc dire que j'ai un problème dans ma délimitation de ma plage de cellule que je lis et que je recopie dans un autre classeur excel.

    En effet, le but de ma macro et de lire les cellules qui sur l'axe X correspond à des colonnes spécifiques et en Y je veux qu'elle lise autant de ligne que la colonne B a de valeurs renseignées. Par exemple si dans cette colonne B j'ai 5 lignes remplies, je veux qu'elle s'arrête à la ligne 5 (je veux que ma macro lise jusqu'à la dernière ligne remplie de la colonne B).


    Je pense avoir l'erreur sur les lignes 38 à 42, j'en ai peut être ailleurs aussi
    Voici mon code.

    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
    Sub TEST1()
    '
    ' TEST1 Macro
    '
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
     
    'Décalaration des variables
     
    Dim Wk1 As Workbook 'doc où il y a la macro'
    Dim Wk2 As Workbook 'doc fiche de synthèse'
    Dim Wk3 As Workbook 'doc qui devra être importer sur TWIMM'
    Dim fiche_de_synthèse As String
    Dim fichier_à_importer As String
    Dim i, j, k As Integer 'i représente la variable du nombre d'élémeent en Y de la colonne CODE_SITE'
    Dim dernligneWk2 As Double 'dernière ligne de la colonne code_site, attention si ajout de colonne avant il faut modifier le n° de la colonne ici'
    Dim derncolWk2 As Double 'dernière colonne du tableau fiche de synthèse'
    Dim nbr_col() As Integer
    Dim fin() As String
    Dim nom_col(4) As String 'dans le classeur fiche de synthèse'
    Dim nom_colonne(4) As String 'dans le classeur IMPORT TWIMM'
    Dim place_col(4) As Integer
        Dim code_du_site As String
        Dim nom_du_site As String
        Dim lot_sur_le_site As String
     
     
     
    'ici on indique où lire les chemins dans la feuille excel où il y a la macro'
    Set Wk1 = ThisWorkbook
        fiche_de_synthèse = Wk1.Sheets(1).Range("E3")
        fichier_à_importer = Wk1.Sheets(1).Range("E6")
     
    Set Wk2 = Workbooks.Open(fiche_de_synthèse)
     
     
    'définition des bornes du tableau source'
        With Wk2.Sheets("fiche de synthèse")
    dernligneWk2 = Cells(Application.Rows.Count, 2).End(xlUp).Row 'prend la valeur de la dernière ligne de la colonne C (CODE_SITE)'
        ReDim fin(dernligneWk2 - 1)
    derncolWk2 = Cells(7, Application.Columns.Count).End(xlToLeft).Column 'prend la valeur de la dernière colonne de la ligne où il y a les titre (ligne 6)'
        End With
     
     
    For k = 1 To 50
        k = k + 1
    Next
     
    'lecture des code_site'
    For k = 1 To UBound(fin)
        fin(k) = Wk2.Sheets("fiche de synthèse").Cells(k + 1, 2)
    Next
     
     
    'création des vecteurs noms colonnes, attention les noms ne doivent pas changer'
    'dans le classeur FICHE DE SYNTHESE'
    nom_col(1) = "CODE_SITE"
    nom_col(2) = "NOM_S"
    nom_col(3) = "LOTS"
    'on les mettra toutes plus tard'
     
    'création des vecteurs noms colonnes, attention les noms ne doivent pas changer'
    'dans le classeur IMPORT TWIMM'
    nom_colonne(1) = "CODE_SITE"
    nom_colonne(2) = "NOM" 'il y a plusieurs colonnes différentes qui ont ce nom'
    nom_colonne(3) = "LOTS"
    'ici aussi on les mettra toutes plus tard'
     
     
    'on commence la lecture dans le classeur fiche de synthèse (Wk2), en  localisant les info à traiter par lecture du nom des colonnes'
    For j = 1 To UBound(nom_col)
        For i = 1 To derncolWk2
            If UCase(nom_col(j)) Like "*" & UCase(Wk2.Sheets("fiche de synthèse").Cells(7, i)) & "*" And UCase(Wk2.Sheets("fiche de synthèse").Cells(7, i)) <> "" Then
                place_col(j) = i
                Exit For
            Else
            End If
        Next
    Next
     
     
    Set Wk3 = Workbooks.Open(fichier_à_importer)
     
    'on récupère les données du classeur fiche de synthèse'
        For ligneWk2 = 7 To dernligneWk2
            If fin(ligneWk2) = Wk2.Sheets("fiche de synthèse").Cells(ligneWk2, place_col(3)) Then
     
    'on créer des variables temporaires dans la macro'
                    code_du_site = Wk2.Sheets("fiche de synthèse").Cells(ligneWk2, place_col(1))
                    nom_du_site = Wk2.Sheets("fiche de synthèse").Cells(ligneWk2, place_col(2))
                    lot_sur_le_site = Wk2.Sheets("fiche de synthèse").Cells(ligneWk2, place_col(3))
     
    'on colle les valeurs qui sont stockées dans les variables temporaires dans le fichier à importer sur TWIMM'
                If Wk3.Sheets("SITES").Cells(ligneWk3 + 1, nom_colonne()) = "" Or Wk3.Sheets("SITES").Cells(ligneWk3 + 1, nom_colonne()) = "" Or Wk3.Sheets("SITES").Cells(ligneWk3 + 1, nom_colonne()) = "" Then 'permet de recopier dans la feuille "SITES" dans la colonne "CODE_SITE"'
                    Wk3.Sheets("SITES").Cells(ligneWk3 + 1, nom_colonne(1)).Value = code_du_site 'CODE_SITE'
                    Wk3.Sheets("SITES").Cells(ligneWk3 + 1, nom_colonne(2)).Value = nom_du_site 'NOM_S qui correspond au nom du site attribué'
                    Wk3.Sheets("SITES").Cells(ligneWk3 + 1, nom_colonne(3)).Value = lot_sur_le_site 'LOTS qui correspond au lot sur le site'
                End If
            End If
        Next
     
     
    Wk2.Close
    Wk3.Save
    Wk3.Close
     
     
    Application.ScreenUpdating = True
     
     
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Je veux croire que tu t'es empressé de lire en mode debug ce que valent :
    - fin(ligneWk2) et place_col(3)
    combien valent-ils lors de l'entrée en ce mode ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2017
    Messages : 36
    Par défaut
    Bonjour unparia,

    place_col() est un vecteur qui sert a chercher sur nom_col() les colonnes souhaitées. Cette recherche se fait dans Wk2 qui correspond au fichier source. Ce fichier est constitué d'un tableau avec une cinquantaine de colonnes, mais avec ma macro je ne veux pas prendre toutes ces colonnes mais juste des colonnes spécifiques (j'ai 44 colonnes a prendre), c'est pour ça que je le définis à travers un vecteur nom_col(1) = "NOM_CODE", nom_col(2) = "NOM_S"..... (à la ligne 57).

    pour fin(ligneWk2), fin est un vecteur défini au début, c'est lui qui est censé délimiter la ligne quand je récupère les données non ? Je me suis peut être embrouillé ici

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Ce n'est pas la réponse à la question pourtant claire que je t'ai posée ...
    ce que valent :
    - fin(ligneWk2) et place_col(3)
    combien valent-ils lors de l'entrée en ce mode ?
    Ce sont CES VALEURS (telles qu'elles sont en mode debug) , que je souhaite connaître et non ce que tu penses qu'elles sont.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2017
    Messages : 36
    Par défaut
    Désolé unparia, mais je ne comprends pas ce que tu me demandes par "mode debug"

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Ah ! Il est peut-être temps que tu t'intéresses à l'interface développeur que tu utilises.
    Commence par la lecture de la rubrique Suivi de l'exécution du code de ton aide interne VBA.
    Merci de t'intéresser au moins au mode d'emploi de ton outil.

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par naudju Voir le message
    Désolé unparia, mais je ne comprends pas ce que tu me demandes par "mode debug"
    Dans VBA > Affichage > Fenêtre de variables locales.
    Cette fenêtre donne la valeur de chaque variable utilisée tant qu'on reste en mode débug, c'est-à-dire qu'on appuie sur le bouton Débogage quand une erreur se produit et qu'on appuie pas sur le bouton Stop.
    Ouvre cette fenêtre et regarde ce que contiennent REELLEMENT tes variables à ce moment-là.

Discussions similaires

  1. Somme si avec plusieurs conditions et plage de données variables.
    Par arnold95 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/10/2007, 14h19
  2. Créer un graph avec une plage de donnée variable
    Par nono le golfeur dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/06/2007, 17h15
  3. sélectionner plage de données variable sous Excel
    Par pschmidtke dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/07/2006, 15h25
  4. [C#] pilotage excel: définir plage de données d'un graphique
    Par cortex024 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/03/2006, 17h34
  5. [VBA] excel croisé dynamique et plage de données variables
    Par totoche dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 04/01/2006, 18h14

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