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 :

Boucle While Wend avec pour condition le contenu d'une cellule d'un autre classeur [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien Qualité
    Inscrit en
    Octobre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien Qualité

    Informations forums :
    Inscription : Octobre 2015
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Boucle While Wend avec pour condition le contenu d'une cellule d'un autre classeur
    Bonjour,

    Voici mon problème :

    Je souhaite effectuer un test sur les cellules de la colonne A du classeur "tableau de pilotage".
    Je veux que la macro détermine la ligne à laquelle la valeur d'une cellule dans la colonne A du classeur "tableau de pilotage" correspond à la valeur de la cellule fusionnée "CU2 : DN2" du classeur "FCA_xxx" (le nom du fichier est variable) et copie une ligne spécifique dans le classeur "FCA_xxx" et la colle à la place de la ligne correspondante dans le classeur "tableau de pilotage"

    Voici mon morceau de 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
     
    Sub MAJ()
     
    ActiveWorkbook.Sheets("Synthèse").Select
    If UCase(Range("n10")) = 0 Then     'cas pour 0 action (dans la suite du code je copie 1,2 3,4 ou 5 lignes selon le nombre d'actions)
    Range("A10:X10").Select
    selection.Copy
    Workbooks.Open Filename:= _
            "\\chemin\Tableau de Pilotage FCA.xls"
     
    ActiveWorkbook.Sheets("Tableau de suivi").Select
    Range("A3").Select
    While ActiveCell <> ThisWorkbook.Sheets("Modèle").Range("CU2:DN2")
     
    ActiveCell.Offset(1, 0).Select
     
    Wend
    selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    ActiveWorkbook.Save
    ActiveWorkbook.Close
    End If
    ...
    J'ai remarqué en faisant un tour sur le forum qu'il était déconseillé d'utiliser la fonction selection.copy mais à vrai dire je suis débutant en VBA et ne sais pas comment m'en passer !

    Merci d'avance pour l'aide que vous pourriez m'apporter !

    Feldenn

  2. #2
    Candidat au Club
    Homme Profil pro
    Technicien Qualité
    Inscrit en
    Octobre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien Qualité

    Informations forums :
    Inscription : Octobre 2015
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Modifications du code
    Rebonjour,

    J'ai apporté quelques modifs à mon code notamment en définissant une variable :

    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
    Sub MAJ()
     
    Dim NomFCA As Variant
     
    ActiveWorkbook.Sheets("Modèle").Range("CU2:DN2").Value = NomFCA
     
     
    ActiveWorkbook.Sheets("Synthèse").Select
    If UCase(Range("n10")) = 0 Then     'cas pour 0 action
    Range("A10:X10").Select
    selection.Copy
    Workbooks.Open Filename:= _
            "\\chemin\Tableau de Pilotage FCA.xls"
     
    ActiveWorkbook.Sheets("Tableau de suivi").Select
    Range("A3").Select
    While ActiveCell <> NomFCA
     
    ActiveCell.Offset(1, 0).Select
     
    Wend
    selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    ActiveWorkbook.Save
    ActiveWorkbook.Close
    End If
    Le soucis c'est qu'il détecte la valeur de NomFCA comme étant vide alors qu'il y a bien quelque chose d'écrit dedans (FCA_55).
    Est-ce que j'aurais mal défini ma variable ?

    Need help

    Feldenn

  3. #3
    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, bonjour !

    Comme le VBA ne se trompe pas, l'erreur est donc dans la conception !

    Suivre le code en mode pas à pas via la touche F8 tout en contrôlant le contenu de la fenêtre des Variables locales
    aide à trouver la boulette … (Au passage tu verras l'oubli de l'alimentation de cette variable !)


    _____________________________________________________________________________________________________
    Je suis Charlie, Bardo, Sousse
    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)

  4. #4
    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,
    Citation Envoyé par Feldenn Voir le message

    ... correspond à la valeur de la cellule fusionnée "CU2 : DN2" du classeur "FCA_xxx" ...
    Dans le cas d'une cellule fusionnée, il est inutile de tester le contenu de CU2 jusqu'à DN2 car les informations sont uniquement dans CU2 (la première) dans les autre c'est vide.

    Pour avoir eu des soucis sur certains classeurs, il vaut mieux ne pas mettre d'accent dans les nom d'onglet et les noms de cellule même s'il l'accepte (du vécu)

    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 !

  5. #5
    Candidat au Club
    Homme Profil pro
    Technicien Qualité
    Inscrit en
    Octobre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien Qualité

    Informations forums :
    Inscription : Octobre 2015
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    J'ai trouvé la solution à mon problème donc je vais l'exposer ici, ça peut toujours servir.

    Voilà le morceau de code en question

    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
    Sub MAJ() 'macro pour la maj automatique du tableau de pilotage lors de la modification d'une FCA
     
    Dim NomFCA As Variant, value As String 'on définit la variable NomFCA
     
    NomFCA = ActiveWorkbook.Sheets("Modèle").Range("CU2").value    'je ne prend que la 1ère cellule du groupe de cellules fusionnées
     
     
    ActiveWorkbook.Sheets("Synthèse").Select 'Copie des lignes en fonction du nombre d'actions
        If UCase(Range("n10")) = 0 Then         'Cas pour 0 action
            Range("A10:X10").Select
            selection.Copy
            Workbooks.Open Filename:= _
                "\\chemin\Tableau de Pilotage FCA.xls"
     
            ActiveWorkbook.Sheets("Tableau de suivi").Select
            Range("A3").Select
     
            While ActiveCell <> NomFCA      'tant que la valeur de la cellule active n'est pas égale à celle de la variable "NomFCA", je descends d'une ligne
     
                ActiveCell.Offset(1, 0).Select
     
            Wend
                selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _           'collage spécial : valeur d'une plage de données
                :=False, Transpose:=False
                ActiveWorkbook.Save
                ActiveWorkbook.Close
        End If
    Il me reste maintenant à modifier le code pour lui dire d'insérer des lignes si nécessaire pour ne pas supprimer la ligne du dessous s'il n'y a pas la place pour plusieurs actions (donc plusieurs lignes).

    Merci pour votre aide

    Feldenn

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

Discussions similaires

  1. [Toutes versions] Macro pour copier le contenu d'une cellule d'un fichier excel et coller dans une form
    Par wizishop dans le forum VBA PowerPoint
    Réponses: 3
    Dernier message: 16/10/2015, 12h05
  2. Problème boucle WHILE/WEnd avec plusieurs conditions
    Par Romanaxx dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 02/12/2013, 15h00
  3. erreur 91 sur boucle WHILE WEND avec recordset
    Par forzaxelah dans le forum VBA Access
    Réponses: 2
    Dernier message: 01/02/2012, 21h54
  4. Réponses: 7
    Dernier message: 23/08/2010, 22h26
  5. [VBA]Copier le contenu d'une cellule d'un autre classeur
    Par dudu59 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 01/02/2006, 17h08

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