Bonjour, cliquez-ici pour vous inscrire et participer au forum.
  • Login:



+ Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

Macro Excel pour modifier la valeur des cellules d'une table excel

  1. chminds

    Date d'inscription
    février 2009
    Âge
    35
    Messages
    114

    Macro Excel pour modifier la valeur des cellules d'une table excel

    Bonjour,

    N'ayant aucune base en programme VBA, j'aurai besoin de votre aide SVP.
    Dans le cadre d'un projet de Data Mining (exploration de données) d'image satellitaire, je dispose de plusieurs images sous forme de matrice ayant chacune une taille d'environ 11000 lignes x 11000 colonnes représentant des pixels. Dans chaque pixel on retrouve la valeur de l'intensité de la lumière (couleur)!

    Avant d'arriver au stade d'exploration, je devrai réaliser un prétraitement de ces matrices et ayant perçu des irrégularités dans certains pixels (qui contiennent par exemple des valeurs négatives), je souhaite :
    1- Dans un premier temps, remplacer toutes les cellules (ou pixels) contenant une valeur négative par la valeur "0" (il y a déjà des cellules qui ont comme valeur "0")
    2- Dans un 2eme temps supprimer toutes lignes et colonnes qui contiennent que des 0.

    Auriez-vous SVP le code VBA permettant de réaliser ces deux tâches avec une macro sous Excel 2010 ou 2013?

    PS: J'ai essayé avec la fonction "Remplacer (ctrl+F)" et ça marche mais bug au bout de quelques minutes.
    Je dispose de 122 images dont chacune fait 11000 lignes x 11000 colonnes donc sans l'automatisation, ça me serait impossible de travailler les images.

    Merci par avance.

    -----

    Dernière modification par chminds ; 09/11/2017 à 18h41.
     


    • Publicité



  2. cherbe

    Date d'inscription
    janvier 2015
    Localisation
    Quelque part en Lorraine
    Messages
    1 723

    Re : Macro Excel pour modifier la valeur des cellules d'une table excel

    Bonjour
    Je comprends à peu près la problématique mais je ne comprends pas l'aspect technique.
    Tu parles à la fois d'images, de matrices.
    Les matrices sont sous quelle forme de fichier ?
    Si ce sont des images, Excel n'est pas le meilleur logiciel pour les traiter.
    Si ce sont des matrices de données (tableaux), Excel (et les autres tableurs) ne dépasse pas 256 colonnes !
    Dernière modification par cherbe ; 10/11/2017 à 13h04.
    Le Pape a probablement un ordinateur cantique.
     

  3. jacknicklaus

    Date d'inscription
    janvier 2017
    Messages
    785

    Re : Macro Excel pour modifier la valeur des cellules d'une table excel

    Citation Envoyé par cherbe Voir le message
    Si ce sont des matrices de données (tableaux), Excel (et les autres tableurs) ne dépasse pas 256 colonnes !
    Non.

    depuis Excel 2010, on a 1 048 576 lignes et 16 384 colonnes.

    https://support.office.com/fr-fr/art...xcel%C2%A02007
    Dernière modification par jacknicklaus ; 10/11/2017 à 13h14.
     

  4. chminds

    Date d'inscription
    février 2009
    Âge
    35
    Messages
    114

    Re : Macro Excel pour modifier la valeur des cellules d'une table excel

    Bonjour,

    Ce sont des images satellitaires de 10 bandes converties en pixels sous-format csv (tableau) exploitables directement par des logiciels tableurs dont Excel.
    Une seule bandes contient environ 122 000 pixels répartie sous forme d'une matrice (ou table) de 11000 lignes x 11000 colonnes!

    Pour info, Excel ne se limite pas à 256 colonnes (Excel 98) mais bien beaucoup beaucoup au delà pour les plus récentes versions à savoir Excel 2013 que j'utilise qui va de la colonne A jusqu'à la colonne XFD soit 16384 colonnes ! Et bien évidement y'en a plus en lignes (1 048 576 lignes pour Excel 2013).
     

  5. cherbe

    Date d'inscription
    janvier 2015
    Localisation
    Quelque part en Lorraine
    Messages
    1 723

    Re : Macro Excel pour modifier la valeur des cellules d'une table excel

    code VBA non testé :

    Code:
    Sub traite_image()
         nblignes=11000
         for i = 1 to nblignes
    	ligne_vide=’’vrai’’
    	for j = 1 to 11000
    	      if isnotnumeric(cells(i,j).value or cells(i,j).value < 0  then
    		 cells(i,j).value=0
                     else
                           ligne_vide="faux"  
    	     end if
    	     if ligne_vide="vrai"
    		row(i).delete
    		i=i-1
    		nblignes=nblignes=-1
                    end if
    	next j
        next i
    end sub
    Dernière modification par JPL ; 12/11/2017 à 00h03. Motif: ajout de la balise Code pour garder l'indentation
    Le Pape a probablement un ordinateur cantique.
     


    • Publicité



  6. chminds

    Date d'inscription
    février 2009
    Âge
    35
    Messages
    114

    Re : Macro Excel pour modifier la valeur des cellules d'une table excel

    Bonjour,

    Merci pour ton coup de main. Après correction de quelques petites erreurs (d'orthographe), la macro a fonctionnée mais uniquement pour mettre à 0 les cellules avec des valeurs négatives.
    La suppression des lignes ne se fait pas (test fait avec une matrice de 600x200 puis 50x15)!

    Code:
    Sub traitementimage()
    
         nblignes = 15
         For i = 1 To nblignes
        ligne_vide = ’’vrai’’
        For j = 1 To 54
            If Not IsNumeric(Cells(i, j).Value) Or Cells(i, j).Value < 0 Then
             Cells(i, j).Value = 0
                     Else
                           ligne_vide = "faux"
             End If
             If ligne_vide = "vrai" Then
              Rows(i).Delete
              i = i - 1
              nblignes = nblignes = -1
                    End If
        Next j
        Next i
    
    End Sub
    Dernière modification par JPL ; 12/11/2017 à 23h44. Motif: Ajout de la balise Code (#) pour garder l'indentation
     

  7. cherbe

    Date d'inscription
    janvier 2015
    Localisation
    Quelque part en Lorraine
    Messages
    1 723

    Re : Macro Excel pour modifier la valeur des cellules d'une table excel

    Essaie en remplaçant
    Row(i).delete
    par
    Rows(i).EntireRow.Delete
    Le Pape a probablement un ordinateur cantique.
     

  8. chminds

    Date d'inscription
    février 2009
    Âge
    35
    Messages
    114

    Re : Macro Excel pour modifier la valeur des cellules d'une table excel

    Ca ne marche pas non plus!

    En fait, il ne faut pas supprimer la rangée (ligne) que si toute la ligne est vide donc je pense il faut une boucle qui vérifie cela. Sinon, il faut juste supprimer la cellule vide et faire ceci cellule par cellule mais je ne vois pas comment faire pour qu'Excel décale au fur à mesure les colonnes et lignes de la suppression!
     

  9. cherbe

    Date d'inscription
    janvier 2015
    Localisation
    Quelque part en Lorraine
    Messages
    1 723

    Re : Macro Excel pour modifier la valeur des cellules d'une table excel

    Citation Envoyé par chminds Voir le message
    En fait, il ne faut pas supprimer la rangée (ligne) que si toute la ligne est vide
    Oui j'avais compris comme ça, raison pour laquelle quand commence la boucle J, la variable ligne_vide est positionnée à VRAI. Elle passe à FAUX quand une valeur positive est rencontrée
    En fin de boucle J, si cette variable est à VRAI, la ligne devrait être supprimée mais...
    J'ai mal positionné la suppression de ligne.
    Il faut couper la condition depuis if ligne_vide... jusqu'à end if inclue
    et la coller entre les deux next
    ensuite, il faut copier-coller
    ligne_vide = "vrai"
    juste avant next i
    Le Pape a probablement un ordinateur cantique.
     

  10. chminds

    Date d'inscription
    février 2009
    Âge
    35
    Messages
    114

    Re : Macro Excel pour modifier la valeur des cellules d'une table excel

    Bonjour,

    Malheuresement même avec les modifications apportées, la macro ne marche toujours pas

    Code:
    # code :
    
    Sub Macro1()
    
        nblignes = 15
        For i = 1 To nblignes
        ligne_vide = ’’vrai’’
        For j = 1 To 54
            If Not IsNumeric(Cells(i, j).Value) Or Cells(i, j).Value < 0 Then
            Cells(i, j).Value = 0
            Else
            ligne_vide = "faux"
            End If
             
        Next j
        
        If ligne_vide = "vrai" Then
             Rows(i).EntireRow.Delete
              i = i - 1
              nblignes = nblignes = -1
        End If
        
        ligne_vide = "vrai"
        
        Next i
    
        Application.Goto Reference:="Macro1"
    
    End Sub
    Dernière modification par JPL ; 15/11/2017 à 00h36. Motif: Ajout de la balise Code (#) pour garder l'indentation
     

  11. cherbe

    Date d'inscription
    janvier 2015
    Localisation
    Quelque part en Lorraine
    Messages
    1 723

    Re : Macro Excel pour modifier la valeur des cellules d'une table excel

    Envoie-moi en mail privé le fichier CSV qui te sert pour les tests
    Le Pape a probablement un ordinateur cantique.
     

  12. JPL

    Date d'inscription
    septembre 2003
    Messages
    67 828

    Re : Macro Excel pour modifier la valeur des cellules d'une table excel

    Il est plus simple de poster le CSV dans une balise Code. Je rappelle que les MP n’acceptent pas les pièces jointes.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac
     


    • Publicité




 

Discussions similaires

  1. Transfert Automatique de cellules Excel vers plusieurs fichiers Excel
    Par Choub18 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 16/03/2016, 12h06
  2. une macro de recherche pour excel
    Par Alfabidou dans le forum Logiciel - Software - Open Source
    Réponses: 24
    Dernier message: 12/02/2015, 11h10
  3. Transfert Automatique de cellules Excel vers Excel
    Par deadog182 dans le forum Logiciel - Software - Open Source
    Réponses: 24
    Dernier message: 06/06/2013, 14h00
  4. macro-excel: positionner des éléments selon leur valeur
    Par sansfoiniloi dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 10/03/2010, 12h54
  5. [excel] Macro pour graphique.
    Par Lordstan dans le forum Logiciel - Software - Open Source
    Réponses: 10
    Dernier message: 15/10/2009, 22h12