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 :

Comment conserver le format source d'une cellule sur la cellule de destination ?


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Par défaut Comment conserver le format source d'une cellule sur la cellule de destination ?
    Bonjour,

    Je travaille sur une macro permettant de regrouper le contenu de plusieurs classeurs sur une feuille unique.

    Tout fonctionne, sauf certains numéro de contrats qui apparaissent au format date. (exemple n° contrat 8-04 ressort sur la feuille de destination en date 04/08/2017)

    Comment éviter cela ?

    Merci par avance pour vos lumières.

    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
     
    Sub Conso_Activité_Sites()
    '
    Application.ScreenUpdating = False
     
    Sheets("Feuil1").Cells.ClearContents
     
     
    ' Conso_Activité_sites Macro
    '
    Dim appXL As Object
    Dim fso As Scripting.FileSystemObject
    Dim dossier As Scripting.Folder
    Dim fichier As Scripting.File
    Dim wbsource As Workbook
    Dim ldest As Long
    Dim lsource As Long, ncol As Long
    Dim src As Worksheet, dst As Worksheet, tmp As Worksheet
    Dim test As String
     
     
    Set fso = New Scripting.FileSystemObject
    Set dossier = fso.GetFolder("C:\XXXXX")
    Set dst = ThisWorkbook.Sheets("Feuil1")
    Set tmp = ThisWorkbook.Sheets("temp")
    ldest = 1
    For Each fichier In dossier.Files
        If Right(fichier.Name, 5) = ".xlsx" Or Right(fichier.Name, 4) = ".xls" Then
     
    Workbooks.Open fichier.Path 'ouvrons le fichier'
            Set wbsource = Workbooks(fichier.Name)
            Set src = wbsource.Sheets("DB")
     
     
    tmp.Range("A2:AQ111") = src.Range("A3:AQ112").Value
     
     
          For lsource = 2 To 111
                For ncol = 1 To 43
                    dst.Cells(ldest, ncol) = tmp.Cells(lsource, ncol)
                Next
                ldest = ldest + 1
            Next
            wbsource.Close savechanges:=False
        End If
    Next
     
    Application.ScreenUpdating = True
     
    End Sub

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    plutôt que d'utiliser un .value = .value (ligne 35 et 40), utilises la méthode Copy de l'objet Range, qui va embarquer le format de la cellule source

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaPlageSource.Copy MaPlageDestination

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Par défaut
    Hello, Merci pour ta réponse.

    Cela fonctionne, cependant la macro est du coup plus longue à s’exécuter.

    Si tu as un tips pour alléger tout ça, ça serait top

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si tu as un tips pour alléger tout ça, ça serait top
    La réponse de Joe Levrai utilise la méthode Copy qui me semble la plus simple et la plus courte à utiliser. C'est celle que j'allais proposer
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Par défaut
    Merci à tous

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    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 609
    Par défaut
    Bonjour,

    Tu pourrais mettre le format de la cellule de destination en texte avant la copie (pour certaines données)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dst.Cells(ldest, ncol).NumberFormat = "@"
    dst.Cells(ldest, ncol) = tmp.Cells(lsource, ncol)
    ou encore mettre le format de la cellule d'origine (à tester par contre...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dst.Cells(ldest, ncol).NumberFormat = tmp.Cells(lsource, ncol).NumberFormat
    dst.Cells(ldest, ncol) = tmp.Cells(lsource, ncol)

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Par défaut
    Bonjour, merci pour ta réponse.

    J'ai décomposé la plage de cellule à copier afin d'isoler que la colonne B à copier en texte.

    Le résultat affiche VRAI ou FAUX ou GENERAL lorsque le NumberFormat est en général.

    J'imagine que cela est lié au format des cellules sources, mais pourquoi cela n'affiche pas le contenu plutôt que la validation du format?

    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
     
    Workbooks.Open fichier.Path 'ouvrons le fichier'
            Set wbsource = Workbooks(fichier.Name)
            Set src = wbsource.Sheets("DB")
     
     
     
    tmp.Range("A2:AB111") = src.Range("A3:AB112").Value
    tmp.Range("C2:C111") = src.Range("C3:C112").NumberFormat = "@"
    tmp.Range("D2:AQ111") = src.Range("D3:AQ112").Value
     
          For lsource = 2 To 111
                For ncol = 1 To 43
                    dst.Cells(ldest, ncol) = tmp.Cells(lsource, ncol)
                Next
                ldest = ldest + 1
            Next
            wbsource.Close savechanges:=False
        End If
    Next
     
    Application.ScreenUpdating = True
     
    End Sub

  8. #8
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par KarlBisk Voir le message
    Le résultat affiche VRAI ou FAUX ou GENERAL lorsque le NumberFormat est en général.
    J'imagine que cela est lié au format des cellules sources, mais pourquoi cela n'affiche pas le contenu plutôt que la validation du format?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tmp.Range("C2:C111") = src.Range("C3:C112").NumberFormat = "@"
    Ca te semble naturel d'avoir deux "=" sur le même ligne de code ???

    En plus, quand on traite à part le format et la valeur d'une cellule, on commence par mettre en place le format AVANT de mettre la valeur, pour éviter que celle-ci soit "déformer" par un éventuel format inadapté.

    Mais, comme le dit Phillippe ( ), l'usage de Copy permet de s'affranchir de tous ces problèmes.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/09/2013, 13h02
  2. comment charger le code source d'une page web avec dotnet ?
    Par gizgoz dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 14/05/2007, 20h51
  3. [VBA-E] Comment appliquer une macro sur plusieurs cellules
    Par jeanpierreco dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 25/01/2007, 10h54
  4. Comment recuperer le code source d une page HTML distante en javascript
    Par herbert dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 26/07/2006, 22h26
  5. [Juridique] Comment réutiliser le code source d'une classe ?
    Par mathieu dans le forum Général Java
    Réponses: 8
    Dernier message: 17/05/2004, 13h40

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