Error dans le code

Bonjour,

Quelqu'un aura une idée pourquoi cette boucle ne marche pas ?

Merci

Sub test1()

Dim NombreLigne As Integer

Sheets("Composite").Select

NombreLigne = 602

a = 2

c = 1

For i = 2 To NombreLigne

For b = 3 To 176

If Cells(i, b) = "XX" Then

Sheets("XX").Cells(a, c).Value = Sheets("Composite").Cells(i, b).Value

End If

Next

b = b + 4

c = c + 3

Next

End Sub

Bonsoir,

à voir le code on comprend qu'il ne peut pas fonctionner, par contre impossible de déterminer ce que tu cherches à faire. Mets-nous un fichier exemple de ce que tu as, de ce que tu veux et les règles à respecter pour passer de l'un à l'autre.

Bonsoir,

à voir le code on comprend qu'il ne peut pas fonctionner, par contre impossible de déterminer ce que tu cherches à faire. Mets-nous un fichier exemple de ce que tu as, de ce que tu veux et les règles à respecter pour passer de l'un à l'autre.

Bonsoir,

Voici un exemple le but c'est de copier/coller avec conditions pour chaque table Pour A et la valeur en face dans la feuille nommé A et B et la valeur en face dans la feuille nommé B et C et la valeur en face dans la feuille nommé C et W et la valeur en face dans la feuille nommé W.sachant que la vrai table de donnee est 200 plus grande donc 200 periode.

7classeur1.xlsm (16.44 Ko)

j'ai essaye une boucle mais ca ne marche pas.

Merci

Bonjour,

Quelqu'un aura une idée pourquoi cette boucle ne marche pas ?

Désolé, mais cette boucle fonctionne.

Celle du fichier, c'est autre chose.

ric

Bonjour,

Quelqu'un aura une idée pourquoi cette boucle ne marche pas ?

Désolé, mais cette boucle fonctionne.

Celle du fichier, c'est autre chose.

ric

Le resultat que j'obtient ne corresponds pas a ce que je cherche vous avez essaye de votre cote ?

Bonjour themindhaze, le forum,

la sub de ton énoncé peut se réduire à ceci :

Option Explicit

Sub test1()
  Dim c%, i%, b As Byte: c = 1: Worksheets("Composite").Select
  For i = 2 To 602
    For b = 3 To 176
      If Cells(i, b) = "XX" Then Worksheets("XX").Cells(2, c) = "XX"
    Next b
    c = c + 3
  Next i
End Sub

remarques :

1) j'ai enlevé la variable NombreLigne et mis le nombre 602 directement dans l'instruction For b = 3 To 176

2) la variable a est utilisée seulement pour Sheets("XX").Cells(a, c).Value ; j'ai simplifié ainsi :

Worksheets("XX").Cells(2, c)

3) j'ai déclaré ces 3 variables : c ; i ; b (en mettant le type adéquat) ; Dim i% est la même chose que Dim i As Integer

4) le 1er Next est en fait Next b ; le 2ème Next est en fait Next i (ça accélère le code d'indiquer explicitement la variable du For)


5) comme il y a Sheets("Composite").Select : la feuille active est bien "Composite", n'est-ce pas ? donc pour le test If ça signifie que Cells(i, b) (sans référence de feuille explicite) est une cellule de la feuille active, donc de la feuille "Composite" ; exact ? alors de la même façon, Sheets("Composite").Cells(i, b).Value peut devenir simplement : Cells(i, b) ; de plus, suite au test réussi sur "XX", c'est donc forcément "XX" ; d'où ceci : Then Worksheets("XX").Cells(2, c) = "XX"


6) oh ! mais il manque b = b + 4 ! comment ça se fait ? alors attention, lis attentivement ce qui va suivre :

* dans le code initial, b est incrémenté de 4 ; ok, et ensuite ?

* c est incrémenté de 3 ; et note bien que b n'est pas utilisé

* on tombe sur le 2ème Next (celui du i) ; donc i est incrémenté et ça remonte à la ligne d'instruction qui suit le For i

* et là qu'est-ce qu'on trouve ? For b = 3 To 176b est initialisé à 3 ➯ l'incrémentation de b de 4 a servi à rien !

dhany

Salut Themindhaze,

salut l'équipe,

quelque chose comme ça?

Un double-clic en 'Fort' démarre la macro...

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Cancel = True
Application.ScreenUpdating = False
'
For x = 1 To Sheets.Count
    If Sheets(x).Name <> "Fort" Then Sheets(x).Cells.ClearContents
    Sheets(x).Cells.Borders.LineStyle = xlLineStyleNone
    Sheets(x).Cells.Interior.Color = xlNone
Next
Exit Sub
'
iCol = Cells(2, Columns.Count).End(xlToLeft).Column
For x = 1 To iCol Step 2
    sCol = Split(Columns(x).Address(ColumnAbsolute:=False), ":")(1)
    If Range(sCol & Rows.Count).End(xlUp).Row > 2 Then
        For y = 3 To Range(sCol & Rows.Count).End(xlUp).Row
            iOK = 0
            For Z = 1 To Sheets.Count
                If Sheets(Z).Name = CStr(Cells(y, x)) Then iOK = 1: Exit For
            Next
            If iOK = 0 Then Worksheets.Add(after:=Sheets(Sheets.Count)).Name = CStr(Cells(y, x))
            With Worksheets(CStr(Cells(y, x)))
                For k = 1 To iCol Step 2
                    sCol1 = Split(Columns(k).Address(ColumnAbsolute:=False), ":")(1)
                    If .Range(sCol1 & Rows.Count).End(xlUp).Row = 1 Then
                        .Range(sCol1 & 1).Value = "Période " & (k + 1) / 2
                        .Range(sCol1 & 1).Resize(1, 2).MergeCells = True
                        .Range(sCol1 & 2).Value = "Nom"
                        .Range(sCol1 & 2).Offset(0, 1).Value = "donne"
                    End If
                Next
                .Range(sCol & .Range(sCol & Rows.Count).End(xlUp).Row + 1).Resize(1, 2).Value = Range(sCol & y).Resize(1, 2).Value
            End With
        Next
    End If
Next
'
For x = 1 To Sheets.Count
    With Sheets(x)
        iRow = .UsedRange.Rows.Count
        iCol = .UsedRange.Columns.Count
        .Cells.HorizontalAlignment = xlCenter
        .UsedRange.Borders.LineStyle = xlContinuous
        .UsedRange.BorderAround Weight:=xlMedium
        .Range("A1").Resize(1, iCol).Interior.Color = RGB(195, 195, 195)
        .Range("A2").Resize(1, iCol).Interior.Color = RGB(215, 215, 215)
    End With
Next
If Sheets.Count > 2 Then
    For x = 2 To Sheets.Count
        For y = 3 To Sheets.Count
            If Sheets(y).Name < Sheets(y - 1).Name Then Sheets(y).Move before:=Sheets(y - 1)
        Next
    Next
End If
'
Application.ScreenUpdating = True
'
End Sub

A+

6themindhaze.xlsm (26.10 Ko)

Salut Themindhaze,

salut l'équipe,

quelque chose comme ça?

Un double-clic en 'Fort' démarre la macro...

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Cancel = True
Application.ScreenUpdating = False
'
For x = 1 To Sheets.Count
    If Sheets(x).Name <> "Fort" Then Sheets(x).Cells.ClearContents
    Sheets(x).Cells.Borders.LineStyle = xlLineStyleNone
    Sheets(x).Cells.Interior.Color = xlNone
Next
Exit Sub
'
iCol = Cells(2, Columns.Count).End(xlToLeft).Column
For x = 1 To iCol Step 2
    sCol = Split(Columns(x).Address(ColumnAbsolute:=False), ":")(1)
    If Range(sCol & Rows.Count).End(xlUp).Row > 2 Then
        For y = 3 To Range(sCol & Rows.Count).End(xlUp).Row
            iOK = 0
            For Z = 1 To Sheets.Count
                If Sheets(Z).Name = CStr(Cells(y, x)) Then iOK = 1: Exit For
            Next
            If iOK = 0 Then Worksheets.Add(after:=Sheets(Sheets.Count)).Name = CStr(Cells(y, x))
            With Worksheets(CStr(Cells(y, x)))
                For k = 1 To iCol Step 2
                    sCol1 = Split(Columns(k).Address(ColumnAbsolute:=False), ":")(1)
                    If .Range(sCol1 & Rows.Count).End(xlUp).Row = 1 Then
                        .Range(sCol1 & 1).Value = "Période " & (k + 1) / 2
                        .Range(sCol1 & 1).Resize(1, 2).MergeCells = True
                        .Range(sCol1 & 2).Value = "Nom"
                        .Range(sCol1 & 2).Offset(0, 1).Value = "donne"
                    End If
                Next
                .Range(sCol & .Range(sCol & Rows.Count).End(xlUp).Row + 1).Resize(1, 2).Value = Range(sCol & y).Resize(1, 2).Value
            End With
        Next
    End If
Next
'
For x = 1 To Sheets.Count
    With Sheets(x)
        iRow = .UsedRange.Rows.Count
        iCol = .UsedRange.Columns.Count
        .Cells.HorizontalAlignment = xlCenter
        .UsedRange.Borders.LineStyle = xlContinuous
        .UsedRange.BorderAround Weight:=xlMedium
        .Range("A1").Resize(1, iCol).Interior.Color = RGB(195, 195, 195)
        .Range("A2").Resize(1, iCol).Interior.Color = RGB(215, 215, 215)
    End With
Next
If Sheets.Count > 2 Then
    For x = 2 To Sheets.Count
        For y = 3 To Sheets.Count
            If Sheets(y).Name < Sheets(y - 1).Name Then Sheets(y).Move before:=Sheets(y - 1)
        Next
    Next
End If
'
Application.ScreenUpdating = True
'
End Sub

A+

Merci beaucoup cela marche mais je vous envoie une version qui corresponds a mon fichier le but c'est de copier/coller par sector pareil dans le fichier avant sauf que cette fois il faut pas du tous prendre le secteur que les colomuns avec Date, Nom et Pays ?

Vous auriez une idée ? Merci

0classeur2.xlsx (23.50 Ko)
Rechercher des sujets similaires à "error code"