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 avec une Worksheet_Change


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 19
    Par défaut Problème avec une Worksheet_Change
    Bonjour,

    Plus je cherche plus et je m'embrouille le cerveau, pourtant ça me paraît tout simple.
    Sur une feuille, dans la colonne A, il apparaît des Articles. Dans la colonne C des quantités.
    Je voudrais, lorsqu'un utilisateur alimente cette feuille, que ça répercute en bas du fichier (ligne 77), seulement les articles qui ont étaient utilisés.

    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
    Dim i As Integer
    Dim j As Integer
     
    j = 77
     
    For i = 5 To 54
     
    If Cells(i, 3) >= 1 Then
    Cells(j, 3) = Cells(i, 1)
    Else: i = i + 1
    End If
     
    j = j + 1
    Next
    End Sub
    Soit j'ai des messages d'erreur avec Next sans For (il ne reconnait pas le for), sinon la boucle marche à l'infinie.

    Merci d'avance de votre aide car j'éssais pas mal de chose mais sans résultat!!!

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut boucles
    Bonsoir,

    Effectivement, tu t'emmêles les crayons avec tes boucles.

    Essaie plutôt :

    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
    Sub Macro1()
     
        Dim lastlign As Integer
     
        j = 77
     
        With ActiveSheet
                lastlign = .Cells(.Rows.Count, 1).End(xlUp).Row
        End With
     
        For i = 5 To lastlign
                If Range("C" & i).Value > 0 Then
                    Cells(j, 3) = Cells(i, 1)
                    j = j + 1
                End If
        Next
     
     
    End Sub

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 158
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Plusieurs remarques.
    1) Pourquoi incrémente-tu la variable I alors que tu utilises une boucle qui alimente I.
    2) Pourquoi cette boucle alors que tu utilises une procédure événementielle, boucle qui a pour effet de déclencher à nouveau la procédure événementielle qui recommence donc la boucle.
    3) Dans ce test, tu vérifies si la cellule(i,3) est supérieure ou égale à 1 alors tu vas écrire le contenu de le cellule A dans la cellule C 72 lignes plus bas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      If Cells(i, 3) >= 1 Then
        Cells(j, 3) = Cells(i, 1)
    A mon humble avis ce n'est sans doute pas ce que tu veux faire.

    Voici donc un code
    Si tu écris une quantité supérieure à 0 sur la colonne C des lignes entre 5 et 54, la procédure ira écrire la même quantité - 72 lignes plus bas et ce sur la même colonne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     With Target
      If .Column = 3 And .Row >= 5 And .Row <= 54 Then
       If Cells(.Row, .Column) >= 1 Then
        Cells(.Row + 72, .Column) = Cells(.Row, .Column)
       End If
      End If
     End With
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonsoir Corona,

    Ton code amènerait à l'alimentation de cellules à lignes discontinues, ou je me trompe ? Et je ne pense pas que ce soit l'affichage souhaité par notre ami.

    Au demeurant, et à mon avis, cette information pourrait être lancée par une autre méthode évènementielle (Deactivate, Befor Print) ou non évènementielle (Bouton ou autre), et ce en utilisant les boucles.

    C'est bien entendu une question de choix.

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 158
    Billets dans le blog
    53
    Par défaut
    Bonsoir Marcel,
    Dans le sujet, j'ai lu WorksheetChange, j'en ai donc conclu à la lecture du code qu'il souhaitait alimenter les cellules qui se trouvaient 72 lignes plus bas que celles se trouvant de 5 à 54 mais bon c'est possible que je me soit totalement fourvoyé. Les questions et explications sont parfois tellement floues qu'il faut parfois deviner.
    Wait and see
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre averti
    Inscrit en
    Décembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 19
    Par défaut
    Merci beaucoup MarcelG et Corona, décidement tu m'aides beaucoup ces derniers temps!!!

    Je vais tester vos codes.
    Ce que je souhaite faire, c'est que les lignes 5 à 54 peuvent être remplies de façon aléatoire (c'est à dire en fonction des articles sélectionnés). Je voulais en ligne 77, répertorier ces articles afin de faire une synthèse. Le but étant de copier ces dernieres lignes dans un autre fichier, qui constituera ma base de données.

    Merci encore à vous deux!!

Discussions similaires

  1. Problème avec une UDF
    Par kanmaber dans le forum Bases de données
    Réponses: 2
    Dernier message: 27/08/2004, 23h42
  2. [JBOSS] [Struts] Problème avec une application
    Par Tiercel dans le forum Wildfly/JBoss
    Réponses: 5
    Dernier message: 13/07/2004, 13h50
  3. Problème avec une instruction OUTER /Postgres
    Par Volcomix dans le forum Langage SQL
    Réponses: 14
    Dernier message: 21/04/2004, 16h56
  4. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29
  5. Problème avec une procédure stockée
    Par in dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/05/2003, 15h33

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