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 :

copier avec le même format de cellules [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 128
    Par défaut copier avec le même format de cellules
    Bonjour à toutes et à tous,

    J'ai le code ci dessous qui copie la valeur de cellules d'un classeur dans un autre, cependant le format source (format nombre à 3 décimales) n'est pas conservé et il est transformé en format texte dans le classeur de destination qu'elqu'un peut il me dire pourquoi? j'ai essayé le code formatNum "0.00" ça n'a pas marché
    merci d'avance
    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
    67
    68
    69
    70
    71
    Sub envoiprod()
        Dim wsDevis As Worksheet
        Dim wbArchive As Workbook
        Dim wsArchive As Worksheet
     
        Set wsDevis = ThisWorkbook.Worksheets("Devis")
        Set wbArchive = Workbooks.Open("C:\Users\tpomies\Desktop\VBA\TabProd.xlsx")
        Set wsArchive = wbArchive.Worksheets("Ptour")
     
        Dim premiereLigneVide As Integer
        premiereLigneVide = wsArchive.Cells(wsArchive.Rows.Count, 1).End(xlUp).Row + 1
     
        Dim Num_Fact As String
        Dim Nom_client As String
        Dim Nom_Chantier As String
        Dim Nb_Pierre As Integer
        Dim Reference_Produit As String
        Dim Qualité As String
        Dim Longueur As String
        Dim Epaisseur As String
        Dim Hauteur As String
        Dim Quantité As String
        'Dim Volume As String
     
     
        Num_Fact = wsDevis.Range("F19").Value
        Nom_client = wsDevis.Range("J13").Value
        Nom_Chantier = wsDevis.Range("H21").Value
        Nb_Pierre = wsDevis.Range("F21").Value
     
     
        Dim iRow As Integer
     
        For iRow = PREMIERE_LIGNE To DERNIERE_LIGNE
            If wsDevis.Cells(iRow, 1).Value <> 0 Then
                Reference_Produit = wsDevis.Cells(iRow, 3).Value
                Selection.NumberFormat = "0.000"
                Qualité = wsDevis.Cells(iRow, 2).Value
                Selection.NumberFormat = "0.000"
                Longueur = wsDevis.Cells(iRow, 4).Value
                Selection.NumberFormat = "0.000"
                Epaisseur = wsDevis.Cells(iRow, 5).Value
                Selection.NumberFormat = "0.000"
                Hauteur = wsDevis.Cells(iRow, 6).Value
                Selection.NumberFormat = "0.000"
                Quantité = wsDevis.Cells(iRow, 7).Value
                Selection.NumberFormat = "0.0"
                'Volume = wsDevis.Cells(iRow, 10).Value
     
     
                wsArchive.Cells(premiereLigneVide, 1).Value = Num_Fact
                wsArchive.Cells(premiereLigneVide, 2).Value = Nom_client
                wsArchive.Cells(premiereLigneVide, 3).Value = Nom_Chantier
                wsArchive.Cells(premiereLigneVide, 4).Value = Nb_Pierre
                wsArchive.Cells(premiereLigneVide, 7).Value = Qualité
                wsArchive.Cells(premiereLigneVide, 8).Value = Reference_Produit
                wsArchive.Cells(premiereLigneVide, 9).Value = Longueur
                wsArchive.Cells(premiereLigneVide, 10).Value = Epaisseur
                wsArchive.Cells(premiereLigneVide, 11).Value = Hauteur
                wsArchive.Cells(premiereLigneVide, 12).Value = Quantité
     
                'wsArchive.Cells(premiereLigneVide, 13).Value = Volume
     
     
     
                premiereLigneVide = premiereLigneVide + 1
            End If
        Next iRow
        wbArchive.Saved = False
        wbArchive.Close
    End Sub
    Longueur, épaisseur ect doivent être en format nombre.

  2. #2
    Expert éminent


    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
    Par défaut
    bonjour,
    il faut éviter d'utiliser l'objet selection pour autre chose qu'une interaction (saisie..paramétres.. ) avec l'utilisateur..

    de plus applique ton format de cellule directement à la cellule destination

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     wsArchive.Cells(premiereLigneVide, 9).NumberFormat = "0.0"

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Peut-être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        For iRow = PREMIERE_LIGNE To DERNIERE_LIGNE
            If wsDevis.Cells(iRow, 1).Value <> 0 Then
                Reference_Produit = wsDevis.Cells(iRow, 3).Value
                Reference_Produit.NumberFormat = "0.000"
    etc.
    au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        For iRow = PREMIERE_LIGNE To DERNIERE_LIGNE
            If wsDevis.Cells(iRow, 1).Value <> 0 Then
                Reference_Produit = wsDevis.Cells(iRow, 3).Value
                Selection.NumberFormat = "0.000"
    puisque, si j'ai bien lu, tu sélectionnes rien (et c'est bien !).

  4. #4
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Pour appliquer le format voulu dans le classeur de destination, tu peux utiliser la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wsArchive.Cells(premiereLigneVide, 8).Value = Format(Reference_Produit, "0.000")
    Cordialement.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 128
    Par défaut ok merci
    ok merci à tous

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    @ gfzt82 :

    La fonction "Format" renvoie une chaîne texte, ce qui n'est peut-être pas approprié, dans ce cas (c'est l'équivalent de la fonction Excel "TEXTE").

  7. #7
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    @ Daniel.C

    Bien vu !
    Effectivement, c'est une boulette ...

    Cordialement.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/02/2014, 15h14
  2. Date sous Excel, même format de cellule et pourtant
    Par AlexFred dans le forum SAS Base
    Réponses: 2
    Dernier message: 09/04/2010, 12h07
  3. EXCEL-Pb avec format de cellules
    Par VBBBA dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 04/02/2007, 23h54
  4. [C#] atteindre le format de cellule avec le pilotage d'EXCEL
    Par cortex024 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 19/04/2006, 09h32
  5. Copier contenu TB_A dans TB_B avec les même champs
    Par snoopy69 dans le forum Access
    Réponses: 3
    Dernier message: 13/10/2005, 16h22

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