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 :

Variable integer ne prenant pas la valeur souhaitée


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Points : 0
    Points
    0
    Par défaut Variable integer ne prenant pas la valeur souhaitée
    Bonjour à tous !

    j'ai un problème depuis quelques jour sur ma macro que je n'arrive pas à résoudre...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numero_mois = Workbooks(nom_fichier_données).Worksheets(1).Cells(numero_ligne, indice_colonne_mois)
    Sur cette ligne, je veux faire prendre une valeur à la variable integer numero_mois. j'ai bien mis le chemin du fichier dans la variable nom_fichier_données, c'est bien la feuille 1 et la cellule indiquée...

    Ma macro comporte d'autres problèmes mais je ne peux montrer le code...

    Merci d'avance

  2. #2
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    je te proposerai de rajouté ".Value" a ta ligne de programmation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numero_mois = Workbooks(nom_fichier_données).Worksheets(1).Cells(numero_ligne, indice_colonne_mois).Value
    en considérant que la cellule désignée contienne ton mois

    Enfin c'est ce que j'ai pu comprendre

    tu dis si c'est ça

    A+
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  3. #3
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 202
    Points : 14 353
    Points
    14 353
    Par défaut
    Bonjour,

    Variable integer ne prenant pas la valeur souhaitée
    Elle prend quelle valeur ? et quelle est la valeur de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks(nom_fichier_données).Worksheets(1).Cells(numero_ligne, indice_colonne_mois)
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Points : 0
    Points
    0
    Par défaut
    La valeur "lue" est un nombre ; il n'y a dans la cellule qui doit être lu, qu'un seul chiffre (j'ai décomposé la date au préalable car le fichier Excel vient de l'exportation d'un logiciel qui ne met pas les dates en format "date" mais en texte. Donc impossible de ne prendre que le mois.

    J'ai donc dans la formule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numero_mois = Workbooks(nom_fichier_données).Worksheets(1).Cells(numero_ligne, indice_colonne_mois).Value
    numero_mois = variable integer
    numero_ligne = variable integer
    indice_colonne_mois = constante
    nom_fichier_données = "\\ le chemin complet"

    En rajoutant .value à la fin de mon code j'ai toujours l'erreur '9' ...

  5. #5
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 202
    Points : 14 353
    Points
    14 353
    Par défaut
    La cellule est certainement au format texte. Publie le code qui remplit la cellule.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Points : 0
    Points
    0
    Par défaut
    Le problème c'est que je n'ai pas d'autorisation pour publier plus sur mon code. Du moins, je ne peut pas le publier sur un forum...

    Cependant, j'ai mis plus avant dans 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
    Columns("E:E").Select
        Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        Columns("E:E").Select
        Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        Columns("E:E").Select
        Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
     
        Columns("D:D").Select
        Selection.Copy
        Columns("G:G").Select
        ActiveSheet.Paste
     
        Columns("D:D").Select
        Selection.TextToColumns Destination:=Range("D1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
            :="/", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
            TrailingMinusNumbers:=True
     
        Columns("D:F").Select
        Selection.EntireColumn.Hidden = True
     
     
        Range(Cells(1, 4), Cells(10000, 6)).NumberFormat = "0"
    C'est bien barbare, mais au moins c'est facile à faire pour moi.

    J'insère des colonnes, je décompose ma date qui est en format texte sur 3 colonnes.
    Ensuite, je les converti en format nombre.

  7. #7
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    .NumberFormat ne fait que mettre un format, il ne converti pas un texte en numérique.
    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numero_mois = clng(Workbooks(nom_fichier_données).Worksheets(1).Cells(numero_ligne, indice_colonne_mois).Value)
    eric

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Points : 0
    Points
    0
    Par défaut
    Re bonjour à tous !

    J'ai essayé ta solution eriiic mais ça ne fonctionne toujours pas.

    Je vous mes le début du 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
    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
    138
    139
    140
    141
    Option Explicit
    Option Base 1
     
    'Nom des fichiers en fonction des Centres
     
    Const nom_fichier_données = "\\***"
    Const nom_fichier_CF7** = "\\***"
    Const nom_fichier_CF7** = "\\***"
    Const nom_fichier_CF7** = "\\***"
    Const nom_fichier_CF7** = "\\***"
    Const nom_fichier_CF7** = "\\***"
    Const nom_fichier_CF7** = "\\***"
    Const nom_fichier_CF7** = "\\***"
    Const nom_fichier_CF7** = "\\***"
    Const nom_fichier_CF7** = "\\***"
    Const nom_fichier_CF6** = "\\***"
     
    'indice colonne des différents éléments
     
    Const indice_colonne_distributeur = 1
    Const indice_colonne_C = 2
    Const indice_colonne_employe = 3
    Const indice_colonne_mois = 5
    Const indice_colonne_reference = 8
    Const indice_colonne_quantité = 10
    Const indice_colonne_cout_unitaire = 11
    Const indice_colonne_cout_total = 12
     
    'Déclaration des compteurs pour mettre les lignes copiées les unes à la suite des autres
     
    Dim compteur_CF7** As Integer
    Dim compteur_CF7** As Integer
    Dim compteur_CF7*** As Integer
    Dim compteur_CF7*** As Integer
    Dim compteur_CF7** As Integer
    Dim compteur_CF7** As Integer
    Dim compteur_CF7** As Integer
    Dim compteur_CF7** As Integer
    Dim compteur_CF7** As Integer
    Dim compteur_CF7** As Integer
    Dim compteur_CF6** As Integer
     
    Dim numero_mois As Integer    'variable servant à prendre le numéro du mois, afin de mettre les données dans
                                                 'l'onglet correspondant
    Dim numero_ligne As Integer   'variable servant à compter le nombre de ligne, et ainsi de lire le fichier au
                                                 'fur et à mesure
    Dim nombre_ligne As Integer
     
     
     
    Dim Wbk As Workbook
    Dim Wbk7** As Workbook
    Dim Wbk7** As Workbook
    Dim Wbk7** As Workbook
    Dim Wbk7** As Workbook
    Dim Wbk*** As Workbook
    Dim Wbk7** As Workbook
    Dim Wbk7** As Workbook
    Dim Wbk7** As Workbook
    Dim Wbk7** As Workbook
    Dim Wbk6** As Workbook
     
    Sub Extraction()
     
     
    'Création d'une colonne avec le numéro des mois par rapport à la date
     
        Columns("E:E").Select
        Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        Columns("E:E").Select
        Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        Columns("E:E").Select
        Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
     
        Columns("D:D").Select
        Selection.Copy
        Columns("G:G").Select
        ActiveSheet.Paste
     
        Columns("D:D").Select
        Selection.TextToColumns Destination:=Range("D1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
            :="/", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
            TrailingMinusNumbers:=True
     
        Columns("D:F").Select
        Selection.EntireColumn.Hidden = True
     
     
        Range(Cells(1, 4), Cells(10000, 6)).NumberFormat = "0"
     
     'initialisation des compteurs de ligne pour tous les fichiers
     'Ces "compteurs" servent à mettre les lignes copiées/collées à la suite dans le fichier d'arrivée
     
    compteur_CF7** = 1
    compteur_CF7** = 1
    compteur_CF7** = 1
    compteur_CF7** = 1
    compteur_CF7** = 1
    compteur_CF7** = 1
    compteur_CF7** = 1
    compteur_CF7** = 1
    compteur_CF7** = 1
    compteur_CF7** = 1
    compteur_CF6** = 1
    nombre_ligne = 1
     
    ' Selectionne la première cellule du tableau
    Range("A1").Select
     
    ' Boucle tant que pas vide
     
    Do While Not (IsEmpty(ActiveCell))
        nombre_ligne = nombre_ligne + 1
        Selection.Offset(1, 0).Select
    Loop
     
     
    'la variable nombre_ligne contient le nombre de ligne pleine de la feuille 1.
     
    Set Wbk7*** = Workbooks.Open(Filename:=nom_fichier_CF7**)
    Set Wbk7** = Workbooks.Open(Filename:=nom_fichier_CF7**)
    Set Wbk7** = Workbooks.Open(Filename:=nom_fichier_CF7**)
    Set Wbk7** = Workbooks.Open(Filename:=nom_fichier_CF7**)
    Set Wbk7** = Workbooks.Open(Filename:=nom_fichier_CF7**)
    Set Wbk7** = Workbooks.Open(Filename:=nom_fichier_CF7**)
    Set Wbk7** = Workbooks.Open(Filename:=nom_fichier_CF7**)
    Set Wbk7** = Workbooks.Open(Filename:=nom_fichier_CF7**)
    Set Wbk7** = Workbooks.Open(Filename:=nom_fichier_CF7**)
    Set Wbk6**= Workbooks.Open(Filename:=nom_fichier_CF6**)
     
     
     
     
     
    'Début de la boucle des copier/coller
     
    For numero_ligne = 1 To nombre_ligne
     
    numero_mois = Workbooks(nom_fichier_données).Worksheets(1).Cells(numero_ligne, indice_colonne_mois)



    Voila tout ce qu'il y a avant. Je ne suis pas très très fort en macro, mais j'ai eu quelque cours, donc j'ai esssayer d'avoir des variables les plus claires possible... Cependant le problème persiste...

    La finalité de ma macro est de "copier/coller" des ligne entière depuis un seul et même fichier vers 7 autre fichiers en fonctions de 2 critère, et ensuite différencier tous les mois dans les fichiers d'arrivé en en mettant 1 par feuille. La formule que j'utilise pour déplacer mes lignes est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Wbk7**.Worksheets(numero_mois).Range(Cells(compteur_CF7**, indice_colonne_distributeur), Cells(compteur_CF7**, indice_colonne_cout_total)) = _
            Workbooks(nom_fichier_données).Worksheets(1).Range(Cells(numero_ligne, indice_colonne_distributeur), Cells(numero_ligne, indice_colonne_cout_total))
    J'utilise que des IF pour "choisir" où ira la ligne. Mais ma formule ne marche pas non plus...

    Merci à toute personne m'aidant !!

    Bonne journée

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 46
    Points : 29
    Points
    29
    Par défaut
    Remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numero_mois = clng(Workbooks(nom_fichier_données).Worksheets(1).Cells(numero_ligne, indice_colonne_mois).Value)
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numero_mois = CInt(Workbooks(nom_fichier_données).Worksheets(1).Cells(numero_ligne, indice_colonne_mois).Value)
    tu déclares ta variable numero_mois en integer donc la conversion doit être faite en Integer (Cint) au lieu de CLng pour Long

  10. #10
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 202
    Points : 14 353
    Points
    14 353
    Par défaut
    Et teste la valeur de la cellule, puisque, apparemment, elle est secret défense :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If IsNumeric(Workbooks(nom_fichier_données).Worksheets(1).Cells(numero_ligne, _
            indice_colonne_mois).Value) Then
        numero_mois = CInt(Workbooks(nom_fichier_données).Worksheets(1).Cells(numero_ligne, _
            indice_colonne_mois).Value)
    Else
        MsgBox "Valeur erronnée"
    End If
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Points : 0
    Points
    0
    Par défaut
    Bon, plus j'essaie des "solutions" plus je me dis que VBA est régit par des lois paranormales...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numero_mois = CInt(Workbooks(nom_fichier_données).Worksheets("Données copiées").Cells(numero_ligne, indice_colonne_mois).Value)
    J'ai essayé ça comme tu m'a dis. J'ai même mis, pour être sûr, le nom de ma feuille à la place du numéro.

    Mes variables "numero_ligne" et "indice_colonne_mois" sont biens des integer, et ont la valeur que je souhaite à ce moment là du code.

    Je ne comprends plus rien ...

    Merci quand même pour les solutions, ce forum tient bien sa réputation. Réponse rapide et de qualité.

  12. #12
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 202
    Points : 14 353
    Points
    14 353
    Par défaut
    Ce n'est pas le problème, si tu as du texte dans la cellule, il est normal que tu aies un plantage. Quelle est la valeur de la cellule au moment du plantage ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Points : 0
    Points
    0
    Par défaut
    J'utilise la formule ci-dessous pour mettre la colonne en nombre. C'est la colonne que j'utilise pour ma variable "numero_mois" en nombre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(1, 4), Cells(10000, 6)).NumberFormat = "0"
    Je vais essayer avec un Cint.

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    le format nombre ne dit pas la valeur contenue dans la cellule!

    "toto" au formant numérique ça donne toujours "toto"!

    Daniel n'a pas osé utiliser des caractères plus gros mais il devrait tester l'italique.

    attention "12" ce n'est pas " 12 " bien que le cint devrait y remédier.

  15. #15
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Je pense que tu devrais utiliser le mode pas à pas (F8) avec des espions qui montre les valeurs au cours du déroulement de ta macro

    ce qui pourra répondre à la remarque de Daniel.C.

    si tu as des doutes sur l'utilisation des espions et/ou le mode pas à pas , N'hesite pas a revenir vers nous

    Pour la résolution de ton problème il faut le faire

    @ bientôt

    tu nous tiens au courant
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Points : 0
    Points
    0
    Par défaut
    Re bonjour.

    J'utilise déjà des espions pour vérifier mes valeurs, et le pas à pas pour voir comment ça se passe au fur et à mesure.

    J'ai réglé mes problèmes de variables qui n'étaient pas bonnes... Merci pour les conseils ! sinon j'aurais pas avancé d'1 cm.

    Cependant, le programme me donne toujours une erreur '9' sur la même ligne. Je dois avoir un problème au niveau de l'appel de mon Workbook mais le lien est le bon.

    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
    138
    139
    140
    141
    142
    143
    Option Explicit
    Option Base 1
     
    'Nom des fichiers en fonction des Centres
     
    Const nom_fichier_données = "\\***"
    Const nom_fichier_CF7** = "\\***"
    Const nom_fichier_CF7** = "\\***"
    Const nom_fichier_CF7** = "\\***"
    Const nom_fichier_CF7** = "\\***"
    Const nom_fichier_CF7** = "\\***"
    Const nom_fichier_CF7** = "\\***"
    Const nom_fichier_CF7** = "\\***"
    Const nom_fichier_CF7** = "\\***"
    Const nom_fichier_CF7** = "\\***"
    Const nom_fichier_CF6** = "\\***"
     
    'indice colonne des différents éléments
     
    Const indice_colonne_distributeur = 1
    Const indice_colonne_C = 2
    Const indice_colonne_employe = 3
    Const indice_colonne_mois = 5
    Const indice_colonne_reference = 8
    Const indice_colonne_quantité = 10
    Const indice_colonne_cout_unitaire = 11
    Const indice_colonne_cout_total = 12
     
    'Déclaration des compteurs pour mettre les lignes copiées les unes à la suite des autres
     
    Dim compteur_CF7** As Integer
    Dim compteur_CF7** As Integer
    Dim compteur_CF7*** As Integer
    Dim compteur_CF7*** As Integer
    Dim compteur_CF7** As Integer
    Dim compteur_CF7** As Integer
    Dim compteur_CF7** As Integer
    Dim compteur_CF7** As Integer
    Dim compteur_CF7** As Integer
    Dim compteur_CF7** As Integer
    Dim compteur_CF6** As Integer
     
    Dim numero_mois As Integer    'variable servant à prendre le numéro du mois, afin de mettre les données dans
                                                 'l'onglet correspondant
    Dim numero_ligne As Integer   'variable servant à compter le nombre de ligne, et ainsi de lire le fichier au
                                                 'fur et à mesure
    Dim nombre_ligne As Integer
     
     
     
    Dim Wbk As Workbook
    Dim Wbk7** As Workbook
    Dim Wbk7** As Workbook
    Dim Wbk7** As Workbook
    Dim Wbk7** As Workbook
    Dim Wbk*** As Workbook
    Dim Wbk7** As Workbook
    Dim Wbk7** As Workbook
    Dim Wbk7** As Workbook
    Dim Wbk7** As Workbook
    Dim Wbk6** As Workbook
     
    Sub Extraction()
     
     
    'Création d'une colonne avec le numéro des mois par rapport à la date
     
        Columns("E:E").Select
        Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        Columns("E:E").Select
        Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        Columns("E:E").Select
        Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
     
        Columns("D:D").Select
        Selection.Copy
        Columns("G:G").Select
        ActiveSheet.Paste
     
        Columns("D:D").Select
        Selection.TextToColumns Destination:=Range("D1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
            :="/", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
            TrailingMinusNumbers:=True
     
        Columns("D:F").Select
        Selection.EntireColumn.Hidden = True
     
     
        Range(Cells(1, 4), Cells(10000, 6)).NumberFormat = "0"
     
     'initialisation des compteurs de ligne pour tous les fichiers
     'Ces "compteurs" servent à mettre les lignes copiées/collées à la suite dans le fichier d'arrivée
     
    compteur_CF7** = 1
    compteur_CF7** = 1
    compteur_CF7** = 1
    compteur_CF7** = 1
    compteur_CF7** = 1
    compteur_CF7** = 1
    compteur_CF7** = 1
    compteur_CF7** = 1
    compteur_CF7** = 1
    compteur_CF7** = 1
    compteur_CF6** = 1
    nombre_ligne = 1
     
    ' Selectionne la première cellule du tableau
    Range("A1").Select
     
    ' Boucle tant que pas vide
     
    Do While Not (IsEmpty(ActiveCell))
        nombre_ligne = nombre_ligne + 1
        Selection.Offset(1, 0).Select
    Loop
     
     
    'la variable nombre_ligne contient le nombre de ligne pleine de la feuille 1.
     
    Set Wbk7*** = Workbooks.Open(Filename:=nom_fichier_CF7**)
    Set Wbk7** = Workbooks.Open(Filename:=nom_fichier_CF7**)
    Set Wbk7** = Workbooks.Open(Filename:=nom_fichier_CF7**)
    Set Wbk7** = Workbooks.Open(Filename:=nom_fichier_CF7**)
    Set Wbk7** = Workbooks.Open(Filename:=nom_fichier_CF7**)
    Set Wbk7** = Workbooks.Open(Filename:=nom_fichier_CF7**)
    Set Wbk7** = Workbooks.Open(Filename:=nom_fichier_CF7**)
    Set Wbk7** = Workbooks.Open(Filename:=nom_fichier_CF7**)
    Set Wbk7** = Workbooks.Open(Filename:=nom_fichier_CF7**)
    Set Wbk6**= Workbooks.Open(Filename:=nom_fichier_CF6**)
     
     
     
     
     
    'Début de la boucle des copier/coller
     
    For numero_ligne = 1 To nombre_ligne
    
    Workbooks("E:\suivis conso\Extraction conso.xlsm").Sheets("Données copiées").Activate
     
    numero_mois = Workbooks(nom_fichier_données).Worksheets(1).Cells(numero_ligne, indice_colonne_mois)
    Voila ce que j'ai comme code. La ligne qui ne passe pas est l'avant dernière en gras. Si quelqu'un a une idée de ce qui pourrait poser problème...

    Le chemin est le bon, ainsi que le nom du fichier. Je me suis dis que c'était peut-être ma variable "nom_fichier_donnees" qui ne fonctionnait pas, mais même en mettant le chemin directement dans Workbook j'ai l'erreur...

  17. #17
    Membre habitué Avatar de francis60
    Homme Profil pro
    Modélisation coût/process
    Inscrit en
    Août 2011
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Modélisation coût/process
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2011
    Messages : 178
    Points : 162
    Points
    162
    Par défaut
    Bonjour,

    Question complémentaire, lorsque tu lances l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numero_mois = Workbooks(nom_fichier_données).Worksheets(1).Cells(numero_ligne, indice_colonne_mois)
    Le classeur qui porte le nom nom_fichier_données est-il déjà ouvert ?

  18. #18
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 942
    Points
    55 942
    Billets dans le blog
    131
    Par défaut
    Salut.

    Active d'abord ton classeur, ensuite ta feuille, et utilise une variable objet de type workbook, ce sera plus simple...

    Cela étant, au vu de la macro (Brrr), je gage sur un sérieux problème de conception et d'analyse fonctionnelle, mais tant mieux si ça fonctionne
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  19. #19
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 202
    Points : 14 353
    Points
    14 353
    Par défaut
    J'abandonne. Réponds aux questions, c'est une simple question de politesse.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 46
    Points : 29
    Points
    29
    Par défaut
    Humm, en fait ton erreur n'est pas sur la ligne que tu demandes à corriger depuis le départ ou jme trompe?

    M'enfin bref, pour la déclaration, vaut mieux un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim WBB As Workbook
     
    Set WBB = Workbooks.Open("\\chemin")
    Ensuite et peut-être que je me trompe, tu veux récupérer tes données dans la colonne mois

    Vaut mieux faire un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim data_colonne_mois As Variant
    Dim range As Range
     
    Set range = WBB.Sheets(1).Range("A1:A" & nombre_ligne) 'remplacer A par la colonne concernée)
    data_colonne_mois = range.Value
     
    For numero_ligne = 1 To nombre_ligne
    numero_mois = CInt(data_colonne_mois(numero_ligne,1))
    'le reste de ton code
    Next numero_ligne

Discussions similaires

  1. [XL-2010] ma variable x ne reprends pas la valeur voulu
    Par karmas93120 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/09/2014, 20h08
  2. [XL-2003] Variable qui ne retient pas la valeur
    Par Marc_27 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/07/2009, 09h16
  3. Variable qui ne prend aucune pas de valeur
    Par bdptaki dans le forum Delphi
    Réponses: 3
    Dernier message: 29/04/2007, 16h09
  4. [POO] Variable ne contenant pas la valeur attendue
    Par norby042 dans le forum Langage
    Réponses: 5
    Dernier message: 09/11/2006, 10h06
  5. [Tableaux] Variable qui ne prend pas sa valeur
    Par stephane78 dans le forum Langage
    Réponses: 11
    Dernier message: 19/08/2006, 20h30

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