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 lors de la création d’une plage de cellules en VBA [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Problème lors de la création d’une plage de cellules en VBA
    Mon problème est le suivant :

    J’ai besoin de créer des plages de cellule avec différents éléments variables.

    Pour cela j’utilise la ligne de code suivant (celle-ci se trouve dans une boucle)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.Names.Add Name:=base_nom_plage & "_XXX", RefersTo:="=" & Range(Cells(Ligne_haut, 1), Cells(Derniere_ligne, 1)).Address
    Le problème est que lors de la deuxième itération j’ai le message suivant : « Erreur d'exécution '1004': La méthode 'Cells' de l'objet '_Global' a échoué »

    Du coup, j’ai modifié ma ligne de code de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.Names.Add Name:=base_nom_plage & "_XXX", RefersTo:="=" & Worksheets(Nom_nouvelle_feuille).Range(Worksheets(Nom_nouvelle_feuille).Cells(Ligne_haut, 1), Worksheets(Nom_nouvelle_feuille).Cells(Derniere_ligne, 1)).Address
    Suite à cette modification, toujours lors de la deuxième iteration, j’ai le message suivant : « Erreur d'exécution '1004': La formule que vous avez tapée contient une erreur »

    Je n’arrive pas à résoudre le problème et je ne comprends pas pourquoi cela fonctionne qu’une fois seulement ?

  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
    Citation Envoyé par c_tampon Voir le message
    Pour cela j’utilise la ligne de code suivant (celle-ci se trouve dans une boucle)
    ...
    Je n’arrive pas à résoudre le problème et je ne comprends pas pourquoi cela fonctionne qu’une fois seulement ?
    Le problème est selon toute évidence dans l'écriture de la boucle. Précisément celle dont on ne voit pas le code
    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
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Bonjour,
    Essaye avec un With

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    with worksheets(Nom_nouvelle_feuille)
    ActiveWorkbook.Names.Add Name:=base_nom_plage & "_XXX", RefersTo:="=" & .Range(.Cells(Ligne_haut, 1), .Cells(Derniere_ligne, 1)).Address
    end with
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  4. #4
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    Commence par regarder dans la fenêtre des variables locales, le contenu de chacune des variables présentes dans cette ligne de code.
    Comme je le dis souvent, le diable se cache dans la variable.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Bonjour,
    merci pour vos conseils. Pour le moment je n'ai pas trouver la solution :roll:.
    J'ai essayer la solution de halaster08, mais le probleme reste le même. je n'ai pas trouvé la solution au travers de la fenêtre variable. le contenu de celle-ci me semble logique.

    Je vous joint une partie de mon code dans un fichier excel permettant de le faire tourner. Je ne suis pas un pro et surement il pourrait être optimisé :lol:

    Par la même occasion, si vous savez comment faire pour que les noms de plages dans les graphiques que je créée puisse bien apparaitre sous la forme d'un nom de plage (exemple: Suivi_graphique!D_01_Even_LIM_50) et non d'une sélection fixe (exemple : Suivi_graphique!$H$1603:$H$1629). je suis preneur :lol:.

    Merci d'avance pour votre aide.
    Essai Macro.xlsm

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    je continue mes recherches pour résoudre mon probleme.
    Je fais des tests en mettant des variables (voir ci-dessous) pour essayer de contourner le probleme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      With Worksheets(Nom_nouvelle_feuille)
                    nom_plage = base_nom_plage & "_Lot"
                    nom_plage_range = Worksheets(Nom_nouvelle_feuille).Range(Worksheets(Nom_nouvelle_feuille).Cells(Ligne_haut, 1), Worksheets(Nom_nouvelle_feuille).Cells(Derniere_ligne, 1)).Address 
                    ActiveWorkbook.Names.Add Name:=nom_plage, RefersTo:=nom_plage_range
      End With
    le résultat n'est pas satisfaisant car il génère bien tout les nom de plages (la boucle s’exécute plusieurs fois) mais les plages ne peuvent plus être utilisées pour générer les graphiques. En fait, les valeurs de la plage de donnée sont remplacées par les références de la plages de donnée.

    Du coup, je soupçonne plus un probleme de déclaration de variable ou de remise à 0 de certaine, dans mon premier code, qui l’empêchait d'effectuer la boucle plusieurs fois.
    J'ai essayer de vider certaine variable avec "EMPTY" mais sans succès

    Est ce que vous avez des pistes qui pourraient m'aider ?

  7. #7
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    Ne connaissant rien du reste de ton code (en particulier comment tes variables sont déclarées et renseignées), je ne vois pas comment il serait possible de comprendre ton problème.
    Nom : smileys-boule-cristal-tns0.gif
Affichages : 99
Taille : 49,8 Ko
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  8. #8
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Bonjour Menhir,
    Si tu souhaites m'aider, tu trouveras le fichier contenant le code dans mon poste du 22/02.
    Merci d'avance

  9. #9
    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
    Si tu souhaites m'aider, tu trouveras le fichier contenant le code dans mon poste du 22/02.
    Si tu souhaites que j'essaie de t'aider, ne m'invite pas à ouvrir un classeur tiers . Ma religion en matière de sécurité me l'interdit.
    Isole la difficulté (ce que tu as fait) en montrant (ce qui t'est demandé) où et comment tu as déclaré et initialisé les variables que ton code utilise
    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.

  10. #10
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par c_tampon Voir le message
    Si tu souhaites m'aider, tu trouveras le fichier contenant le code dans mon poste du 22/02.
    Comme beaucoup de participants à ce forum, je n'ouvre pas les pièces jointes, pour plusieurs raisons, entre autre celles expliquées ici :
    https://www.developpez.net/forums/d8...s-discussions/
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  11. #11
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Bonsoir,

    Alors, cela avance bien voir très bien

    Je ne comprends toujours pas pourquoi cela plantait à la deuxième itération, néanmoins j'ai réussi à faire fonctionner ma boucle.

    Pour cela je suis partie sur le deuxième message d'erreur que j'avais
    Du coup, j’ai modifié ma ligne de code de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.Names.Add Name:=base_nom_plage & "_XXX", RefersTo:="=" & Worksheets(Nom_nouvelle_feuille).Range(Worksheets(Nom_nouvelle_feuille).Cells(Ligne_haut, 1), Worksheets(Nom_nouvelle_feuille).Cells(Derniere_ligne, 1)).Address
    Suite à cette modification, toujours lors de la deuxième itération, j’ai le message suivant : « Erreur d'exécution '1004': La formule que vous avez tapée contient une erreur »
    Du coup j'ai cherché qu'est ce qui pouvait faire que la formule ne fonctionnait pas, et j'ai trouvé
    J'ai ajouté une ' après le signe = cela me donne le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     With Worksheets(Nom_nouvelle_feuille)
                    nom_plage = base_nom_plage & "_Lot"
                    nom_plage_range = "='" & Nom_nouvelle_feuille & "'!" & Worksheets(Nom_nouvelle_feuille).Range(Worksheets(Nom_nouvelle_feuille).Cells(Ligne_haut, 1), Worksheets(Nom_nouvelle_feuille).Cells(Derniere_ligne, 1)).Address 
                    ActiveWorkbook.Names.Add Name:=nom_plage, RefersTo:=nom_plage_range
     End With

    Cela n'explique pas pourquoi cela fonctionnais au premier passage et pas au suivant, mais cela fonctionne.

    Je passe donc mon sujet en résolu pour ce point


    Note pour unparia : je ne suis pas un expert ! je ne demande pas non plus que l'on me ponde une solution toute fait pour mes rares interventions sur ce forum. Néanmoins, lorsque j’envoie une bouteille à la mer j’essaie de faire le nécessaire pour apporter les éléments pour cette aide. Or , je te cite
    Le problème est selon toute évidence dans l'écriture de la boucle. Précisément celle dont on ne voit pas le code
    Par conséquent, comme un bon néophyte que je suis, j'ai construit un fichier avec une partie de mon code pour qu'il soit fonctionnel avec des données lambda pensant que celui-ci pourrait faciliter l'aide que l'on pourrait m'apporter. Cela suite à ton sous entendu. Au final, ta réponse est loin d’être constructive et ne semble être là que pour incrémenter un compteur
    je préfère de loin la réponse factuelle et bien plus diplomate de Menhir. Penses y la prochaine fois que tu croiseras un autre néophyte comme moi

  12. #12
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par c_tampon Voir le message
    Par conséquent, comme un bon néophyte que je suis, j'ai construit un fichier avec une partie de mon code pour qu'il soit fonctionnel avec des données lambda pensant que celui-ci pourrait faciliter l'aide que l'on pourrait m'apporter.
    Il eut mieux valu copier ton code dans un message du forum, encadré de balises CODE.
    Pour la prochaine fois, tu le sauras.

    Crois-moi, sans même parler de malveillances, les simples maladresses de néophytes dans des macros peuvent causer de gros problèmes. Je sais de quoi je parle, ça m'a déjà fait perdre une demi-journée de boulot.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Problème lors de la création de tableau croisé dynamique avec vba
    Par juju05 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/07/2012, 17h10
  2. Réponses: 11
    Dernier message: 05/08/2009, 12h30
  3. Réponses: 2
    Dernier message: 21/11/2005, 09h29
  4. Clé étrangère problème lors de la création de la table.
    Par snoopy69 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 18/08/2005, 08h15
  5. Réponses: 1
    Dernier message: 26/05/2005, 12h24

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