Extraction d'information a partir d'un plan réalisé a partir d'excel

mrhemp Messages postés 40 Date d'inscription dimanche 23 février 2003 Statut Membre Dernière intervention 24 février 2009 - 19 févr. 2009 à 12:57
mrhemp Messages postés 40 Date d'inscription dimanche 23 février 2003 Statut Membre Dernière intervention 24 février 2009 - 24 févr. 2009 à 00:35
Bonjour,

J'ai des fichiers Excel représentant de plans d'affectation de légume sur des terrain, pendant certaines durées. Ces plans sont représentés en 2D. Sur l'axe horizontal (Colonne) Il y a les numéro de ligne sur le terrain et en vertical (ligne) les mois de l'année. Lorsqu'une culture est affectée sur le terrain, les cellules sont fusionnées. Vous pouvez voir
sur l'image ci-dessous.

Ce que je voudrais faire c'est parcourir les celules de cette fiche excel et en resortir un listing des cultures
sour forme textuelle pour les inserer dans une base de données.

Typiquement :  culture  carreauDebut  carreauFin  DateDebut   Durée
                       Gazon   1                     39             01.01.2007  150jours
                       Oignon  1                     39             01.01.2008  150jours
                       Celeri    1                     12             01.07.2008  120jours

Je ne sais pas trop comment partir, parce que je n ai pas en têtes quelles proprieté des cellules sont accessibles
pour réaliser cela de manière simple. Et je ne sais pas trop quel algorithme utiliser.

Merci d'avance pour tout conseil

5 réponses

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 13
19 févr. 2009 à 17:51
Salut,

voici un debut de reponse pour te montrer comment travailler avec des cellules fusionées.

le code qui suit fonctionne independament de la structure de ta feuille mais suppose que la feuille "plan de parcelle" est active.

Sub Culture()
    Dim DerniereCellule As String, MonJardin As Range, Parcelle() As String, Cellule As Range
    Dim i As Long, Nb As Long, DejaLister As Boolean
    DerniereCellule = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Address(False, False)
    DerniereCellule = Right(DerniereCellule, InStr(1, DerniereCellule, ":") - 1)
    Set MonJardin = Range("A1:" & DerniereCellule)
    Nb = 0
    For Each Cellule In MonJardin
        If Cellule.MergeCells Then
            If Nb = 0 Then
                Nb = Nb + 1
                ReDim Parcelle(i)
                Parcelle(i) = Cellule.MergeArea.Address(False, False)
            Else
                DejaLister = False
                For i = 0 To Nb - 1
                    If Cellule.MergeArea.Address(False, False) = Parcelle(i) Then
                        DejaLister = True
                        Exit For
                    End If
                Next
                If DejaLister = False Then
                    Nb = Nb + 1
                    ReDim Preserve Parcelle(i)
                    Parcelle(i) = Cellule.MergeArea.Address(False, False)
                End If
            End If
        End If
    Next
    For i = 0 To Nb - 1
        Range(Parcelle(i)).Select
        Selection.Interior.ColorIndex = 43
        DoEvents
        MsgBox "Culture: " & Range(Parcelle(i)).Cells(1, 1).Value
        Range(Parcelle(i)).Interior.ColorIndex = xlNone
    Next
End Sub

A+
0
mrhemp Messages postés 40 Date d'inscription dimanche 23 février 2003 Statut Membre Dernière intervention 24 février 2009
19 févr. 2009 à 23:06
Héhéé  :)  :)  :)  Super! Merci beaucoup c'est parfait!

Merci milles fois!
0
mrhemp Messages postés 40 Date d'inscription dimanche 23 février 2003 Statut Membre Dernière intervention 24 février 2009
23 févr. 2009 à 17:04
J'ai trouvé une piste mais je ne sais pas comment l'exploiter...

En extrayant la propriété "Address" de la cellule fusionnée j'obtiens cela :

<col style=\"width: 81pt;\" width=\"108\" /><col style=\"width: 89pt;\" width=\"119\" />----
Gazon, $C$84:$AO$99, ----
Gazon, $C$100:$AO$111, ----
Oignons Hivernés, $C$116:$AO$123, ----
Oignons Hivernés, $C$124:$AO$135, ----
Céleri Branche, $C$136:$N$145, ----
Fenouil, $O$136:$AA$139, ----
Chou Frisé, $AB$137:$AO$147, ----
Raves, $O$140:$AA$147, ----
Raves, $O$148:$AA$151, ----
Chou Frisé, $AB$148:$AO$152

En prennant l'adresse :  $C$84:$AO$99

On peut obtenir la date de début de la culture:
la ligne de début de la cellule    : 84.    Sachant qu'une cellule représente environ 15 jours  et que le 1er janvier 2003  se situe sur la case C4, on on calcule 84 -4 = 80.    En faisant 80*15 on obtient le nombre de jours qui se sont écoulé entre le 1er janvier 2003 et le début de la culture. Si excel possède la fonction date.add (date, nombreDeJours) j'arrive trouver la date du début de la culture.
Pour avoir la durée, plus facile :   99 - 84 15.     15 * 15 225 jours

Pour avoir l'amplitude du carreau :
 il commence au carreaux C -> 3  auquel on soustrait 2 pck les deux première colones sont des en-têtes et ne rentre pas en compte

Carreau de fin :  A0  ->41 -2 = 39

Mes problèmes:   Comment spliter $C$84:$AO$99 pour virer les $, et extraire le C le 84 le AO et le 99

Ou mieux encore -> comment convertir cette plage d'adresse au format ligne colone où les colones sont désignées par des entiers et non pas par des lettres, ce qui eviterait le problème pour convertir un C en 3 et un AO en 41...

Quelqun autait-il une idée ???   C'est frustrant de ne pas avoir de String.split("$")...

Merci d'avance
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 13
23 févr. 2009 à 22:15
Salut,

pour le dollar tout est ici :

.Address(False, False)

pour l'autre question pas le temps maintenant, j'y reflechi et je reviens

A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mrhemp Messages postés 40 Date d'inscription dimanche 23 février 2003 Statut Membre Dernière intervention 24 février 2009
24 févr. 2009 à 00:35
Merci pour votre aide.

Ca fonctionne. J'ai réussi a obtenir mes listing
A présent j'aimerais biens que ça aie automatiquement chercher dans les 30 différents fichier automatiquement et que le tableau soit dans un unique fichier excelle qui s'appelle Resume.xls par exemple...

J'ai essayé avec l'enregistreur de macro d'accéder a une cellule d'un fichier, mais ca accède de manière R1C1.

Et je ne sais pas comment faire proprement et surtout simplement pour que les 30 fichiers soient parcouru et qu'a mesure les lignes soient insérées dans le fichier "resume.xls". Biensur je veux pas copier 30fois la fonction qui relève les cellules. Je sais pas comment faire comprendre a ce excel de m* qu'il faut entrer dans un ficheir, la lecture des cellules se fait implicitement dans ce ficehir qui est ouvert, et l'ecriture des résultat se fait par adressage absolut du ficheir Resumé.

Merci d'avance et dsl pr l'ortho, j'ai passé une soirée pourrie avec mon touchpad pck j'ai plus de piles dans ma souris.
0