[excel] petite routine

chacalgp -  
Bidouilleu_R Messages postés 1209 Statut Membre -
Bonjour,

Dans un document excel, les lignes successives d'une même colonne peuvent présenter ou non les dimensions d'une plaque de matière sous la forme suivante :

1500 X 1000 X 30

Je souhaiterai établir une petite routine permettant de calculer le volume de ces plaques lorsque le format dans la ligne est similaire à celui là.

En français :

Pour i 1:100

Si cells(i,A) contient "X" alors

cells(i,B) doit prendre la valeur 1500
cells(i,C) doit prendre la valeur 1000
cells(i,D) doit prendre la valeur 30

cells(i,E) = cells(i,B) x cells(i,C) x cells(i,D)

next i

Pouvez-vous m'aider à mettre cela en place ?

merci d'avance
Configuration: Windows XP
Internet Explorer 7.0

9 réponses

  1. xav3601 Messages postés 3390 Statut Membre 312
     
    Bonjour,

    Voila une petite macro qui devrait te permettre de faire ca:

    'selection de la feuille de travail
    Sheets(Feuil1.Name).Select
    With Sheets(Feuil1.Name)

    introw = 2
    'boulce tant que cellule non vide
    Do Until ActiveSheet.Cells(introw, 1).Value = ""
    'test contenu case
    If ActiveSheet.Cells(introw, 1).Value = X Then
    ActiveSheet.Cells(introw, 2).Value = "1500"
    ActiveSheet.Cells(introw, 3).Value = "1000"
    ActiveSheet.Cells(introw, 4).Value = "30"
    ActiveSheet.Cells(introw, 5).Value =ActiveSheet.Cells(introw, 2).Value * ActiveSheet.Cells(introw, 3).Value * ActiveSheet.Cells(introw, 4).Value
    End If
    introw = introw + 1
    Loop
    0
  2. chacalgp
     
    Merci de ta réponse rapide;

    Je la teste de suite.

    Ceci étant, les valeurs de ma cellule que j'ai cité (1500, 1000 et 30) sont arbitraires...

    ++
    0
  3. chacalgp
     
    pour faire simple, les lignes successives sont de ce type :

    1500 X 1000 X 30
    500 X 200 X 10
    1500 X 500 X 20
    plaque ep10
    tube PHI50
    500 X 500 X 15

    Je veux donc avoir un résultat du type :

    1500 1000 30 4.5E7
    500 200 10 1E6
    1500 500 20 1.5E7
    "VIDE"
    "VIDE"
    500 500 15 3.75E6
    0
  4. xav3601 Messages postés 3390 Statut Membre 312
     
    Je pense que pour ton cas il faudrais mettre la longueur la largeur et la profondeur dans 3 colonne differentes...
    sinon ca devient difficile et fastidieu de recuperer chaque nombre un a un...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. chacalgp
     
    D'accord avec toi xavier;

    Ceci étant, je travaille à partir d'un fichier excel récupéré de plus de 1000 lignes qui contient toutes les données déjà à ce format...

    Donc c'est mort pour recopier dans 3 cellules différentes ces 3 données...
    0
  7. xav3601 Messages postés 3390 Statut Membre 312
     
    Alors a ce moment la pr recuperer les infos separer dans chaque cellule pour faire le calcul a mon avis...
    il faut utiliser successivement la fonction InStr InStrRev pui Mid :/
    InStr(activesheet.Cells(...)," ") qui te renvoi la position du premier espace
    InStrRev(activesheet.Cells(...)," ") qui te renvoi la position du dernier espace
    et ensuite un Mid qui te permet de couper ta chaine de caracter mais ca parait complexe quand meme...
    sinon je vois pas comment faire desole!
    0
  8. chacal gp
     
    Quelqu'un vient de me suggérer d'utiliser simplement ces 2 fonctions :

    CHERCHE pour indexer la position des "X"

    STXT pour recopier la chaîne de caractère indéxé part les valeurs précédentes

    c'est simple et ça marche niquel;

    ++
    0
  9. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    voilà ta routine toute faite
    j'ai supposé qu'il y avait une ligne de titre et que ta feuille s'appelle "feuil1"
    j'ai écrit une formule en colonne D mais situ préfères un calcul direct c'est possible.
    recopie cette procédure dans un module
    Les Lignes qui ne contiennent pas de "X" ne sont pas traitées.

    Sub calcul_du_volume()

    ' on travaille sur la feuil n°1 qui s'appelle "feuil1"
    ' je suppose qu'il y a un ligne de titre
    ' je commence en "A2"
    Dim NbLigne As Integer
    Dim C As Variant
    Dim Chaine1 As String
    Dim Chaine2 As String
    Dim Chaine3 As String

    Sheets("feuil1").Select
    Range("A2").Select
    'je compte le nombre de ligne
    NbLigne = Range("a2").CurrentRegion.Rows.Count

    For Each C In Range("a2:a" & NbLigne + 1)

    If InStr(1, C, "X") > 0 Then
    Chaine1 = Left(C, InStr(1, C, "X") - 1)
    Chaine2 = Mid(C, InStr(1, C, "X") + 1, InStr(InStr(1, C, "X"), C, "X"))
    Chaine3 = Right(C, Len(C) - (Len(Chaine1) + Len(Chaine2) + 2))

    Else
    'ne contient pas le charactère "X"
    End If

    'on supprime les espaces
    Chaine1 = Trim(Chaine1)
    Chaine2 = Trim(Chaine2)
    Chaine3 = Trim(Chaine3)
    'on écrit le résultat en valeur
    C.Offset(0, 1).Value = Val(Chaine1) ' en colonne b
    C.Offset(0, 2).Value = Val(Chaine2) 'en colonne c
    C.Offset(0, 3).Value = Val(Chaine3)
    'on écrit une formule de calcul

    C.Offset(0, 4).FormulaR1C1 = "=RC[-3]*RC[-2]*RC[-1]"

    Next

    End Sub
    0
  10. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    j'ai ajouté la gestion pour obtenir "VIDE"
    je n'avais pas lu toute ta demande désolé
    pour le format tu fais click sur format cellule nombre et tu choisis ce qui te convient.

    Sub calcul_du_volume()

    ' on travaille sur la feuil n°1 qui s'appelle "feuil1"
    ' je suppose qu'il y a un ligne de titre
    ' je commence en "A2"
    Dim NbLigne As Integer
    Dim C As Variant
    Dim Chaine1 As String
    Dim Chaine2 As String
    Dim Chaine3 As String

    Sheets("feuil1").Select
    Range("A2").Select
    'je compte le nombre de ligne
    NbLigne = Range("a2").CurrentRegion.Rows.Count

    For Each C In Range("a2:a" & NbLigne + 1)

    If InStr(1, C, "X") > 0 Then
    Chaine1 = Left(C, InStr(1, C, "X") - 1)
    Chaine2 = Mid(C, InStr(1, C, "X") + 1, InStr(InStr(1, C, "X"), C, "X"))
    Chaine3 = Right(C, Len(C) - (Len(Chaine1) + Len(Chaine2) + 2))

    Else
    'ne contient pas le charactère "X"
    C.Offset(0, 4).Value = "VIDE"
    End If

    'on supprime les espaces
    Chaine1 = Trim(Chaine1)
    Chaine2 = Trim(Chaine2)
    Chaine3 = Trim(Chaine3)
    'on écrit le résultat en valeur
    C.Offset(0, 1).Value = Val(Chaine1) ' en colonne b
    C.Offset(0, 2).Value = Val(Chaine2) 'en colonne c
    C.Offset(0, 3).Value = Val(Chaine3)
    'on écrit une formule de calcul

    C.Offset(0, 4).FormulaR1C1 = "=RC[-3]*RC[-2]*RC[-1]"

    Next

    End Sub
    0