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 :

Ne pas importer les cellules vides


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Janvier 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2017
    Messages : 24
    Par défaut Ne pas importer les cellules vides
    Bonjour.
    Suite à mon ancien Post ou je cherchait a faire une mise à jour réseau
    ICI:

    https://www.developpez.net/forums/d1...tion-code-vba/

    Cela fonctionne bien j'ai juste un soucie.
    Dans mon fichier d'import j'ai certaine cellules vide, donc lors de mon import il n’importe le texte des cellules avec du texte et les cellules vide bien sur.

    Hors mon fichiers sur le réseau est mis a jour par d'autre personne régulièrement. mais je n'y est pas accès en écriture.
    Hors sur mon fichier a moi il m'arrive de remplir des cellules vide avec les info que j'ai vers moi et que les autre non pas.
    J'espère que jusqu’ici vous arrivé a me suivre.

    Mais si je refait une mise a jour (donc si je lance un nouvel Import) cela me change les infos que j'ai rempli par une nouvel fois la cellule vide du fichier en réseau.

    J'aimerais donc pouvoir dire dans mon code de ne pas importé les donnée si la cellules du fichier du réseau est vide.

    Voici mon code actuelle (merci encore riaolle)

    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
     
    ub MAJ()
    Dim wb As Workbook
    Set wb = Workbooks.Open("D:\Documents\moi\Desktop\Encours.xlsx")
    Dim f1 As Worksheet, f2 As Worksheet
        Set f1 = ThisWorkbook.Sheets("Commandes")
        Set f2 = wb.Sheets("Encours")
     
        dlf1 = f1.Cells(Rows.Count, 1).End(xlUp).Row
        For i = 3 To f2.Cells(Rows.Count, 2).End(xlUp).Row
            If f1.Columns(1).Find(f2.Cells(i, 2)) Is Nothing Then
               dlf1 = dlf1 + 1
                f1.Cells(dlf1, 1) = f2.Cells(i, 2)
            End If
        Next i
     
    Dim derLig As Long
         derLig = f1.Cells(Rows.Count, 1).End(xlUp).Row
         With f1
     
     
        .Range("B3:B" & derLig).Value = WorksheetFunction.VLookup(.Range("A3:A" & derLig).Value, f2.Range("B:W"), 2, False)
        .Range("C3:C" & derLig).Value = WorksheetFunction.VLookup(.Range("A3:A" & derLig).Value, f2.Range("B:W"), 3, False)
        .Range("D3:D" & derLig).Value = WorksheetFunction.VLookup(.Range("A3:A" & derLig).Value, f2.Range("B:W"), 7, False)
        .Range("E3:E" & derLig).Value = WorksheetFunction.VLookup(.Range("A3:A" & derLig).Value, f2.Range("B:W"), 20, False)
        .Range("V3:V" & derLig).Value = WorksheetFunction.VLookup(.Range("A3:A" & derLig).Value, f2.Range("B:W"), 6, False)
        .Range("W3:W" & derLig).Value = WorksheetFunction.VLookup(.Range("A3:A" & derLig).Value, f2.Range("B:W"), 22, False)
     
        wb.Close
        Set wb = Nothing
        Set f1 = Nothing
        Set f2 = Nothing
     
     
     
     
        Next
     
     
    End With
     
     
    End Sub

    Voila si vous pouvez m'aider merci

  2. #2
    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,
    Dès qu'il y a importation ou exportation de données selon critères, j'utilise toujours les filtres avancés d'excel (méthode AdvancedFilter de l'objet Range).
    C'est simple à mettre en place et la programmation fait une ligne (sans la déclaration des variables)

    A lire éventuellement Les filtres avancés ou élaborés dans Excel
    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

  3. #3
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    Est-ce que en gros, ça ressemble à ça :
    Nom : trous.png
Affichages : 196
Taille : 3,8 Ko
    Tu veux copier ce qu'il y a à gauche à droite, sans écraser ce qu'il y a à droite ?
    Je te propose une solution, mais je ne suis pas sûre que ce soit la meilleure. Si qqun d'autre passe par ici et a une meilleur solution qu'il fasse signe
    Soit tu procèdes cellules par cellule (et non pas par ligne) et tu ajoutes une condition If isEmpty(maCellule) Then ... --> si la cellule est vide, tu n'importes pas. Mais si tu as beaucoup de ligne, le code va mettre du temps à tourner ...
    Soit tu n'as pas beaucoup de cellules vides et tu utilises un methodes un peu tordues, mais qui semble marcher chez moi. Je te décris comment faire "à la main", il faudra réfléchir au code ensuite (si code nécessaire)
    1. Sélectionner toutes les cellules de la feuille.
    2. Format > Vérouiller la cellule (cela dévérouille toutes les cellules si on protège la feuille)
    3. Sélectionner les cellules qui ont été renseignées à la main
    4. Format > Vérouiller la cellule (cela vérouille les cellules sélectionnées si on protège la feuille)
    5. Protéger la feuille (sans mdp)
    6. Lancer ta macro en ajoutant un On Error Resume Next :
      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
      Sub MAJ()
      Dim wb As Workbook
      Set wb = Workbooks.Open("D:\Documents\moi\Desktop\Encours.xlsx")
      Dim f1 As Worksheet, f2 As Worksheet
          Set f1 = ThisWorkbook.Sheets("Commandes")
          Set f2 = wb.Sheets("Encours")
       
          dlf1 = f1.Cells(Rows.Count, 1).End(xlUp).Row
          For i = 3 To f2.Cells(Rows.Count, 2).End(xlUp).Row
              If f1.Columns(1).Find(f2.Cells(i, 2)) Is Nothing Then
                 dlf1 = dlf1 + 1
                  f1.Cells(dlf1, 1) = f2.Cells(i, 2)
              End If
          Next i
       
      Dim derLig As Long
           derLig = f1.Cells(Rows.Count, 1).End(xlUp).Row
           With f1
          On Error Resume Next
          .Range("B3:B" & derLig).Value = WorksheetFunction.VLookup(.Range("A3:A" & derLig).Value, f2.Range("B:W"), 2, False)
          .Range("C3:C" & derLig).Value = WorksheetFunction.VLookup(.Range("A3:A" & derLig).Value, f2.Range("B:W"), 3, False)
          .Range("D3:D" & derLig).Value = WorksheetFunction.VLookup(.Range("A3:A" & derLig).Value, f2.Range("B:W"), 7, False)
          .Range("E3:E" & derLig).Value = WorksheetFunction.VLookup(.Range("A3:A" & derLig).Value, f2.Range("B:W"), 20, False)
          .Range("V3:V" & derLig).Value = WorksheetFunction.VLookup(.Range("A3:A" & derLig).Value, f2.Range("B:W"), 6, False)
          .Range("W3:W" & derLig).Value = WorksheetFunction.VLookup(.Range("A3:A" & derLig).Value, f2.Range("B:W"), 22, False)
          wb.Close
          Set wb = Nothing
          Set f1 = Nothing
          Set f2 = Nothing
      End With
      End Sub
    7. "Dé-protéger" la feuille.

    A toi de voir si tout doit être automatisé par macro, où si tu peux renseigner à la main toutes les cellules qui doivent être vérouillées. Les étapes 1 et 2 doivent être effectuées qu'une seule fois dans la "vie" du document, donc ça tu n'automatiseras pas
    Pour protéger les cellules qui ne doivent pas être modifiées, ce serait plus simple de le faire à la main (de toute façon tu les modifies déjà à la main)
    Ensuite, protéger et dé-protéger la feuille, ça peut se faire en VBA (enregistreur de macro).

  4. #4
    Membre averti
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Janvier 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2017
    Messages : 24
    Par défaut
    Merci mais actuellement j'ai plus de 5400 cellules dans mon tableaux.
    Et je ne me vois pas faire tout ça a la main;
    J'ai vraiment besoin d'une formule en VBA qui me permet de ne pas importé les cellules vide.
    désoler
    mais merci quand même de vous penché sur mon problème.

  5. #5
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Tu as à peu près combien de cellules modifiées à la main (= combien de cellules vides) ?

  6. #6
    Membre averti
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Janvier 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2017
    Messages : 24
    Par défaut
    Beaucoup trop.
    C'est très aléatoire d'un jour a l'autre.

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    importe dans une feuille annexe, que tu fusionnes ensuite avec la vraie selon tes critères.
    eric

Discussions similaires

  1. Calcul : ne pas compter les cellulles vides
    Par romuald.lecordier dans le forum QlikView
    Réponses: 1
    Dernier message: 05/09/2014, 08h49
  2. Réponses: 2
    Dernier message: 16/07/2009, 17h39
  3. Importer Excel sauf les cellules vides
    Par curt dans le forum VBA Access
    Réponses: 4
    Dernier message: 26/05/2008, 18h31
  4. [CSV] read_csv (ne pas lire les ligne vide)
    Par gpsevasion dans le forum Langage
    Réponses: 4
    Dernier message: 28/01/2007, 14h53
  5. Afficher les cellules vides...
    Par Invité dans le forum ASP
    Réponses: 1
    Dernier message: 31/08/2005, 17h32

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