Extraction d'information a partir d'un plan réalisé a partir d'excel
mrhemp
Messages postés40Date d'inscriptiondimanche 23 février 2003StatutMembreDernière intervention24 février 2009
-
19 févr. 2009 à 12:57
mrhemp
Messages postés40Date d'inscriptiondimanche 23 février 2003StatutMembreDernière intervention24 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.
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
A voir également:
Extraction d'information a partir d'un plan réalisé a partir d'excel
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 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
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("$")...
mrhemp
Messages postés40Date d'inscriptiondimanche 23 février 2003StatutMembreDernière intervention24 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.