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- Synthese de calcul


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Août 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 14
    Points : 4
    Points
    4
    Par défaut VBA- Synthese de calcul
    Bonjour à tous! j'ai besoin d'aide assez rapidement concernant la programmation d'une synthese entre un certain nombre de feuille et selon le type de feuille copier des valeurs dans des colonnes!

    Pour être plus clair j'explik et je joinds le fichier excel
    mon déroulement de programme est:

    (le nombre de feuille étant déja créé)
    -dans la 1ère feuille je veux copier les données cell B1 vers feuille "Results" en D3
    -si la cell C5 de la 1ère feuille = au text "privative" alors la cell O45 de cette feuille sera copié feuille "Results" dans colonne E dans la dernière ligne vide. et les dernières lignes des colonnes F et G seront vidées.

    -si la cell C5 de la 1ère feuille = au text "comptabilisée" alors la cell O45 de cette feuille sera copié feuille "Results" dans colonne F dans la dernière ligne vide. et les dernières lignes des colonnes E et G seront vidées.

    -si la cell C5 de la 1ère feuille = au text "Annexe" alors la cell O45 de cette feuille sera copié feuille "Results" dans colonne G dans la dernière ligne vide. et les dernières lignes des colonnes E et F seront vidées.

    -passer à la ligne suivante dans feuille "results" et feuille suivante dans la liste des feuilles créées.

    si B1 de cette feuille suivante = B1 de la feuille précédente alors on enregistre les données sur la ligne précendente de la feuille "results"

    le fichier peut etre récupéré à cette adresse trop lourd pour etre posté ici:
    http://www.developpez.net/forums/d84...s-discussions/

    j'espère que l'on pourra m'aider merci par avance

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    et ou en est tu de ton code ? par quoi est tu bloqué ? ..

  3. #3
    Candidat au Club
    Inscrit en
    Août 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    j'ai seulement reussi a copier B1 en B3 avec ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Extraire()
     
    Sheets("Results").Range("D3:D200").ClearContents
    Derligne = Sheets("Results").Range("D3").End(xlUp).Row + 1
     
       For i = 6 To Worksheets.Count
     Range("D" & Derligne).Value = Sheets(i).Range("B1").Value
     Derligne = Derligne + 1
       Next i

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par leBlindé Voir le message
    j'ai seulement reussi a copier B1 en B3 avec ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Extraire()
     
    Sheets("Results").Range("D3:D200").ClearContents
    Derligne = Sheets("Results").Range("D3").End(xlUp).Row + 1
     
       For i = 6 To Worksheets.Count
     Range("D" & Derligne).Value = Sheets(i).Range("B1").Value
     Derligne = Derligne + 1
       Next i
    Pourquoi effectuer une boucle ( For ..i..) si tu ne doit copier la donné d'une seule feuille ?
    et si c'est pour copier en D3 ... pourquoi calculer le numéro de la dernière ligne ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheets("Results").Range("D3:D200").ClearContents
    Sheets("Results").Range("D3") = sheets(1).Range("B1") ' on peu changer sheets(1) par sheets("Mafeuille")

  5. #5
    Candidat au Club
    Inscrit en
    Août 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    En fait j'ai une macro qui me permet de rentrer des données de mesurages et à chaque local mesuré je créé une nouvelle feuille.
    Pour chaque immeuble le nombre de local est différent donc le nombre de feuille de données sera différent à chaque fois.

    donc le but est de copier tous les noms des locaux situés en B1 de chaque feuille en D3 puis D4... de la feuille de synthèse.
    donc j'ai utilisé derligne

    c'est après que je bloque la partie difficile C5 je maîtrise pas assez les codes VBA pour touver le bon chemin

    En tout cas merci pour l'aide c'est super !

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour à tous,

    le fichier peut etre récupéré à cette adresse trop lourd pour etre posté ici : http://www.developpez.net/forums/d84...s-discussions/
    Le fichier n'y est plus, normal si tu le mets en tout début de discussion

    si la cell C5 de la 1ère feuille = au text "privative" alors la cell O45 de cette feuille sera copié feuille "Results" dans colonne E dans la dernière ligne vide. et les dernières lignes des colonnes F et G seront vidées.
    Dans a boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    IF Sheets("Nom 1ère feuille").Range("C5") = "privative" then
      With Sheets("Results")
        ' Récupérer la dernière ligne vide de la colonne E
        DLigR = .Range("E" & Rows.Count).End(XlUp).Row + 1
        .Range("E" & DligR) = Sheets("Nom 1ère feuille").Range("O45")
        ' Effacer les 3 dernières lignes de la colonne F et G
        DLigR = .Range("F" & Rows.Count).End(XlUp).Row
        .Range("F" & DLigR -2 & ":F" & DLigR).ClearContents
        DLigR = .Range("G" & Rows.Count).End(XlUp).Row
        .Range("G" & DLigR -2 & ":G" & DLigR).ClearContents
      End With
    End If
    Essaye d'analyser et de comprendre ce code, teste le, et dis nous

    A+

  7. #7
    Candidat au Club
    Inscrit en
    Août 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    J'essaye d'appliquer ton code bruno je crois que c'est cette prtie que je comprends pas trop
    Que signifie les deux points avant le F ---->":F"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("F" & DLigR -2 & ":F" & DLigR).ClearContents
    Merci encore d'avoir de l'aide de génie !

  8. #8
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    le code : "F" & DLigR -2 & ":F" & DLigR permet
    grâce à une concaténation de chaine de définir l'adresse de la plage à tester ... avec DligR = 5 .. l'adresse calculée devient :


    "F3:F5"

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par bbil Voir le message
    le code : "F" & DLigR -2 & ":F" & DLigR permet grâce à une concaténation de chaine de définir l'adresse de la plage à tester ... avec DligR = 5 .. l'adresse calculée devient :
    "F3:F5"
    Merci Mister bbil

  10. #10
    Candidat au Club
    Inscrit en
    Août 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    d'accord, oui je viens de comprendre.
    une autre question, y a-t-il une méthode pour faire :

    si la feuille contient le nom "SP" alors...

  11. #11
    Invité
    Invité(e)
    Par défaut
    Re,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(1, Sht.Name, "SP", vbTextCompare) > 0 Then
    A+

  12. #12
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    leBlindé peu-tu traduire l'expression en rouge ?


    [Edit] : Peu-être que bruno à compris ta demande mais pas moi ...

  13. #13
    Candidat au Club
    Inscrit en
    Août 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    c'est bon ça prends tournure je suis sur la bonne piste :

    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
    Sub Extraire()
     
    Sheets("Results").Range("D3:D200").ClearContents
    Derligne = Sheets("Results").Range("D3").End(xlUp).Row + 1
     
     
       For i = 6 To Worksheets.Count - 1
     Range("D" & Derligne).Value = Sheets(i).Range("B1").Value
     If Sheets(i).Name <> "SP" Then
      With Sheets("Results")
        ' Récupérer la dernière ligne vide de la colonne E
        DLigR = .Range("E" & Rows.Count).End(xlUp).Row + 1
        .Range("E" & DLigR) = Sheets(i).Range("O46")
        End With
    End If
     Derligne = Derligne + 1
       Next i
     End Sub
    j'ai fais commencer ma boucle à la feuille 6 (debut de ma serie de feuille)
    coller l'info B1 en colonne D -> ok
    si la feuille contient SP alors copier coller la cell O46 de la feuille i en derniere ligne de la colonne E.
    on passe a une autre feuille i

    me reste à inserer d'autre condition similaire.
    Je devrais le faire fonctionner !

    Merci pour votre aide, vous êtes super les gars, si c'est réglé je clique sur RESOLU. je tiens au courant

  14. #14
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Ce que je voudrais comprendre c'est : "si la feuille contient SP " ? cela veut dire quoi ? ou tu doit trouver SP ? c'est quoi SP ? du texte ??...

  15. #15
    Candidat au Club
    Inscrit en
    Août 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    oui c'est du texte "SP"

    en fait j'ai 3 feuille de base "SP" "SNC" et "ANN"
    au départ en fonction de situation je rentre des données et je vais avoir un certain nombre de feuille de chaque catégorie "SP" "SNC" et "ANN"
    donc la première feuille SP sera nommée "SP" la seconde "SP(2) et etc...

    Dans ma formule je souhaite que pour si le nom de la feuille contient SP qu'il envoie en feuille Result la cellule O45 en dernière ligne de colone E et qu'il marque rien ou 0 sur la même ligne en colonne F et G

    si le nom de la feuille contient SNC qu'il envoie en feuille Result la cellule O45 en dernière ligne de colone F et qu'il marque rien ou 0 sur la même ligne en colonne E et G

    si le nom de la feuille contient ANN qu'il envoie en feuille Result la cellule O45 en dernière ligne de colone G et qu'il marque rien ou 0 sur la même ligne en colonne E et F

  16. #16
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    ah ok ... ben il te reste plus qu'as adapter le code à Bruno plus haut ...

  17. #17
    Invité
    Invité(e)
    Par défaut
    Tu as vu bbil ... j'avais sorti ma boule de cristal

  18. #18
    Candidat au Club
    Inscrit en
    Août 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    j'ai essayé de bidouiller la formule pour que :

    si le nom de ma feuille contient "SP" alors ...
    j'ai fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(1, Sht.Name, "SP", vbTextCompare) > 0 Then
    mais j'ai un message erreur d'execution 424 Objet requis
    ca veut dire qu'il manque quelque chose et je sais pas quoi!

    merci pour votre soutien

  19. #19
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    le seul objet visible c'est sht ... il faut le définir .. par exemple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim sht as worksheet
    For each sht in ThisWorkbook.workSheets
    (...) 'Place ton test ici ...
    next

  20. #20
    Candidat au Club
    Inscrit en
    Août 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    j'ai déja des paramètre en jeu si je rajoute un dimensionnement ça va me bloque:

    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
     'je commence par instaurer mon champs d'action de la feuille 6 à l'avant dernière
    For i = 6 To Worksheets.Count - 1
    'je veux que la cellule B1 de chaque feuille se remplissent à la suite en colone D
     Range("D" & Derligne).Value = Sheets(i).Range("B1").Value
    'LA JE GALERE A DIRE: Si le nom de la feuille contient "SP" alors transfert de donnée de la cellule O46 en feuille results dans colonne E ... j'ai essayé votre formule à caler ca bloque
     If Sheets(i).Name <> "SP" Then
      With Sheets("Results")
        ' Récupérer la dernière ligne vide de la colonne E
        DLigR = .Range("E" & Rows.Count).End(xlUp).Row + 1
        .Range("E" & DLigR) = Sheets(i).Range("O46")
        End With
         Else
        With Sheets("Results")
        ' Récupérer la dernière ligne vide de la colonne E
        DLigR = .Range("E" & Rows.Count).End(xlUp).Row + 1
        .Range("E" & DLigR) = "-"
        End With
    End If

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/10/2013, 17h32
  2. VBA question de calcul
    Par lenoble09 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 06/03/2012, 14h50
  3. [Toutes versions] executer code vba apres le calcul automatique des fomules
    Par LaPanic dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 19/12/2011, 17h42
  4. [VBA-E]Ligne calculée en fin de tableau dynamique
    Par AliochaBada dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 07/10/2006, 22h23
  5. Réponses: 10
    Dernier message: 13/06/2006, 17h59

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