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 :

{VBA Excel} Simplifier une macro avec une copie


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Par défaut {VBA Excel} Simplifier une macro avec une copie
    J'ai une macro qui compte ma production et arrive tous les 3000 tonnes je crée une message box

    au debut je voulais créer un journal de bord sur un fichier word
    mais j'ai un bug informatique dans ma boite qui fous le bordel sur tous le réseau

    donc pour contourner le probleme
    je voudrais a la place d'une message box
    faire un journal de bord sur une autre feuille d'excel sur le meme classeur
    sous la forme

    date de fabrication numero de lots quantite fabrique

    c'est 3 parametres ce situe sur une feuille nommé Saisie
    date de fabrication est dans la colonne I sous la forme jj/mm hh:mm
    numero de lots colonne Q
    quantite fabrique correpsond a "poids" dans ma macro


    j'ai mis en rouge ma message box

    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
    Sub compter()
    Dim totlig As Long, poid As Double, i As Long
     
    With Sheets("Saisie") ' Travaille sur la feuille Saisie
          
    totlig = .Range("Q65536").End(xlUp).Row ' Recupere le nombre de ligne
    
    poid = 0# ' Initialise le poid calculé
          
    
    For i = 5 To totlig ' Demarre la boucle à la igne 5, la 1,2,3,4 sont des titres
            
            If IsNumeric(Range("Q" & i).Value) Then
            poid = poid + (.Range("Q" & i).Value / 1000) ' additione la valeur poids ramenée en tonnes
    
            End If
             
    If poid >= 3000 Then ' test avec la prochaine valeur si ca depasse les 3000 tonnes
    
    MsgBox ("Depassement :" & poid & " Kg" & vbCr & "A la ligne " & i)
    .Range("Q" & i).Interior.ColorIndex = 3 ' je colorie en rouge la cellule
    
         
    poid = 0# ' remise à zero des calculs
           
    Else
             
    .Range("Q" & i).Interior.ColorIndex = xlNone ' sinon j'enleve la couleur
                
    End If
                  
    Next i
    
    End Sub

    si vous pouvez m'aiguiller pour commencer
    je vous en remercie d'avance

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Teste ça
    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 compter()
    Dim totlig As Long, poid As Double, i As Long
        With Sheets("Saisie") ' Travaille sur la feuille Saisie
            totlig = .Range("Q65536").End(xlUp).Row ' Recupere le nombre de ligne
            poid = 0# ' Initialise le poid calculé
            For i = 5 To totlig ' Demarre la boucle à la igne 5, la 1,2,3,4 sont des titres
                If IsNumeric(Range("Q" & i).Value) Then
                    poid = poid + (.Range("Q" & i).Value / 1000) ' additione la valeur poids ramenée en tonnes
                    If poid >= 3000 Then ' test avec la prochaine valeur si ca depasse les 3000 tonnes
                        MsgBox ("Depassement :" & poid & " Kg" & vbCr & "A la ligne " & i)
                        .Range("Q" & i).Interior.ColorIndex = 3 ' je colorie en rouge la cellule
                        poid = 0# ' remise à zero des calculs
                      Else
                        .Range("Q" & i).Interior.ColorIndex = xlNone ' sinon j'enleve la couleur
                    End If
                End If
            Next i
        End With
    End Sub
    J'ai inséré le message dans la condition if is numeric et surtout j'ai ajouté End With qui devait te gérérer une erreur
    A+

  3. #3
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    Bonjour thomas


    je crois reconnaitre cette macro : Poids = 0# le # n'est pas commun utilisé par les vieux lol)

    on va donc creer une feuille : "Rapport" et utiliser la colonne A

    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 compter()
    Dim totlig As Long, poid As Double, i As Long
    With Sheets("Saisie") ' Travaille sur la feuille Saisie
    totlig = .Range("Q65536").End(xlUp).Row ' Recupere le nombre de ligne
    poid = 0# ' Initialise le poid calculé
    For i = 5 To totlig ' Demarre la boucle à la igne 5, la 1,2,3,4 sont des titres
            If IsNumeric(Range("Q" & i).Value) Then
            poid = poid + (.Range("Q" & i).Value / 1000) ' additione la valeur poids ramenée en tonnes
            End If
    If poid >= 3000 Then ' test avec la prochaine valeur si ca depasse les 3000 tonnes
    sheets("Rapport").range("A" & sheets("Rapport").range("A65536").end(xlup).row +1) = "Depassement :" & poid & " Kg" & "A la ligne " & i
    .Range("Q" & i).Interior.ColorIndex = 3 ' je colorie en rouge la cellule
    poid = 0# ' remise à zero des calculs  
    Else        
    .Range("Q" & i).Interior.ColorIndex = xlNone ' sinon j'enleve la couleur    
    End If
    Next i
    end with
    End Sub
    bonne journée

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Par défaut
    Wilfried ton code marche pratiquement
    il y a juste 2-3 ptits trucs qui m'embete et un autre plus gros

    d'abord le plus gros
    quand je lance la macro il excute bien ma demande mais quand je la relance a nouveau il va tout recopier pas recommencer a la suite

    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
    Depassement :3006,6 KgA la ligne 694
    Depassement :3002,53 KgA la ligne 1190
    Depassement :3003,94 KgA la ligne 1667
    Depassement :3031,1 KgA la ligne 2146
    Depassement :3000 KgA la ligne 2177
    Depassement :3000 KgA la ligne 2208
    Depassement :3031,937 KgA la ligne 2235
    Depassement :3605,392 KgA la ligne 2246
    Depassement :3088,95 KgA la ligne 2262
    Depassement :3030 KgA la ligne 2276
    Depassement :3000 KgA la ligne 2287
    Depassement :3000 KgA la ligne 2298
    Depassement :3000 KgA la ligne 2309
    Depassement :3000 KgA la ligne 2320
    Depassement :3000 KgA la ligne 2339
    Depassement :3007,896 KgA la ligne 2378
    Depassement :3006,6 KgA la ligne 694
    Depassement :3002,53 KgA la ligne 1190
    Depassement :3003,94 KgA la ligne 1667
    Depassement :3031,1 KgA la ligne 2146
    Depassement :3000 KgA la ligne 2177
    Depassement :3000 KgA la ligne 2208
    Depassement :3031,937 KgA la ligne 2235
    Depassement :3605,392 KgA la ligne 2246
    Depassement :3088,95 KgA la ligne 2262
    Depassement :3030 KgA la ligne 2276
    Depassement :3000 KgA la ligne 2287
    Depassement :3000 KgA la ligne 2298
    Depassement :3000 KgA la ligne 2309
    Depassement :3000 KgA la ligne 2320
    Depassement :3000 KgA la ligne 2339
    Depassement :3007,896 KgA la ligne 2378

    moi je voudrais si possible qu'as chaque fois je lance la copie il ne me recopie pas tous au sinon ca va devenir un vrai bordel



    mais pour mes 2/3 ptis trucs
    pour recopier la date ou le numero de lots
    j'ai juste a adpater ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("az").Range("A" & Sheets("az").Range("A65536").End(xlUp).Row + 1) = "Depassement :" & poid & " Kg" & "A la ligne " & i
    et mettre un AND a la suite pour faire apparaitre mon numero de lots et ma date?

  5. #5
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    re:

    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
    Sub compter()
    Dim totlig As Long, poid As Double, i As Long
    With Sheets("Saisie") ' Travaille sur la feuille Saisie
    totlig = .Range("Q65536").End(xlUp).Row ' Recupere le nombre de ligne
    poid = 0# ' Initialise le poid calculé
    Sheets("Rapport").range("A:A").clearcontents
    For i = 5 To totlig ' Demarre la boucle à la igne 5, la 1,2,3,4 sont des titres
            If IsNumeric(Range("Q" & i).Value) Then
            poid = poid + (.Range("Q" & i).Value / 1000) ' additione la valeur poids ramenée en tonnes
            End If
    If poid >= 3000 Then ' test avec la prochaine valeur si ca depasse les 3000 tonnes
    sheets("Rapport").range("A" & sheets("Rapport").range("A65536").end(xlup).row +1) = "Depassement :" & poid & " Kg" & "A la ligne " & i
    .Range("Q" & i).Interior.ColorIndex = 3 ' je colorie en rouge la cellule
    poid = 0# ' remise à zero des calculs  
    Else        
    .Range("Q" & i).Interior.ColorIndex = xlNone ' sinon j'enleve la couleur    
    End If
    Next i
    end with
    End Sub

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Par défaut
    tu as tous resolu

    merci pour tous

    pour le reste j'ai adpater

  7. #7
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    re:

    Sheets("Rapport").Range("A" & Sheets("Rapport").Range("A65536").End(xlUp).Row + 1) = "Depassement :" & poid & " Kg" & "A la ligne " & i
    Sheets("Rapport").Range("B" & Sheets("Rapport").Range("A65536").End(xlUp).Row) = Range("M" & i)
    il semblerait qu'il y ait des trous dans les données, avec la modif en rouge, les renseignement de la colonne M seront alignés avec les depassements de capacité

    de plus n'oublie pas de modifier le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Rapport").range("A:A").clearcontents
    en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Rapport").range("A:B").clearcontents

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. [XL-2003] Désactiver une macro avec une macro
    Par Sibuxian dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/10/2010, 00h54
  3. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  4. VBA Excel déplacer un graphiqe avec une macro
    Par Yunchi dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/02/2009, 12h18
  5. [VBA Excel] ecrire le caractere " avec une macro
    Par oktopuces dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/09/2005, 22h56

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