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 :

Trouver la dernier ligne non nulle et remplir les trois colonne a droite par des zero [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 16
    Points : 5
    Points
    5
    Par défaut Trouver la dernier ligne non nulle et remplir les trois colonne a droite par des zero
    bonsoir
    voila je vous expose mon probleme
    j'arrive pas a a trouver un programme qui me fais ajouté automatiquement des colonne a mon tableaux et les faire remplir par des zero au meme nombre de ligne de mon tabeau de depart sachant que j'ai 96 onglets sur un seul classeur et chaque onglet a une longueur différente
    je vous remercie d'avance pour vous reponse

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Si j'ai bien compris...

    Une façon de récupérer la dernière ligne de valeur est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbLignes = Sheets("MaFeuille").Cells(Rows.Count, "A").End(xlUp).row
    Si la colonne A ne contient pas de données, utiliser une autre lettre que le A

    Tu peux donc écrire à partir de cette valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("F" & nbLignes) = 0   'inscrit 0 en F sur la dernière ligne remplie
    Range("F" & nbLignes & ":H" & nbLignes) = 0   'inscrit 0 en F, G et H de cette ligne
    Pour ce qui est de lire chaque feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim Feuille as Worksheet
    For each Feuille in Worksheets
       nbLignes = Feuille.Cells(Rows.Count, "A").End(xlUp).row
    Next
    MPi²

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    ça j'ai bien compris
    maintenant si tu peux m'aider a récupérer la ligne des totaux de chaque feuilles et la placé dans une feuille (onglet) que j'ai nommé RECAP
    Sachant que j'ai essayé de le faire mais comme les ligne que je recupere contient des formule alors j'ai pas de valeur dans ma feuil RECAP
    et merci d'avance de me repondre

    en fait pour la premiere question c'est que je veux ajouté des colonnes en meme dimension c-a-d meme nombre de ligne mais remplit de zero
    exple feuil1 colonne A,b,c,d,......=5 ligne je veux ajouté soit disant 3 colonnes W,X,Y qui auront aussi 5 ligne remplis de zero
    feuil 2 colonne A,b,c,d,......=15 ligne je veux ajouté soit disant 3 colonnes W,X,Y qui auront aussi 15 ligne remplis de zero
    et ainsi de suite sachant que j'ai un classeur qui contient beaucoup de feuil (onglet) et je veux le faire d'une façon automatique
    merci d'avance pour vos réponse

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Pour le premier code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Feuille as Worksheet
    For each Feuille in Worksheets
       'ici il devra y avoir une validation du nom de la feuille, j'imagine
       nbLignes = Feuille.Cells(Rows.Count, "A").End(xlUp).row
       Feuille.Range("W2:Y" & nblignes)=0   'je commence à 2 pensant qu'il y a des entêtes...
    Next
    MPi²

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Et pour ce qui est des totaux, il faudrait savoir où ils se trouvent (colonnes) et où tu veux les copier dans ta feuille RECAP
    MPi²

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    pour le premiers code parfais tu ma tres bien compris
    mais pour le deuxieme exemple que je fais le totale des colonnes de w x y z ..... ect dans la derniers lignes de ces colonnes de chaque feuilles (onglets de classeur ) sachant que a chaque onglet le totale sera dans une ligne differente

    doc il me faut du collage speciale sous forme du code pour prendre juste la valeur de totale de chaque colonne et placer les totaux de chaque onglet 1 ,2,.....etc dans la onglet RECAP pour chaque ligne de RECAP je trouve la ligne des totaux des colonnes des autres onglets sachant que chaque onglet porte un nom différents
    j'espere que tu comprendra mieux ma problématique c non je peux te fournir plus d'info
    dommage que je ne peux pas te transmettre le fichier

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    C'est effectivement compliqué quand on n'a pas le fichier devant les yeux...
    Les totaux que tu veux récupérer sont-ils toujours sur la dernière ligne en W, X, Y et Z ?

    La feuille RECAP est-elle la seule à part des autres 96 onglets ?
    MPi²

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    oui exactement les totaux seront tjrs sur la derniere ligne des colonnes w x y et effectivement ya des feuil dont je j'utilise pas pour la feuille RECAP
    exple avec ce code sa marche
    Sub synthese()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim Sh As Worksheet
    Application.ScreenUpdating = False
    With Sheets("Recap")
        .Columns("A:C").ClearContents
        For Each Sh In Sheets
            If Sh.Name <> .Name Then
                Sh.Range("w30:ab30").Copy .Cells(.Rows.Count, 1).End(xlUp)(2)
            End If
        Next Sh
    End With
    Application.ScreenUpdating = True
    End Sub
    mais le probleme que la ligne des totaux ne sera pas tjrs w30:AB30 je veux celle ci chanque automatiquement au fonction de chaque onglet et le probleme dans cettte formule Sh.Range("w30:ab30").Copy .Cells(.Rows.Count, 1).End(xlUp)(2) ne fais pas un collage speciale c a d qu'il prenne les formule et du coup je ne recupere pas la valeur

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Sans tester, ceci devrait fonctionner

    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
    Dim nbLignes as long, Ligne As Long
    Dim Sh As Worksheet
     
    Application.ScreenUpdating = False
    With Sheets("Recap")
        .Columns("A:C").ClearContents
        Ligne = 2
        For Each Sh In Sheets
            If Sh.Name <> .Name Then
                nbLignes = Sh.Cells(Rows.Count,"W").end(xlUp).row
                Sh.Range("w" & nbLignes & ":ab" & nbLignes).Copy 
                .Range("A" & Ligne).PasteSpecial xlPasteValues
                Ligne = Ligne + 1
            End If
        Next Sh
    End With
    Application.ScreenUpdating = True
    MPi²

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 16
    Points : 5
    Points
    5
    Par défaut encore une autre question
    bonjour parmi,
    j'espere que tu va bien
    j'ai encore besoin de ton aide stp
    voila ma problème que je veux automatisé le programme
    donc je veux appliquer se programme sur plusieurs classeurs différents et a chaque fois j'ai des onglet nommé différemment donc ce que je veux c que sur le premier onglet fournir une liste des onglet sur les qu'elle je recupere la ligne des somme
    donc je crois il faut des changement sur cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Sh.Name <> .Name Then
    oubien on ajoute une ligne qui renvoir a la premiere onglet pour verifier les onglet que j'ai pas besoin

    merci d'avance de m'aidé mon ami

  11. #11
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Si je comprends toujours bien...
    Si tu veux utiliser une feuille pour y inscrire le nom des feuilles à traiter, il faut changer la boucle
    et plutôt boucler les noms de feuilles inscrits un peu comme ceci (pas testé)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    nbLignesNom = Sheets("LaFeuilleOuLesNomsSontInscrits").Cells(Rows.count, "A").end(xlup).row
    For I = 2 to nbLignesNom  '2 étant le début des noms de feuilles
       Nom = Sheets("LaFeuilleOuLesNomsSontInscrits").Range("A" & I) 'si les noms sont en A
       nbLignes = Sheets(Nom).Cells(Rows.Count,"W").end(xlUp).row
       Sheets(Nom).Range("w" & nbLignes & ":ab" & nbLignes).Copy 
       Sheets("Recap").Range("A" & Ligne).PasteSpecial xlPasteValues
       Ligne = Ligne + 1  
    Next
    MPi²

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    j'ai pas encore tester mes es que tu peux si ça te derange pas bien sure de m'expliqué un peu plus les ligne que tu va de m'ajouter
    merci bcp pour ton aide

    voila le programe que j'utilise

    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
    Sub synthese_globale()
    '
    Dim Sh As Worksheet ' declaration de variable sh est la onglet du travail
    Dim nbLignes As Long, Ligne As Long 'le nombre de ligne ou la derniere ligne non vide
    Application.ScreenUpdating = False
     
    With Sheets("SYNTHESE2")
    ' .Columns("A3:AU").ClearContents
       Ligne = 3 'en commence par la ligne 3 parce que les deux premieres lignes sont des titres
        For Each Sh In Sheets ' pour touts les onglets faire
        ' entre "" mettre le nom de toutes les feuilles ‡ exclure sÈparÈs d'un |
     
    If InStr("SYNTHESES|2AFR 205VH(FE)|2AFR 206VH(FE)|2AHP 127VL(FE)|22APG 083VL(FE)|2LHP 452VA(FE)|2LHP 474VA(FE)|2LHQ 474VA(FE)|2LHQ 475VA(FE)|2RCV 032VP(FE)|2RCV 355VN(FE)|2REN 277VP(FE)|2REN 317VP(FE)|2REN 517VP(FE)|2RIS 023VP(FE)|2RIS 024VP(FE)|2RRI 139VN(FE)|2SVA 058VV(FE)|2SVA 059VV(FE)|2SVA 060VV(FE)|RECAP|", Sh.Name & "|") = 0 Then
        If Sh.Name <> "Liste RF" Then
     
     
                  If Sh.Name <> .Name Then ' si le nom de l'onglet est different du nom de l'onglet de travail
     
                 Sh.Range("b3:b3").Copy .Cells(.Rows.Count, 1).End(xlUp)(2) ' cette fonction cherche  la valeur de la cellule B3
     
                  nbLignes = Sh.Cells(Rows.Count, "W").End(xlUp).Row 'cette fonction cherche la derniere ligne non vide  de la colonne W
                  Sh.Range("W" & nbLignes & ":BB" & nbLignes).Copy ' ' cette fonction fait copier la derniere ligne et fait copier de W jusqua BB
                 .Range("B" & Ligne).PasteSpecial xlPasteValues ' faire un collage speciale de la ligne copier dans B
     
     
                 Ligne = Ligne + 1 'passer a la deusieme ligne
     
                     End If
                     End If
        End If
        Next Sh
    End With
     
    Application.ScreenUpdating = True
    End Sub
    cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if InStr("SYNTHESES|2AFR 205VH(FE)|2AFR 206VH(FE)|2AHP 127VL(FE)|22APG 083VL(FE)|2LHP 452VA(FE)|2LHP 474VA(FE)|2LHQ 474VA(FE)|2LHQ 475VA(FE)|2RCV 032VP(FE)|2RCV 355VN(FE)|2REN 277VP(FE)|2REN 317VP(FE)|2REN 517VP(FE)|2RIS 023VP(FE)|2RIS 024VP(FE)|2RRI 139VN(FE)|2SVA 058VV(FE)|2SVA 059VV(FE)|2SVA 060VV(FE)|RECAP|", Sh.Name & "|") = 0 Then
    ça m'arrive d'oublier un onglet et du coup je le trouve dans ma recap alors que je le veux pas
    donc je veux que le programme va dans une onglet ou il va trouver les non des onglets qui va traité
    vraiment merci bcq bcq
    bonne soirée

  13. #13
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    C'est un peu ce que je t'ai donné.
    Crée une feuille avec les noms des onglets à traiter dans la colonne A et change le nom de feuille que j'ai mis "LaFeuilleOuLesNomsSontInscrits" pour celui que tu auras choisi.

    Plutôt que de faire une boucle For each Sh in Sheets, tu mets une boucle For i = 2 to nbLignesNoms qui va lire les noms des onglets à traiter dans cette feuille.

    Si ton fichier n'est pas confidentiel et qu'il n'est pas trop gros, tu pourrais le joindre à la discussion.
    Ça pourrait aider à mieux comprendre...
    MPi²

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    je suis vraiment désolé je ne peux pas te faire joindre le fichier


    je me demande c je dois declarer i comment

  15. #15
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Dim I As Long
    MPi²

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    merci beaucoup cher ami
    j'essayerai demain la macro et je te dis si ça marche

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

Discussions similaires

  1. Remplir les blancs d'une cellule par des '.'
    Par ethan_decoster dans le forum ASP.NET
    Réponses: 1
    Dernier message: 08/02/2010, 09h35
  2. Trouver la derniere ligne
    Par gilles06 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 28/02/2008, 10h04
  3. [VBA-E] trouver la derniere ligne de mon tableau
    Par dado91400 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/03/2007, 22h41
  4. [VBA-E]derniere ligne non vide
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/07/2006, 10h48
  5. [D7 & Excel]Peut-on trouver la derniere ligne du fichier
    Par Isa31 dans le forum API, COM et SDKs
    Réponses: 17
    Dernier message: 14/03/2006, 10h52

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