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 de variable


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 10
    Points : 1
    Points
    1
    Par défaut Problème de variable
    Bonjour,

    J'ai un problème de variable, je les ai défini de la maniéré suivante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Test()
     
     
    Dim libelle As Range
    Dim libelle_fev As Range
    Dim Solde As Range
     
     
    libelle = Range("A2").Select
    libelle_fev = Workbooks("budget fev.xlsx").Worksheets("Feuil1").Range("A1").Select
    Solde = Workbooks("budget fev.xlsx").Worksheets("Feuil1").Range("B1").Select
    Mais le programme me dit qu'elles ne sont pas définie. Je commence juste le vba (4 jours environs) et je vois pas où je me trompe sur ce coup j'ai du mal définir le chemin je suppose ou l'objet.
    Si quelqu'un pourrait m'éclairer sur mon erreur je le remercierai grandement

    Cordialement Mehen

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Range est un objet
    on affecte un objet à une variable par une instruction Set et non par une simple égalité.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    l'instruction "Set" sert a instancier ta variable en tant qu'object ici "Range
    et tes ".select c'est pourquoi faire ? les selectionner toutes les 3 en meme temps ?????
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim libelle As Range
     Dim libelle_fev As Range
     Dim Solde As Range
     
     
     set libelle = Range("A2")'.Select
     set libelle_fev = Workbooks("budget fev.xlsx").Worksheets("Feuil1").Range("A1")'.Select
     set Solde = Workbooks("budget fev.xlsx").Worksheets("Feuil1").Range("B1")'.Select
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci à vous mes variables on enfin une valeur! Je comprend je vais rajouter ca dans mes feuilles d'utilisation.

    Alors mes select c'était pour les sélectionner en effet mais je les ai supprimé vus que ca marchait pas car après je vais construire une condition.

    Je vais essayer de programmer:

    libelle = libelle_fev et si vrai alors la valeur solde ira dans une cellule et si faux ne rien faire.

    (Dit comme ca une simple formule SI excel devrait marcher (enfin moi jai pas trouvé) mais non pour une raison: Quand les libellés ne correspondaient pas rien ne s'affichait (donc cool) mais excel se decalait d'une ligne. Donc les soldes finissaient par se décaler).


    Imaginons

    document excel 1 Document 2 avec les soldes (dossier généré par un logi

    6005000 8000 6005000 8000
    6000600 6000300 4000
    6000300 6000700 3000
    6040000 2000 6040000 2000



    La dans mon exemple on peut voir que le libelle 600300 n'a pas eu ca valeur et après sur de grand tableau ca créé des décalages importants. Et bien-sur je ne peux pas toucher à la présentation du document excel 1 et ma responsable de stage veut avoir un truc souple (genre rajouter des comptes si besoin) donc je me suis tourné vers la macro que je pense être ma solution.


    Bref je vais essayer de faire ma condition je reviendrai vers vous si je suis en train de manger mon pc.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Hum d'accord merci pour la piste c'est sympa .



    Je fournirai une pièce jointe demain je veux essayer d'avancer tout seul un peu c'est en forgeant qu'on devient forgeron et merci encore çà m'a débloquer. pour le moment.

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    rebonjour,


    Voila je bloque encore. Voila mon code, il fonctionne mais que sur 1 case normal j'en ai défini qu'une. Mais quand je mets Range("A2:A297"), ("A2:A96"),("E2:E96") et enfin ("C2: C297") ça fonctionne plus. J'ai donc eu l'idée de faire des incrémentations ou une boucle mais je vois pas comment la coder.

    Je vois pas comment la coder, car je veux que quand le numéro de compte du ficher 1= numéro du fichier 2 alors le solde du fichier 1 égale le solde fichier 2. Sauf que le fichier 1 à bcp plus de ligne (et je ne peux pas le modifier et je pense que ca va poser problème).

    De plus les numéros ne sont pas classés de la même maniérè dans le fichier 2 qui est généré via un autre logiciel. Donc si quelqu'un à une idée je suis preneur car depuis hier je bloque.

    je vais mettre des fichiers exemple pour que ça soit plus claire.

    fichier 1.xlsxFichier 2.xlsx

    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
    Sub Test
     
    'Determination des variables'
     
    Dim numero_Budget As Range
    Dim numero_logiciel As Range
    Dim Solde_logiciel As Range
    Dim Fevrier As Range
     
    'On utilise set pour définir nos objets, il faut ouvrir les deux dossiers'
     
    Set numero_Budget = Range("A2")
    Set numero_logiciel = Workbooks("mars.csv").Worksheets("mars").Range("A2")
    Set Solde_logiciel= Workbooks("mars.csv").Worksheets("mars").Range("E2")
    Set Fevrier = Range("C2")
     
    'On pose la condition'
     
    If numero_Budget =numero_logiciel Then
     
    Fevrier = Solde_logiciel
     
     
     
     
    Else
     
     
     
    End If
    End Sub

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour
    etant donné que visiblement tu travaille sur deux classeur ouverts
    il te faut etre plus precis sur la determination de tes variable
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set numero_Budget = thisworkbook.nomdefeuille.Range("A2")
    Set numero_logiciel = Workbooks("mars.csv").Worksheets("mars").Range("A2")
    Set Solde_logiciel= Workbooks("mars.csv").Worksheets("mars").Range("E2")
    Set Fevrier = thisworkbook.nomdefeuille.Range("C2")
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Ok merci, je reprend le code aujourd'hui en espérant que je vais arriver à en voir la fin XD.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Bonjour, c'est encore moi, bon j’avance doucement mais surement on va dire.

    Maintenant j'ai un autre problème quand j'exécute mon cote (il va bien jusqu'a 300 lignes donc cool) mais au lieu de me mettre les soldes en C dans mon 1er fichier il me mets que des "vrais" et il remplace par des "vrais" les libelles dans le fichier 1 et 2 .


    Question pourquoi car la je comprend pas ?





    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
    Sub Test()
     
    'Determination des variables'
     
    Dim libelle_Budget As Range
    Dim libelle_Cegid As Range
    Dim Solde_Cegid As Range
    Dim Fevrier As Range
     
    'On utilise set pour définir nos objets, il faut ouvrir les deux dossiers'
     
    Set libelle_Budget = Worksheets("Budget").Range("A2:A300")
    Set libelle_Cegid = Workbooks("mars.csv").Worksheets("mars").Range("A2:A300")
    Set Solde_Cegid = Workbooks("mars.csv").Worksheets("mars").Range("E2:E300")
    Set Fevrier = ThisWorkbook.Worksheets("Budget").Range("C2:C300")
     
    'On pose la condition'
     
    libelle_Budget = Cells(2, 1).Select
    libelle_Cegid = Cells(2, 1).Select
    Solde_Cegid = Cells(2, 5).Select
    Fevrier = Cells(2, 3).Select
     
    If libelle_Budget = libelle_Cegid Then
    Fevrier = Solde_Cegid
     
     
     
    End If
     
    End Sub

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    supprime tes "select"
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Re

    Ok je ferai ca lundi et je te tien au courant et merci pour ton aide

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    hum en supprimant les selects j'ai une erreur d'incompatibilité de type. C'est étrange pour car toutes mes variables ont le même type je comprend pas là.

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    J'ai resimplifié le nom de mes variables sinon plus rien ne remarchait. Je voulais faire une boucle mais ça fonctionne pas et ça me met incompatibilité de type au niveau de ma boucle for .

    Si quelqu'un sait pourquoi ca m'aiderai beaucoup!



    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
    Sub Test()
     
    'Determination des variables'
     
    Dim numero_Budget As Range
    Dim numero_logiciel As Range
    Dim Solde_logiciel As Range
    Dim Fevrier As Range
     
    'On utilise set pour définir nos objets, il faut ouvrir les deux dossiers'
     
    Set numero_Budget = Range("A2,A300")
    Set numero_logiciel = Workbooks("mars.csv").Worksheets("mars").Range("A2, A300")
    Set Solde_logiciel = Workbooks("mars.csv").Worksheets("mars").Range("E2, E300")
    Set Fevrier = Range("C2, C300")
     
    'On pose la condition'
     
    For numero_Budget = Range("A2") To Range("A300")
     
    Next
     
    If numero_Budget = numero_logiciel Then
     
    Fevrier = Solde_logiciel
     
     
     
     
    Else
     
     
     
    End If
    End Sub

  14. #14
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Bonjour,

    déjà consulter l'aide VBA interne de For Each

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  15. #15
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim numero_Budget As Range
    objet range, donc, auquel on a affecté une plage par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set numero_Budget = Range("A2,A300")
    quel sens aurait alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For numero_Budget = Range("A2") To Range("A300")
    ?

    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim numero_logiciel As Range
    et Dim Fevrier As Range
    faisant que numero numero_logiciel et Fevrier sont des objets,
    quel sens auraientt également :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If numero_Budget = numero_logiciel Then
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fevrier = Solde_logiciel
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Bonjour

    Alors pour le for vus que j'ai defini une plage pour numero_Budget je veux qu'il commence par le A2 et qu'il fasse le if jusqu'au A300. (la plage contient des libelle genre 60100000).

    numero_logiciel sa plage elle correspond aux libelles venant d'un logiciel de gestion cette plage contient les soldes correspondant à chaque libellé.


    Donc quand les libellés du budgets = libellés du logiciel alors

    la colonne février prend les valeurs des soldes.



    Pourquoi je passe par la vba tu va me dire car sur le principe une simple formule SI suffit. Je passe par la vba car La présentation est totalement différente entre les 2 fichiers.

    Le 1er fichier contenant juste les libelles possède environ 300 lignes (et je peux pas le modifier, en gros tous les comptes comptable plus des lignes vides pour la présentation etc..) et le fichier sortant du logiciel possède lui généralement une 100 de lignes.

    Avec les formules SI j'ai toujours un décalages qui finie par se faire donc j'ai pensé que la vba pourrai régler le problèmes.

Discussions similaires

  1. [VB.NET] Probléme de variable
    Par Silvia12 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 02/03/2005, 11h51
  2. [Debutant(e)]problème de variable d'environnement
    Par tolsam dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 12/08/2004, 19h08
  3. Problème de variable
    Par vp dans le forum Windows
    Réponses: 2
    Dernier message: 14/05/2004, 16h27
  4. [Débutant] Problème de variables
    Par bonnefr dans le forum SWT/JFace
    Réponses: 9
    Dernier message: 12/05/2004, 17h41
  5. [servlet]problème de variable jamais nulle
    Par omega dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 18/03/2004, 09h31

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