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 :

Test cases vide + Effacement


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2011
    Messages : 67
    Par défaut Test cases vide + Effacement
    Bonjour la communauté !

    Je vous préviens je suis totalement débutant en la matière...Mais bon je m'adapte vite =p

    Bref...voici mon problème. J'ai besoin de formatter un fichier CSV que Trés mal organisé. J'ai trouver un moyen (en enregistrant une macro) de réaliser 90% du travail que je veux faire (Deux trois réglage, des suppressions de colonnes...). Dernier point de mon formatage serais de tester les case des colonne B et C de chaque ligne

    Exemple 1 : Si la Case B2 ou la case C2 est vide faire --> Récupérer les données de la case B2 et les écrire a la suite du contenu de la case B1 et supprimez cette ligne entière) etc ...

    Exemple 2 : Si la Case B3 ou la case C3 est vide faire --> Récupérer les données de la case B3 et les écrire a la suite du contenu de la case B2) etc ... etc etc...


    Si vous avec des piste pour que je puisse trouver la solution ou encore mieux un bout de code =p je suis preneur !

    Merci de vos futurs réponses.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2012
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2012
    Messages : 94
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for i=2 to 65536
        if isempty(cells(i,2)) or isempty(cells(i,3)) then
            cells(i-1,2).text=cells(i-1,2).text & cells(i,2).text
            rows(i).delete
            i=i-i
        endif
    next

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2011
    Messages : 67
    Par défaut
    Ah ben merci

    Ce qu'il ya après le then correspond au remplacement du contenu c'est bien sa ? Il prend le contenu de la cellule qui est au dessus et concatene avec l'actuelle puis supprime la ligne avec "rows(i).delete"

    Great

    Bon j'ai essayer d'utiliser ce code, J'ai une erreurs qui se situe sur cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(i - 1, 2).Text = Cells(i - 1, 2).Text & Cells(i, 2).Text
    il me dit :

    "Run-time error '450'
    Wrong number of arguments or invalid property assignment"

    Parle t'il du code ou de ce qu'il lit dans le tableau ?

  4. #4
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Citation Envoyé par blinkman04 Voir le message
    Bon j'ai essayer d'utiliser ce code, J'ai une erreurs qui se situe sur cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(i - 1, 2).Text = Cells(i - 1, 2).Text & Cells(i, 2).Text
    il me dit :

    "Run-time error '450'
    Wrong number of arguments or invalid property assignment"

    Parle t'il du code ou de ce qu'il lit dans le tableau ?
    Essaie de modifier la propriété Value et non la propriété Text.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(i - 1, 2).Value = Cells(i - 1, 2).Value & Cells(i, 2).Value

  5. #5
    Membre éprouvé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2012
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2012
    Messages : 94
    Par défaut
    Désolé d'avoir balancer du code comme ça, j'étais sur le départ.

    Donc oui, la formule Cells(i - 1, 2).Text = Cells(i - 1, 2).Text & Cells(i, 2).Text concatène les textes de chaques cellules dans la 1ere ( "chaine 1" & "chaine 2" devient "chaine 1chaine 2").

    Remplace text par value si ça ne fonctionne pas, normalement text fonctionne mais value fonctionne tout aussi bien (text renvoie le contenu de la cellule en texte tandis que value renvoie le contenu dans le type qui correspond, par ex les nombres sont renvoyés en nombre, les dates en date...).

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2011
    Messages : 67
    Par défaut
    Effectivement je n'est plus d'erreurs, mais sa me fait planter excel...

    Voila mon code entier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub testEffacement1()
              Dim i As Integer
              i = 2
              for i=2 to 30
        if isempty(cells(i,2)) or isempty(cells(i,3)) then
            cells(i-1,2).Value=cells(i-1,2).Value & cells(i,2).Value
            rows(i).delete
            i=i-i
        endif
    next i
    End Sub
    Sa tourne dans le vide et quand je suis sur la fenêtre du tableau mon curseur switch entre souris et croix de tableur... Boucle infinie on dirais ?

    Ahah pas de soucis d'ailleurs il faudrait que je pense a partir manger un jour...

    S sa peux vous aider voici en gros (J'ai masqué les valeur hein ...) le début et le résultat recherché , si sa peut vous aider ^^

  7. #7
    Membre éprouvé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2012
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2012
    Messages : 94
    Par défaut
    Alors, oui, ça peut boucler si les dernières lignes sont toutes vides. une correction

    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
    Sub testEffacement1()
        Dim i As Integer
        Dim Boucle as boolean
     
        Boucle=false
        'i = 2 inutile, tu le répètes après
        for i=2 to 30
        if (isempty(cells(i,2)) or isempty(cells(i,3))) and not Boucle then
            cells(i-1,2).Value=cells(i-1,2).Value & cells(i,2).Value
            rows(i).delete
            i=i-i
            Boucle=true
        Else
            Boucle=false
        endif
    next i
    End Sub
    En fait ce genre de boucle est pas adapté, si tu as plusieurs lignes de suite à traiter ça marchera mal, en en sautant une sur deux. Je refait un truc.

    Désolé je peux pas regarder ton fichier, politique de réseau de ma boite :p

    Ceci devrait être mieux :
    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
    Sub Effacement()
     
        Dim i As Byte
        Dim j As Byte
        Dim tmp as Byte
        Dim listelignes() As Byte
     
        j = 0
        For i = 2 To 30
            If (IsEmpty(Cells(i, 2)) Or IsEmpty(Cells(i, 3))) And Not Boucle Then
                Cells(i - 1, 2).Value = Cells(i - 1, 2).Value & Cells(i, 2).Value 'on concatène les valeurs
                listelignes(j) = i
            End If 'on liste la ligne comme à supprimer
        Next
     
        tmp = 0
        For i = 0 To j
           Rows(listelignes(i) - tmp).Delete 'on supprime la ligne
           tmp = tmp + 1 'on décale de 1 à chaque suppression car les lignes remontent
        Next
     
    End Sub

Discussions similaires

  1. Réponses: 15
    Dernier message: 03/12/2019, 11h42
  2. Test d'une case vide
    Par WarZonX dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 11/03/2010, 19h34
  3. Case vide dans un tableau
    Par argon dans le forum C
    Réponses: 12
    Dernier message: 17/09/2006, 17h18
  4. [VBA]Test cellule vide base access
    Par ALAMARQU dans le forum VBA Access
    Réponses: 4
    Dernier message: 17/03/2006, 16h14
  5. [XSL -PHP] Test si vide... et première valeur inférieure
    Par mamat- dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 06/08/2005, 18h57

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