PB excel !!

mihaesti Messages postés 17 Date d'inscription jeudi 15 avril 2004 Statut Membre Dernière intervention 1 juin 2004 - 1 juin 2004 à 10:06
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 - 1 juin 2004 à 13:57
Bonjour,
J'ai un tableau Excel qui contient un colonne. Sur cette colonne, il y a un certain nombre de parametres (servant a des calculs de polymeres) qui on un certain nombre de valeurs. Par ex, dans mon exemple, il y a 13 parametres dans la colonne, chacun contenant 42 valeurs (nombre de valeurs par parametres est constant quelque soit le param).
Et dans un fichier de traitement, je dois traiter ces differentes info, or pour chaque fichier traitement, je dois aller compter moi meme dans excel le nombre de param et le nombre de valeurs par param. Je voudrais automatiser tout cela, cad faire une fonction qui m'extrait le nombre de param et le nombre de valeurs par param et me les rentre dans mon code de traitement.

Quelqun a une idée ???

PS : je suis novice en programmation sous excel (vba je supose !!)

merci

6 réponses

mihaesti Messages postés 17 Date d'inscription jeudi 15 avril 2004 Statut Membre Dernière intervention 1 juin 2004
1 juin 2004 à 10:12
petite precision :
entre les differents param, le separateur est une parenthese ")". Donc lorsque je rencontre une parenthese, je sais qu'un nouveau param va commencer avec differentes valeurs.
0
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
1 juin 2004 à 11:23
Bonjour,

je ne sais pas si j'ai bien compris ce dont tu as besoin, mais j'ai essayé de te coder un petit truc qui j'espère t'aiguillera un peu.

J'ai donc considéré que ta colonne était de la façon suivante :
)parametre 1
valeur 1
valeur 2
valeur 3
...
valeur 42
)parametre 2
valeur 1
...

et donc j'ai fait ce petit code en créant un type Polymere composé d'un champ String pour le parametre d'un tableau de String pour les valeurs :

Public Type Polymere
parametre As String
valeurs(41) As String
End Type

Sub tableauPolymere()

Dim tableau() As Polymere
Dim p As Polymere
Dim cpt, nbP As Integer

cpt = 0
nbP = 0

Set cellule = Range("A1")

While Not IsEmpty(cellule)
    If Mid(cellule, 1, 1) = ")" Then
        If nbP = 0 Then
            ReDim tableau(0)
        Else
            ReDim Preserve tableau(UBound(tableau) + 1)
        End If
        tableau(UBound(tableau)).parametre = Replace(cellule, ")", "")
        cpt = 0
        nbP = nbP + 1
    Else
        tableau(UBound(tableau)).valeurs(cpt) = cellule
        cpt = cpt + 1
    End If
Set cellule = cellule.Offset(1, 0)
Wend

For i = 0 To UBound(tableau)
    MsgBox UBound(tableau(0).valeurs)
    For j = 0 To UBound(tableau(i).valeurs)
        MsgBox "Polymere" & vbCrLf & "Parametre : " & tableau(i).parametre & vbCrLf & "Valeur : " & tableau(i).valeurs(j)
    Next j
Next i

End Sub


En espérant que ça te servira à qqchose :)

Fanny
0
mihaesti Messages postés 17 Date d'inscription jeudi 15 avril 2004 Statut Membre Dernière intervention 1 juin 2004
1 juin 2004 à 12:33
AHHHHHH :big)
Merci beaucoup, tu as tres bien compris le probleme.
Mais reste un petit point : je suis novice en vba et tu n'a mis aucune explication : par ex quesque fait la fonction UBound ou que veut dire la ligne Set cellule = cellule.Offset(1, 0).
Il ne faudrait pas grand chose, juste 2, 3 ligne d'explications.
Mais sinon c'est parfait .... :)

Ah oui, encore une petite question : si apres le calcul auto du nombre de param et de valeurs, je voulai un promt qui m'indique les valeurs trouvées en guise de verification et qui me propose de mettre "ok" ou "recommencer" commen dois je faire ????

Encore 1000 mercis
Andrei
0
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
1 juin 2004 à 13:25
Oups c'est vrai ... je n'ai mis aucune explication ... désolée.
D'habitude je le fais, mais comme je me suis dépéchée de te coder ce petit truc, j'ai oublié de commenter.

Petits commentaires :) :
UBound
Renvoie le nombre max d'entrées du tableau.

Set cellule = cellule.Offset(1,0)
Similaire aux lignes suivantes :
Dim cellule As Range
cellule = Range("A1")
'on boucle jusqu'à la dernière cellule vide
While Not IsEmpty(cellule)
cellule = cellule.Offset(1,0)
Wend
C'est à dire que le Set permet de garder une cellule en mémoire.
Le Offset(1,0) permet de descendre d'une cellule par rapport à la cellule qui préfixe la méthode.

Pour voir la signification d'une méthode ou d'un élément dans VBA, mets toi dessus avec ton curseur et fais F1.

Par contre, j'avais cru comprendre que le nombre de valeurs était toujours de 42, mais d'après ce que tu as écrit, je ne suis pas sûre, donc voici le code au cas où le nombre de valeurs serait variable :
Public Type Polymere
'déclaration d'un nouveau type Polymere
parametre As String
valeurs() As String
nbValeurs As Integer
End Type

Sub tableauPolymere()

Dim tableau() As Polymere
Dim cpt, nbP As Integer
Dim reponse, message As String

remplirTableau:

'initialisation des compteurs
cpt = 0
nbP = 0

Set cellule = Range("A1")

'on boucle sur la colonne A, jusqu'à la première cellule vide
While Not IsEmpty(cellule)
    'si le premier caractère de la cellule est ) alors
    'on redimensionne le tableau
    If Mid(cellule, 1, 1) = ")" Then
        If nbP = 0 Then
            ReDim tableau(0)
        Else
            ReDim Preserve tableau(UBound(tableau) + 1)
        End If
        'on insère le parametre
        tableau(UBound(tableau)).parametre = Replace(cellule, ")", "")
        cpt = 0
        nbP = nbP + 1
    'sinon, on redimensionne le tableau pour les valeurs
    'et on ajoute la valeur
    Else
        ReDim Preserve tableau(UBound(tableau)).valeurs(cpt)
        tableau(UBound(tableau)).valeurs(cpt) = cellule
        tableau(UBound(tableau)).nbValeurs = cpt + 1
        cpt = cpt + 1
    End If
'on descend d'une cellule
Set cellule = cellule.Offset(1, 0)
Wend

'on prépare le message à écrire
message = "Voici les résultats : "
'on boucle sur les paramètres et on affiche pour chacun le nombre de valeurs
For i = 0 To UBound(tableau)
    message = message & vbCrLf & tableau(i).parametre & ", nombre de valeurs : " & tableau(i).nbValeurs
Next i
message = message & vbCrLf & vbCrLf & "Voulez-vous les recommencer ?"

'on affiche le message et on récupère la valeur dans la variable reponse
reponse = MsgBox(message, vbYesNo)
'si l'utilisateur clique sur oui, on retourne à remplirTableau
If reponse = vbYes Then GoTo remplirTableau

'on boucle sur tout les éléments du tableau et on affiche
'For i = 0 To UBound(tableau)
'    MsgBox "Polymere : " & tableau(i).parametre & ", nombre de valeurs : " & tableau(i).nbValeurs
'    For j = 0 To UBound(tableau(i).valeurs)
'        MsgBox "Polymere" & vbCrLf & "Parametre : " & tableau(i).parametre & vbCrLf & "Valeur : " & tableau(i).valeurs(j)
'    Next j
'Next i

End Sub



Mais là, je t'ai mis un prompt OK ou recommencer, mais ça ne fera pas ce que tu veux. Car si tu cliques sur recommencer, alors ça ne changera rien car il refera le traitement mais sur les mêmes données (aucune cellule n'aura été modifiée entre temps).

Voilà, j'espère que c'est un peu plus clair :)

Fanny
0

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

Posez votre question
mihaesti Messages postés 17 Date d'inscription jeudi 15 avril 2004 Statut Membre Dernière intervention 1 juin 2004
1 juin 2004 à 13:40
:big) :big)
il faudra vraiment que je t'offre un verre pour te remercier de ta très bonne aide :) . Si tu habite dans le sud, j'ai du pastis :)

Encore merci
Andrei
0
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
1 juin 2004 à 13:57
De rien pour l'aide, c'est normal ;) . Au moins je sers à quelque chose :big) .

J'aurais volontiers accepté un petit verre (sans alcool pour moi ... quoique), mais Yvelines - Sud ... ça fait loin ;) .

Allez bon courage et n'hésite pas si tu as besoin d'explications ou d'aide :) .

Fanny
0
Rejoignez-nous