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 :

Verifier une valeur dans un fichier et faire un boucle


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 7
    Par défaut Verifier une valeur dans un fichier et faire un boucle
    Bonjour,

    Je suis un débutant VBA.

    Je mets en place un fichier d'ordonnancement de la production et j'aimerai automatiser les actions.
    Je voudrai qu' A CHAQUE FOIS QUE JE CLIQUE sur un bouton "actualiser"
    que mon code VBA aille chercher dans ma base de données tous les numéros+valeur+vendeur+ref+statut+ qté+stock qui correspondent et les colle dans mon tableau d'ordonnancement.
    à la suite de mes numéros de lots déjà présents dans mon tableau.


    Merci d'avance pour votre aide
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 706
    Par défaut
    Bonjour,

    Conformément aux règles du forum, ne joins pas de fichier, mais explique nous clairement ton problème.
    Quel est ton code actuel ? Où rencontres-tu un problème ? As-tu un message d'erreur ? Si oui, lequel et où ?
    Joins éventuellement des copies d'écrans si cela facilite l'explication.

    aille chercher dans ma base de données tous les numéros+valeur+vendeur+ref+statut+ qté+stock qui correspondent
    Qui correspondent à quoi ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 7
    Par défaut
    Je veux en cliquant sur un bouton actualiser chercher dans mon fichier Base de données les valeurs dans les colonnes A B C D E et les coller dans mon fichier Planning colonnes A B C D E
    faire la boucle jusqu'à ce que je trouve une cellules vide dans ma base.

    Merci

  4. #4
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 706
    Par défaut
    Voici quelques liens utiles pour la résolution de ton problème :

    Bon courage !

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 7
    Par défaut faire une boucle copier d'une feuille et colle dans une autre
    Merci de trouver la macro que j'ai faite et de m'aider pour exécuter une boucle.
    En fait je veux copier dans la feuille "Ordo" les cellules déclarées, faire un boucle tant que la cellule n'est pas vide, les copier toutes
    puis les coller dans un feuille "planning"
    j'aimerai le faire de façon automatique en cliquant sur une zone "actualiser" qui va exécuter la macro.

    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
    Public Co As Integer
    Public CodL As String
    Public CodS As String
    Public Codf As String
    Public Codf1 As String
    Public Codu As String
    Public CodV As String
     
    Sub dom()
     
     
    Co = ActiveCell.Row
    Rows(Co).Select
     Range("E" & Co).Select
     Codf = ActiveCell.Value
      Range("c" & Co).Select
     CodL = ActiveCell.Value
       Range("B" & Co).Select
    Codu = ActiveCell.Value
       Range("A" & Co).Select
    Codf1 = ActiveCell.Value
       Range("D" & Co).Select
    CodV = ActiveCell.Value + 1 - 1
       Range("B3").Select
    CodS = ActiveCell.Value
     
    While Co = Co <> ""
    Co = ActiveCell.Row
    Rows(Co).Select
     Range("E" & Co).Select
     Codf = ActiveCell.Value
      Range("c" & Co).Select
     CodL = ActiveCell.Value
       Range("B" & Co).Select
    Codu = ActiveCell.Value
       Range("A" & Co).Select
    Codf1 = ActiveCell.Value
       Range("D" & Co).Select
    CodV = ActiveCell.Value + 1 - 1
       Range("B3").Select
    CodS = ActiveCell.Value
     
    Wend
     
    Sheets("Planning").Select
     
    'planning
    Range("B1").Select
    Do While Not IsEmpty(ActiveCell)
    ActiveCell.Offset(1, 0).Select
    Loop
     
    ActiveCell = CodS
    ActiveCell.Offset(0, 1).Select
    ActiveCell = Codf1
    ActiveCell.Offset(0, 1).Select
    ActiveCell = Codu
    ActiveCell.Offset(0, 1).Select
    ActiveCell = Codf
     
    ActiveCell.Offset(0, 2).Select
    ActiveCell = CodL
    ActiveCell.Offset(0, 2).Select
    ActiveCell = CodV
     
    End Sub

  6. #6
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 706
    Par défaut
    Bonjour,
    Voici quelques conseils et remarques :
    1. N'utilise pas Activate/ActiveCell/Select etc ... Cela entraîne souvent des problèmes dans le code. Utilise directement les objets. Par ex. :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    '---------- N'écris PAS : ----------
    Range("E" & Co).Select
     Codf = ActiveCell.Value
    '---------- MAIS : ----------
    Codf = Range("E" & Co).Value
    2. Tu veux faire quoi là ?
    Co <> "" renvoie VRAI si Co n'est pas vide et FAUX sinon. Là, tu cherche la condition où Co vaut ce que renvoie Co <> "".
    3. A quoi ça te sert tout ce que tu fais dans la boucle While ? A chaque iteration, tu attribues une autre valeur aux variables sans les utiliser ... du coup tu "ré-écris" par dessus à chaque iteration. A la fin, les variables vaudront ce qu'elles valent à la dernière itération.
    4. Trouver la ligne de la dernière cellule non vide de la colonne A :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim rowN As Long
    rowN = Range("A" & Cells.Count).End(xlUp).Row
    On utilise pas une boucle pour cela, c'est trop long. La méthode ci-dessus est plus efficace.
    5. Tu dis que tu veux copier-coller quelque chose, mais je ne vois pas de méthode Copy ? Ex. d'utilisation de la méthode Copy :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Ordo").Range("A1:D25").Copy destination:=Sheets("Planning").Range("A1")
    Essaie de simplifier ton code avec tout cela, puis reviens vers nous

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 7
    Par défaut
    j'ai réécrit le code en utilisant les instructions que vous m'avez proposé, seulement dans l'exécution il, me copie qu'une seule qu'il va coller dans la feuille "planning".
    Alors que moi je veux qu'il me copie de la première colonne jusqu'à la dernière tant que la cellule n'est pas vide et qu'il me la colle dans la feuille "planning"

    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
     
    Sub diagram()
    '
    ' Macro3 Macro
    '
     
    Co = ActiveCell.Row
    Rows(Co).Select
    Codfou = Range("E" & Co).Value
    CodLot = Range("C" & Co).Value
    Coduni = Range("B" & Co).Value
    Codflux = Range("A" & Co).Value
    CodValo = Range("D" & Co).Value
    Range("B3").Select
    CodSite = ActiveCell.Value
     
    Dim rowN As Long
    rowN = Range("D" & Co).End(xlDown).Row
     
    Sheets("Planning LSM").Select
     
    'planning
    Range("B16").Select
    Do While Not IsEmpty(ActiveCell)
    ActiveCell.Offset(1, 0).Select
    Loop
     
    ActiveCell = CodSite
    ActiveCell.Offset(0, 1).Select
    ActiveCell = Codflux
    ActiveCell.Offset(0, 1).Select
    ActiveCell = Coduni
    ActiveCell.Offset(0, 1).Select
    ActiveCell = Codfou
     
    ActiveCell.Offset(0, 2).Select
    ActiveCell = CodLot
    ActiveCell.Offset(0, 2).Select
    ActiveCell = CodValo
     
    End Sub

  8. #8
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 706
    Par défaut
    Lis bien ton code. Tu ne transmets une valeur qu'une fois (après la boucle do loop).
    Tu continues à utiliser ActiveCell, c'est dangeureux !
    Tu cherchent rowN, mais ne l'utilises pas.
    J'ai l'impression que tu te compliques la vie.
    Supposons que j'ai une feuille nommée Feuil1 et une feuille nommée Feuil2 et que je veux copier tout de la ligne 2 à la dernière ligne (colonne A à K) de la feuille Feuil1 vers la dernière ligne de la feuille Feuil2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim rowN1 As Long
    Dim rowN2 As Long
    rowN1 = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
    rowN2 = Sheets("Feuil2").Range("A" & Rows.Count).End(xlUp).Row
    Sheets("Feuil1").Range("A2:K" & rowN1).Copy destination:=Sheets("Feuil2").Range("A" & rowN2)
    Est-ce que tu comprends l'idée ?

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 7
    Par défaut
    le code me copie les colonnes de la Feuille ORDO et les colle sur la Feuille Planning mais ne peut pas refaire la même action si une nouvelle ligne est ajoutée dans la feuille ORDO.
    ce que je veux c'est qu'il me copie les colonne de A:E les colle dans la feuille Planning et quand on aura de nouvelles ligne qui s'ajoute a la suite de ma dernière ligne qu'il fasse la même chose pour cet nouvel ajout

  10. #10
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 706
    Par défaut
    Je vais te donner la même explication que j'ai donnée dans une autre conversation :
    Quand on lance un macro, elle s'exécute lorsqu'on la lance, et fini. Supposons que tu demandes à qqun, à un moment donné, de recopier une liste de course sur un autre papier. Si après l'exécution de la tâche, tu rajoutes des éléments sur la liste de course, ces éléments ne vont pas être recopiés par magie sur la deuxième liste, sauf si tu redemandes à la personne de recopier la liste de course. Pour les macros, c'est pareil. Tu l'exécutes, elle fait son boulot et fini.
    Dans ta macro, à un moment donné, tu demandes à la macro de copier une liste de données. Après l'exécution de ta macro, si tu ajoutes des lignes dans ta liste, c'est comme pour la liste de course, elles ne vont pas s'ajouter automatiquement à ta copie. Tu comprends ?

    Soit tu déclenches la macro à chaque fois que tu as ajouté des nouvelles lignes(par ex. bouton sur lequel il faut appuyer quand on a ajouté des nouvelles lignes). Soit tu utilises une macro évènementielle qui se lancera à un evenement donné.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 7
    Par défaut
    Ce que je ne comprends pas dans la macro c'est que je ne sais pas si je dois spécifier que Rows(Co) est la ligne a copier et aussi qu'elle est égale a RowN1


    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
    Sub diagr()
    '
    ' Macro3 Macro
    '
    Co = ActiveCell.Row
    Rows(Co).Select
    Codflux = Range("A" & Co).Value
    Coduni = Range("B" & Co).Value
    CodLot = Range("C" & Co).Value
    CodValo = Range("D" & Co).Value
    Codfou = Range("E" & Co).Value
    Range("B3").Select
    CodSite = ActiveCell.Value
     
    Dim rowN1 As Long
    Dim rowN2 As Long
    rowN1 = Sheets("ordo").Range("A" & Rows.Count).End(xlUp).Row
    rowN2 = Sheets("Planning").Range("B" & Rows.Count).End(xlUp).Row
    Sheets("ordo").Range("A7:E" & rowN1).Copy Destination:=Sheets("Planning").Range("c" & rowN2)
    Sheets("Planning").Select
     
    End Sub

  12. #12
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 706
    Par défaut
    Je vois que tu n'as pas bien compris mon code. TOUT ce que tu veux faire tient dans ces lignes (je rajoute des commentaires):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim rowN1 As Long
    Dim rowN2 As Long
    rowN1 = Sheets("ordo").Range("A" & Rows.Count).End(xlUp).Row     'dernière ligne non vide de la feuille "ordo"
    rowN2 = Sheets("Planning").Range("B" & Rows.Count).End(xlUp).Row       'dernière ligne non vide de la feuille "Planning"
    Sheets("ordo").Range("A7:E" & rowN1).Copy Destination:=Sheets("Planning").Range("C" & rowN2 + 1)
    'ici, on copie les lignes 7 à rowN1 (donc la dernière ligne) colonnes A à E. Et on colle cela à partir de la prmière ligne vide en colonne C de la feuille "Planning"
    Ce que tu as écrit avant dans ton code, ne sert à rien. Tu ne fais que donner des valeurs à des variables que tu n'utilises pas ensuite.

    Maintenant, tu as donné une consignes en plus dans ton problème. Tu veux qu'à chaque nouvelle ligne dans "Ordo" la ligne soit copiées dans "Planning".
    2 façons de faire :
    1. Tu écris toutes les nouvelles lignes. Tu sélectionnes une cellule la première nouvelle ligne. Tu lances une macro qui copie toutes les lignes de la ligne sélectionnée à la dernière ligne et qui les colle dans "Planning" à partir de la première ligne vide.
    2. A chaque fois que tu écris une nouvelle ligne, tu copies la ligne et tu la colles sur la première ligne vide de la feuille "Planning".

    Je choisirais plutôt la première façon de faire, car difficile de détecter le moment où on a fini d'écrire une nouvelle ligne. Mais si tu veux faire la deuxième façon, il faut que tu t'intéresses aux évènements dans la feuille de calcul et surtout que tu définisses précisemment quel est le moment/l'évènement qui déclenche la macro.

    Première façon de faire : tu reprends le code precedent, sauf qu'au lieu de commencer en ligne 7, tu commences à la ligne de la sélection.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim rowN1 As Long
    Dim rowN2 As Long
    Dim rowF As Long
    rowN1 = Sheets("ordo").Range("A" & Rows.Count).End(xlUp).Row     'dernière ligne non vide de la feuille "ordo"
    rowN2 = Sheets("Planning").Range("B" & Rows.Count).End(xlUp).Row       'dernière ligne non vide de la feuille "Planning"
    rowF = ActiveCell.Row              'ligne de la cellule active
    Sheets("ordo").Range("A" & rowF & ":E" & rowN1).Copy Destination:=Sheets("Planning").Range("C" & rowN2 + 1)
    'ici, on copie les lignes rowF à rowN1, colonnes A à E. Et on colle cela à partir de la première ligne vide en colonne C de la feuille "Planning"
    Tu déclenches la macro après avoir sélectionné une cellule de la première ligne ajoutée.

Discussions similaires

  1. récupérer une valeur dans un fichier .txt ?
    Par _n1n1_ dans le forum VB.NET
    Réponses: 5
    Dernier message: 27/04/2007, 20h19
  2. Modifier une valeur dans un fichier xml
    Par arthrax dans le forum VBScript
    Réponses: 3
    Dernier message: 03/04/2007, 10h46
  3. [XSLT] Tester la non présence d'une valeur dans un fichier
    Par arnauann dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 23/01/2007, 16h29
  4. Modifier une valeur dans un fichier sans passer par l'éditeur
    Par elkhy dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 09/06/2006, 01h15
  5. [D6] Recherche d'une valeur dans un fichier
    Par Lung dans le forum Langage
    Réponses: 2
    Dernier message: 06/09/2005, 09h26

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