Ma macro n'exécute pas une partie

Bonjour,

J'ai un problème avec ma macro elle n'exécute pas la partie 'Ajoute colonne pour calcul du volume' pourtant quand je regarde avec F8 il n'y pas de message d'erreur mais pourtant il ne m'affiche pas ce que je lui demande par contre quand je lance la macro dans un fichier Excel ou il y a juste une seule feuille ça fonctionne mais quand je rajoute une autre feuilles dans le fichier Excel ça ne fonctionne plus est j'ai besoin de la 2 ieme feuille évidemment

je peux pas mettre le fichier Excel car c'est un fichier qui est crée par un programme qui est SP3D

Mon code n'est pas parfait je sais me je débute en VBA

Merci

Sub VolHydroForWeight()

     stepline = 4

    Myfilexls = ActiveWorkbook.FullName
longueurnom = InStr(1, Myfilexls, ".")
 Myfile = Left(Myfilexls, longueurnom - 1)
 Mypath = ActiveWorkbook.Path
    longueurpath = Len(Mypath)
 mywin = Right(Myfilexls, (longueurnom - longueurpath + 2))

  If ActiveSheet.Name <> "Sheet2" Then Exit Sub

     Workbooks.Open Filename:="\\M5510\E_ingr\sp3d\spec\Dia-Sched.xls"

     'reponse = Application.Dialogs(xlDialogOpen).Show
        Windows(mywin).Activate

 ' affichage de toutes les lignes
    Cells.Select
    Selection.EntireRow.Hidden = False

 ' effacement des lignes dont la deuxième colonne est 'H'
    nligne = 1
    Range("A1").Select
    lignefin = Application.ActiveCell.SpecialCells(xlLastCell).Row
  Do While nligne < lignefin + 1
   Seleinit = Cells(nligne, 2).Value

   If Seleinit = "H" Then
     Rows(nligne).Select
     Selection.Delete
    lignefin = lignefin - 1
    Else
     nligne = nligne + 1
    End If
 Loop

  'Remplacement de la colonne alphanu des poids par une colonne numérique
    Columns("I:I").Select
    Selection.Copy
    Columns("K:K").Select
    ActiveSheet.Paste
    Selection.Replace What:="kg", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

  'Remise de kg dans l'entete et suppression de la colonne originale des poids
    Range("K7").Select
    ActiveCell.FormulaR1C1 = "kg"

    Columns("K:K").Select
    Application.CutCopyMode = False
    Selection.Cut
    Columns("I:I").Select
    ActiveSheet.Paste

      'Ajout de la somme totale des poids

        Cells.Select
    Range("D1").Activate
    Selection.EntireColumn.Hidden = False
    Columns("A:C").Select
    Selection.Delete Shift:=xlToLeft

    'suppression de l'entete

 '   Rows("2:7").Select
    Rows("3:7").Select
    Selection.Delete Shift:=xlUp
    Rows("3:3").Select
    Selection.Insert Shift:=xlDown
    Range("B3").Select
    ActiveCell.FormulaR1C1 = "VOLUME HYDRO"
    With ActiveCell.Characters(Start:=1, Length:=12).Font
        .Name = "Arial"
        .FontStyle = "Gras"
        .Size = 20
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With

    'Insertion d'une colonne
    Columns("B:B").Select
    Selection.Insert Shift:=xlToRight

   ' Suppresion du mm dans la colonne longueur
    pos = "E" & stepline
    Range(pos).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Replace What:="mm", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

    'Recalcul du nombre de ligne

    pos = "C" & 1
    Range(pos).Select
    Selection.End(xlDown).Select
    lastline = ActiveCell.Row

     'Traitement des lignes ou la longueur est inférieure à 5 mm
    ' et arrondi de la valeur au 100 mm supérieur

    nligne = 4
    Range("A1").Select
  Do While nligne < lastline + 1
   longmm = Cells(nligne, 5).Value

   If longmm < 5 Then
    Rows(nligne & ":" & nligne).Select
    Selection.Delete Shift:=xlUp
    lastline = lastline - 1
    Else
     nligne = nligne + 1
    End If
   Loop
        'selection de la zone  à traiter
    rangetraite = stepline & ":" & lastline
    Rows(rangetraite).Select

    'Tri sur la colonne C (code article complet)
    pos = "C" & stepline
    Selection.Sort Key1:=Range(pos), Order1:=xlAscending, Header:=xlGuess, _
       OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
       DataOption1:=xlSortNormal

    'placement de la fonction exact en colonne B et extension surles lignes significatives
    pos = "B" & stepline
    Range(pos).Select
    ActiveCell.FormulaR1C1 = "=EXACT(RC[1],R[1]C[1])"
    Range(pos).Select
    rangetire = pos & ":B" & lastline
    If lastline > stepline Then
     Selection.AutoFill Destination:=Range(rangetire), Type:=xlFillDefault
    End If

   'positionnement sur la dernière ligne de la colonne B
    positionstart = "B" & lastline
    Range(positionstart).Select

GoTo jump
    'Recherche des doublons via le code Vrai dans la colonne B
    ' et si doublon addition des quantité et supression d'une ligne

    nrow = lastline
   Do While nrow > stepline - 1

    celvaleur = Cells(nrow, 2).Value

   If celvaleur = "Faux" Then
     nrow = nrow - 1
    Else
      val1 = Cells(nrow, "E").Value
      val2 = Cells(nrow + 1, "E").Value
      valsum = val1 + val2
      posit = "E" & nrow
      Range(posit).Select
      ActiveCell.FormulaR1C1 = valsum

      Rows(nrow + 1).Select
      Selection.Delete
      nblineefface = nblineefface + 1
      nrow = nrow - 1
    End If
 Loop

    'Effacement du contenu de la colonne B
    Columns("B:B").Select
    Selection.Clear

    'décomposition du code en code famille et code article
   nrow = stepline
   Do While nrow < lastline - nblineefface + 1
    poscel = "C" & nrow
    Range(poscel).Select
    Selection.NumberFormat = "@"   ' format text pour la celulle
    longcell = Len(ActiveCell)
    longextrait = longcell - 4
    famille = Left(ActiveCell, longextrait)
    artid = Right(ActiveCell, 4)
    ActiveCell.FormulaR1C1 = artid
    poscel = "B" & nrow
    Range(poscel).Select
    ActiveCell.FormulaR1C1 = famille
    nrow = nrow + 1
   Loop

   'Mise en page
jump:
   lastline = lastline - nblineefface

   'déplacement de la colonne des diamètres après le descriptif
    Columns("A:A").Select
    Selection.Cut
    Columns("E:E").Select
    Selection.Insert Shift:=xlToRight
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 1

  'Ajoute colonne pour calcul du volume
    Range("I" & stepline).Select                                          'ajout dans dernière colonne
    ActiveCell.FormulaR1C1 = "=(LEFT(MID(RC[-6],FIND("","",RC[-6],1)+2,20),5))"
    Range("I" & stepline).Select
     If lastline > stepline Then
        Selection.AutoFill Destination:=Range("I" & stepline & ":I" & lastline), Type:=xlFillSeries
    End If
    Range("I" & stepline & ":I" & lastline).Select
    Selection.Copy
    Range("J" & stepline).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Selection.Replace What:=",", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

    Application.CutCopyMode = False
    Selection.Cut
    Range("I" & stepline).Select
    ActiveSheet.Paste
    Range("I3").Select
    ActiveCell.FormulaR1C1 = "SCH"
    Range("J" & stepline).Select
    ActiveCell.FormulaR1C1 = "=concatenate(RC[-6],(RC[-1]))"
    If lastline > stepline Then
        Selection.AutoFill Destination:=Range("J" & stepline & ":J" & lastline), Type:=xlFillSeries
    End If
    Range("K" & stepline).Select

    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],'[Dia-Sched.xls]Feuil1'!R2C3:R250C6,4,FALSE)"  'attention accepte 250 lignes dans dia-sched

    If lastline > stepline Then
        Selection.AutoFill Destination:=Range("K" & stepline & ":K" & lastline), Type:=xlFillSeries
    End If
    Range("L" & stepline).Select
    ActiveCell.FormulaR1C1 = "=RC[-1]*RC[-7]/1000000000"

    If lastline > stepline Then
        Selection.AutoFill Destination:=Range("L" & stepline & ":L" & lastline), Type:=xlFillSeries
    End If

    Range("L" & lastline + 1).Select
    Columns("L:L").Select
    Selection.NumberFormat = "0.0000"

    Range("F1").Select
    Selection.Copy
    Range("G1").Select
    ActiveSheet.Paste

    Range("B:E,G:G,L:L").Select
    Range("L1").Activate
    Selection.Copy
    Sheets.Add.Name = "HYDRO"
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False

    Rows("4:4").Select
    Selection.Insert Shift:=xlDown
    Range("A4").Select
    ActiveCell.FormulaR1C1 = "Ident Code"
    Range("B4").Select
    ActiveCell.FormulaR1C1 = "Description"
    Range("C4").Select
    ActiveCell.FormulaR1C1 = "DIA"
    Range("D4").Select
    ActiveCell.FormulaR1C1 = "Length (mm)"
    Range("E4").Select
    ActiveCell.FormulaR1C1 = "Weight (kg)"
    Range("F4").Select
    ActiveCell.FormulaR1C1 = "Vol  (M³)"
    Range("G4").Select
    ActiveCell.FormulaR1C1 = "MAX LOAD  (N)"

    Range("A3").Select
    ActiveCell.FormulaR1C1 = "VOLUME HYDRO"
    With ActiveCell.Characters(Start:=1, Length:=12).Font
        .Name = "Arial"
        .FontStyle = "Gras"
        .Size = 20
    End With
    Columns("A:G").EntireColumn.AutoFit
    Rows("1:2").Select
    Selection.Font.Bold = True
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
    End With

    Range("A1:F2").Select
    With Selection.Interior
        .ColorIndex = 6   'couleur jaune pour titre
        .Pattern = xlSolid
    End With

 '   zonetr = "F" & lastline + 2
     Range("F" & lastline + 2).Select
    Selection.Font.Bold = True
     With Selection.Interior
        .ColorIndex = 43
        .Pattern = xlSolid
    End With

     Range("A4:G4").Select
    Selection.Font.Bold = True
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent1
        .TintAndShade = 0.4
        .PatternTintAndShade = 0
    End With
    With Selection
        .HorizontalAlignment = xlCenter
    End With

 '   Application.DisplayAlerts = False

 '    For Each sh In ThisWorkbook.Sheets

  '  If InStr(sh.Name, "SP3D") = 0 And InStr(sh.Name, "HYDRO") = 0 Then
  '      Sheets(sh.Name).Select
  '      ActiveWindow.SelectedSheets.Delete

  '  End If

'      Application.DisplayAlerts = True

'Calcul du Max Load'

    Range("G5").Select
    ActiveCell.FormulaR1C1 = "=((NUMBERVALUE(RC[-2]))*10)+(RC[-1]*10000)"
    Range("G5").Select
    Selection.AutoFill Destination:=Range("G5:G25"), Type:=xlFillDefault
    Range("G5:G25").Select
    Range("G26").Select
    ActiveCell.FormulaR1C1 = "=(SUM(R[-21]C:R[-1]C))+(SUM(R[-21]C:R[-1]C)/10)"
    Selection.NumberFormat = "0.00"

'Supprimer les lignes en E et G où il y à zéro'

Dim Lig%
Application.ScreenUpdating = 0

For Lig = [E65536].End(xlUp).Row To 5 Step -1
If Range("E" & Lig).Value = 0 Then Rows(Lig).Delete
Next

Application.ScreenUpdating = 0
For Lig = [G65536].End(xlUp).Row To 5 Step -1
If Range("G" & Lig).Value = 0 Then Rows(Lig).Delete
Next

'Copie vers Sheet1'

Dim Ligne As Long
Ligne = Worksheets("Sheet1").Cells(Rows.Count, 7).End(xlUp).Row
Sheets("HYDRO").Range("G" & Rows.Count).End(xlUp).Copy
Sheets("Sheet1").Range("K8:K" & Ligne).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False

'   Next

    Sheets("Sheet2").Select
    ActiveWindow.SelectedSheets.Delete

    On Error Resume Next
    ActiveWorbook.Save
  '  ActiveWorkbook.SaveAs Filename:=nameworkb, _
        FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
  Application.DisplayAlerts = False
   ' ActiveWorkbook.Saved = True    'Pour ne pas sauver l'original si un  fichier hydro existe déjà et que l'on n'a pas voulu le remplacer
  '  ActiveWorkbook.Close
    ActiveWorkbook.Close SaveChanges:=True
 '   Application.DisplayAlerts = False

sortie:

 '   ActiveWorkbook.Close           ' pour fermer dia-sched

norun:

 End Sub

Bonjour,

j'ai besoin de la 2 ieme feuille évidemment

à tester,

If Sheets(2).Name <> "sheet2" Then   Exit Sub  

Merci de ta réponse j'ai compris mon erreur c'est parce que comme tu as pu le remarque (ou pas) ca sert a calculer le volume mais ca fonctionne pas parce qu'à la colonne "I" il a des données qui sont en #valeur donc c'est pour ça qu'il ne calculer pas le volume il me reste plus qu'a supprimer c'est ligne ou il y a #valeur dans la colonne mais par contre je sais pas comment je pourrai code pour dire d'effacer quand il y a #Valeur mais sans effacer tout la ligne mais aussi sans remonter tout la ligne

re,

c'est difficile de te répondre sans voir le fichier Excel

bonjour

salut i20100 au passage

suggestion 1 :

mettre toutes les formules sur une seule feuille, inutile de les créer par macro

suggestion 2 :

coller les données sur une autre feuille spécialement destinée à cela

du coup tu as 2 feuilles, mais une seule avec des formules fixes, ou tu crées des TCD, GCD...

amitiés à tous

Oui je comprend voici un fichier Excel tout est explique dans l'Excel de ce que je veux obtenir je vais tout de même explique ici encore une fois ce que je veux c'est d'effacer ou il y a un zéro dans la plage de "I5:L10" effacer la ligne mais juste dans la plage pas ce qui est en dehors de la plage .

Merci

6classeur1.xlsm (28.85 Ko)

re

j'ai mis sous forme de Tableau ou Liste

puis un TCD, avec filtre "sur les valeurs" "différent de 0"

pas de VBA

amitiés

re

j'ai mis sous forme de Tableau ou Liste

puis un TCD, avec filtre "sur les valeurs" "différent de 0"

pas de VBA

amitiés

si je fais en vba c'est parce que mon programme qui importe les données ne prend en compte que le vba

si je fais en vba c'est parce que mon programme qui importe les données ne prend en compte que le vba

quel est ton "programme qui importe et qui ne "prend en compte que VBA" ?

note : si tu veux "importer" des données dans Excel, provenant de fichiers divers (dont Excel ! ) il FAUT utiliser Power Query

https://www.youtube.com/watch?v=gwW2CDdvUUs

il est intégré aux versions actuelles d'Excel

il permet de pré-traiter les données lors de l'import

VBA est inutile

amitiés

C'est Smart 3D est c'est le programme lui même qui crée le fichier excel donc c'est pas possible d'utiliser le power query

C'est Smart 3D est c'est le programme lui même qui crée le fichier excel donc c'est pas possible d'utiliser le power query

mais si

PQuery lit toutes sortes de fichiers, dont les fichiers Excel

il FAUT apprendre un minimum de PQUery, c'est l'avenir d'Excel en particulier

essaye !

https://www.youtube.com/watch?v=gwW2CDdvUUs

amitiés

C'est Smart 3D est c'est le programme lui même qui crée le fichier excel donc c'est pas possible d'utiliser le power query

mais si

PQuery lit toutes sortes de fichiers, dont les fichiers Excel

il FAUT apprendre un minimum de PQUery, c'est l'avenir d'Excel en particulier

essaye !

https://www.youtube.com/watch?v=gwW2CDdvUUs

amitiés

J'aurai bien appris mais si je résous ce problème mon fichier sera fini et j'ai un délai pour finir le fichier si je dois tout recommencer depuis le début ca va prendre du temps mais merci de m'avoir montré un nouveau programme que je vais utiliser à l'avenir alors si c'est pour éviter d'utiliser vba ça me convient

alors on va faire comme tu as commencé :

  • "importer" les données dans une feuille Import (grâce à VBA)
  • ajouter des colonnes si nécessaire, contenant des formules
  • faire un TCD comme je t'ai montré, pour trier/filtrer/faire des calculs de synthèes
  • faire des GCD si tu veux

possible ?

Je vais essayer de filtre et de récupérer le code avec l'enregistrement macro

Bonjour Muntjact , jmd,

une début de piste,

pour la fonction Recherche,

=IFERROR(VLOOKUP(J7,'P:\sp3d\spec\[Dia-Sched.xls]Feuil1'!$C$2:$F$250,4,FALSE),0)

il faut chercher la valeur "3 inS-160 " sur un autre fichier ?

3muntjact-test.xlsm (30.66 Ko)
Sub Test()
Dim rw As Long, i As Long, v
With Sheets("test")
    rw = .Cells(Rows.Count, 2).End(xlUp).Row
    For i = 5 To rw
        If Not Application.CountIf(.Range("B" & i & ":E" & i), 0) > 0 Then
             v = Split(.Range("B" & i), ",")
            .Range("O" & i) = v(1)
            .Range("P" & i) = .Range("C" & i) & v(1)
            .Range("Q" & i) = x 'reste à déterminer la fonction de recherche
            .Range("R" & i) = x 'reste à déterminer la fonction de recherche
        End If
    Next
End With
End Sub

Oui c'est bien ça permet de recherche une valeur dans un fichier pour mon calcul

Je comprends pas pourquoi le code m'effacer que les cellules dans les lignes 6,7,8 dans la colonne k,L sûrement mal compris comment il valait déterminer la fonction de recherche

re,

à tester,

Sub Test()
Dim rw As Long, i As Long, v
With Sheets("test")
    rw = .Cells(Rows.Count, 2).End(xlUp).Row
    For i = 5 To rw
    n = Application.CountIf(.Range("B" & i & ":E" & i), 0)
        If Not Application.CountIf(.Range("B" & i & ":E" & i), 0) > 0 Then
             v = Split(.Range("B" & i), ",")
            .Range("O" & i) = v(1)
            .Range("P" & i) = .Range("C" & i) & v(1)

            wk = Workbooks("Dia-Sched.xls").Name
            m = "" & Range("P" & i)
            t = "VLOOKUP(""" & m & """,'[" & wk & "]Feuil1'!$C$2:$F$250,4,FALSE)"
            r = Evaluate(t)

            If IsError(r) Then
                .Range("Q" & i) = "non trouvé"
            Else
                .Range("Q" & i) = r
                .Range("R" & i) = (r * .Range("D" & i)) / 1000000000
            End If
        End If
    Next
End With
End Sub

J'ai un message d'erreur qui dit que " L'indice n'appartient pas à la sélection " à cette ligne ci

 wk = Workbooks("Dia-Sched.xls").Name 

re,

j'ai supposé que le fichier est ouvert,

sinon, tu pourrais ajouter une requête dans ton fichier qui irait lire ce fichier

Rechercher des sujets similaires à "macro execute pas partie"