Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Variable tableau et boucle

4 réponses
Avatar
crcam.lemans
Bonjour,

Je vous expose mon problème. J'ai créé une variable tableau. Pour chacune
des variables rencontrées, la variable est filtrée et le résultat copié dans
une feuille nommée du même nom que la variable ceci grâce à une boucle.

Le problème est que ma base de données ne comporte pas toujours toutes les
variables de mon tableau et là tout s'arrête alors que je souhaiterais que
la boucle continue même si une ou plusieurs variables n'existent pas dans la
base de données.

Merci d'avance pour votre aide.

Ci-dessous le texte que j'ai utilisé.

Dim tabl(13) As Variant
tabl(0) = "721040"
tabl(1) = "721035"
tabl(2) = "721030"
tabl(3) = "721020"
tabl(4) = "721019"
tabl(5) = "721016"
tabl(6) = "721013"
tabl(7) = "721011"
tabl(8) = "721005"
tabl(9) = "721004"
tabl(10) = "721003"
tabl(11) = "721002"
tabl(12) = "721001"
Dim i As Integer
i = 0


Dim macell As Range
Dim resugm As Range
Dim donugm As Range
Dim nomugm As Range



Selection.CurrentRegion.Select
base = Selection.Address

Rem tri des données par ordre décroissant des UGM (important +++)

Selection.CurrentRegion.Select
Selection.Sort Key1:=Range("A18"), Order1:=xlDescending,
Header:=xlGuess


Rem début de la boucle

For Each macell In Worksheets("resultats").Range(base)
If macell.Text = tabl(i) Then
Worksheets("resultats").Range("A18").AutoFilter Field:=1,
Criteria1:=tabl(i)
Sheets.Add.Name = tabl(i)
Set resugm = Sheets(tabl(i)).Range("A1")
Set donugm = Worksheets("resultats").AutoFilter.Range
donugm.Copy resugm
Call miseenformeugm
i = i + 1
If (i > 13) Then
Exit Sub
End If
End If

Next macell

4 réponses

Avatar
Papyjac
Bonjour crcam.lemans


J'espère que le bilan comptable de la banque n'est pas basé la dessus...
plus sérieusement le problème est que tu devrais faire 2 boucles tout
simplement :

For Each macell In Worksheets("resultats").Range(base)
for I = 0 To 12
If macell.Text = tabl(i) Then
Worksheets("resultats").Range("A18").AutoFilter Field:=1,
Criteria1:=tabl(i)
Sheets.Add.Name = tabl(i)
Set resugm = Sheets(tabl(i)).Range("A1")
Set donugm = Worksheets("resultats").AutoFilter.Range
donugm.Copy resugm
Call miseenformeugm

End If

Next macell
--
Papyjac


"crcam.lemans" a écrit :

Bonjour,

Je vous expose mon problème. J'ai créé une variable tableau. Pour chacune
des variables rencontrées, la variable est filtrée et le résultat copié dans
une feuille nommée du même nom que la variable ceci grâce à une boucle.

Le problème est que ma base de données ne comporte pas toujours toutes les
variables de mon tableau et là tout s'arrête alors que je souhaiterais que
la boucle continue même si une ou plusieurs variables n'existent pas dans la
base de données.

Merci d'avance pour votre aide.

Ci-dessous le texte que j'ai utilisé.

Dim tabl(13) As Variant
tabl(0) = "721040"
tabl(1) = "721035"
tabl(2) = "721030"
tabl(3) = "721020"
tabl(4) = "721019"
tabl(5) = "721016"
tabl(6) = "721013"
tabl(7) = "721011"
tabl(8) = "721005"
tabl(9) = "721004"
tabl(10) = "721003"
tabl(11) = "721002"
tabl(12) = "721001"
Dim i As Integer
i = 0


Dim macell As Range
Dim resugm As Range
Dim donugm As Range
Dim nomugm As Range



Selection.CurrentRegion.Select
base = Selection.Address

Rem tri des données par ordre décroissant des UGM (important +++)

Selection.CurrentRegion.Select
Selection.Sort Key1:=Range("A18"), Order1:=xlDescending,
Header:=xlGuess


Rem début de la boucle

For Each macell In Worksheets("resultats").Range(base)
If macell.Text = tabl(i) Then
Worksheets("resultats").Range("A18").AutoFilter Field:=1,
Criteria1:=tabl(i)
Sheets.Add.Name = tabl(i)
Set resugm = Sheets(tabl(i)).Range("A1")
Set donugm = Worksheets("resultats").AutoFilter.Range
donugm.Copy resugm
Call miseenformeugm
i = i + 1
If (i > 13) Then
Exit Sub
End If
End If

Next macell





Avatar
Papyjac
Bonjour Cracam.lemans

Nous avons été coupé, je reprends

Il faut faire 2 boucles tout simplement et éventuellement sortir un message
si tu ne trouve pas dans le tableau


For Each macell In Worksheets("resultats").Range(base)
for i = 0 to 12
If macell.Text = tabl(i) Then
Worksheets("resultats").Range("A18").AutoFilter Field:=1,
Criteria1:=tabl(i)
Sheets.Add.Name = tabl(i)
Set resugm = Sheets(tabl(i)).Range("A1")
Set donugm = Worksheets("resultats").AutoFilter.Range
donugm.Copy resugm
Call miseenformeugm
End If
next i
Next macell


--
Papyjac


"crcam.lemans" a écrit :

Bonjour,

Je vous expose mon problème. J'ai créé une variable tableau. Pour chacune
des variables rencontrées, la variable est filtrée et le résultat copié dans
une feuille nommée du même nom que la variable ceci grâce à une boucle.

Le problème est que ma base de données ne comporte pas toujours toutes les
variables de mon tableau et là tout s'arrête alors que je souhaiterais que
la boucle continue même si une ou plusieurs variables n'existent pas dans la
base de données.

Merci d'avance pour votre aide.

Ci-dessous le texte que j'ai utilisé.

Dim tabl(13) As Variant
tabl(0) = "721040"
tabl(1) = "721035"
tabl(2) = "721030"
tabl(3) = "721020"
tabl(4) = "721019"
tabl(5) = "721016"
tabl(6) = "721013"
tabl(7) = "721011"
tabl(8) = "721005"
tabl(9) = "721004"
tabl(10) = "721003"
tabl(11) = "721002"
tabl(12) = "721001"
Dim i As Integer
i = 0


Dim macell As Range
Dim resugm As Range
Dim donugm As Range
Dim nomugm As Range



Selection.CurrentRegion.Select
base = Selection.Address

Rem tri des données par ordre décroissant des UGM (important +++)

Selection.CurrentRegion.Select
Selection.Sort Key1:=Range("A18"), Order1:=xlDescending,
Header:=xlGuess


Rem début de la boucle

For Each macell In Worksheets("resultats").Range(base)
If macell.Text = tabl(i) Then
Worksheets("resultats").Range("A18").AutoFilter Field:=1,
Criteria1:=tabl(i)
Sheets.Add.Name = tabl(i)
Set resugm = Sheets(tabl(i)).Range("A1")
Set donugm = Worksheets("resultats").AutoFilter.Range
donugm.Copy resugm
Call miseenformeugm
i = i + 1
If (i > 13) Then
Exit Sub
End If
End If

Next macell





Avatar
crcam.lemans
Bonjour Papyjac et merci.

J'avais oublié de préciser que la variable se rencontrait x fois. Ta
solution serait idéale si la variable se rencontrait une seule fois.

J'ai essayé de contourner le problème en utilisant la gestion des erreurs
mais elle marche une fois puis est désactivée.

Je fais donc appel à nouveau aux pros : comment faire pour que i passe à la
variable suivante dès qu'elle a été traité une fois ou comment réactiver la
gestion des erreurs.

Ci-dessous mon exemple :

For Each macell In Worksheets("resultats").Range(base)
For i = 0 To 12
If macell.Text = tabl(i) Then
Worksheets("resultats").Range("A18").AutoFilter Field:=1,
Criteria1:=tabl(i)
On Error GoTo ligne1
Sheets.Add.Name = tabl(i)
Set resugm = Sheets(tabl(i)).Range("A1")
Set donugm = Worksheets("resultats").AutoFilter.Range
donugm.Copy resugm
Call miseenformeugm
End If

GoTo fin


ligne1:
Application.DisplayAlerts = False
ActiveSheet.Delete
GoTo fin

fin:
Next i

Merci à tous pour votre aide.

Jocelyne

"Papyjac" a écrit dans le message de
news:
Bonjour Cracam.lemans

Nous avons été coupé, je reprends

Il faut faire 2 boucles tout simplement et éventuellement sortir un
message
si tu ne trouve pas dans le tableau


For Each macell In Worksheets("resultats").Range(base)
for i = 0 to 12
If macell.Text = tabl(i) Then
Worksheets("resultats").Range("A18").AutoFilter Field:=1,
Criteria1:=tabl(i)
Sheets.Add.Name = tabl(i)
Set resugm = Sheets(tabl(i)).Range("A1")
Set donugm = Worksheets("resultats").AutoFilter.Range
donugm.Copy resugm
Call miseenformeugm
End If
next i
Next macell


--
Papyjac


"crcam.lemans" a écrit :

Bonjour,

Je vous expose mon problème. J'ai créé une variable tableau. Pour chacune
des variables rencontrées, la variable est filtrée et le résultat copié
dans
une feuille nommée du même nom que la variable ceci grâce à une boucle.

Le problème est que ma base de données ne comporte pas toujours toutes
les
variables de mon tableau et là tout s'arrête alors que je souhaiterais
que
la boucle continue même si une ou plusieurs variables n'existent pas dans
la
base de données.

Merci d'avance pour votre aide.

Ci-dessous le texte que j'ai utilisé.

Dim tabl(13) As Variant
tabl(0) = "721040"
tabl(1) = "721035"
tabl(2) = "721030"
tabl(3) = "721020"
tabl(4) = "721019"
tabl(5) = "721016"
tabl(6) = "721013"
tabl(7) = "721011"
tabl(8) = "721005"
tabl(9) = "721004"
tabl(10) = "721003"
tabl(11) = "721002"
tabl(12) = "721001"
Dim i As Integer
i = 0


Dim macell As Range
Dim resugm As Range
Dim donugm As Range
Dim nomugm As Range



Selection.CurrentRegion.Select
base = Selection.Address

Rem tri des données par ordre décroissant des UGM (important +++)

Selection.CurrentRegion.Select
Selection.Sort Key1:=Range("A18"), Order1:=xlDescending,
Header:=xlGuess


Rem début de la boucle

For Each macell In Worksheets("resultats").Range(base)
If macell.Text = tabl(i) Then
Worksheets("resultats").Range("A18").AutoFilter Field:=1,
Criteria1:=tabl(i)
Sheets.Add.Name = tabl(i)
Set resugm = Sheets(tabl(i)).Range("A1")
Set donugm = Worksheets("resultats").AutoFilter.Range
donugm.Copy resugm
Call miseenformeugm
i = i + 1
If (i > 13) Then
Exit Sub
End If
End If

Next macell







Avatar
crcam.lemans
Je viens de trouver la solution. Il suffisait que je rajoute resume fin au
lieu de goto fin dans ma gestion des erreurs.

Merci encore.



"crcam.lemans" a écrit dans le message de news:
49350a8d$0$939$
Bonjour Papyjac et merci.

J'avais oublié de préciser que la variable se rencontrait x fois. Ta
solution serait idéale si la variable se rencontrait une seule fois.

J'ai essayé de contourner le problème en utilisant la gestion des erreurs
mais elle marche une fois puis est désactivée.

Je fais donc appel à nouveau aux pros : comment faire pour que i passe à
la variable suivante dès qu'elle a été traité une fois ou comment
réactiver la gestion des erreurs.

Ci-dessous mon exemple :

For Each macell In Worksheets("resultats").Range(base)
For i = 0 To 12
If macell.Text = tabl(i) Then
Worksheets("resultats").Range("A18").AutoFilter Field:=1,
Criteria1:=tabl(i)
On Error GoTo ligne1
Sheets.Add.Name = tabl(i)
Set resugm = Sheets(tabl(i)).Range("A1")
Set donugm = Worksheets("resultats").AutoFilter.Range
donugm.Copy resugm
Call miseenformeugm
End If

GoTo fin


ligne1:
Application.DisplayAlerts = False
ActiveSheet.Delete
GoTo fin

fin:
Next i

Merci à tous pour votre aide.

Jocelyne

"Papyjac" a écrit dans le message de
news:
Bonjour Cracam.lemans

Nous avons été coupé, je reprends

Il faut faire 2 boucles tout simplement et éventuellement sortir un
message
si tu ne trouve pas dans le tableau


For Each macell In Worksheets("resultats").Range(base)
for i = 0 to 12
If macell.Text = tabl(i) Then
Worksheets("resultats").Range("A18").AutoFilter Field:=1,
Criteria1:=tabl(i)
Sheets.Add.Name = tabl(i)
Set resugm = Sheets(tabl(i)).Range("A1")
Set donugm = Worksheets("resultats").AutoFilter.Range
donugm.Copy resugm
Call miseenformeugm
End If
next i
Next macell


--
Papyjac


"crcam.lemans" a écrit :

Bonjour,

Je vous expose mon problème. J'ai créé une variable tableau. Pour
chacune
des variables rencontrées, la variable est filtrée et le résultat copié
dans
une feuille nommée du même nom que la variable ceci grâce à une boucle.

Le problème est que ma base de données ne comporte pas toujours toutes
les
variables de mon tableau et là tout s'arrête alors que je souhaiterais
que
la boucle continue même si une ou plusieurs variables n'existent pas
dans la
base de données.

Merci d'avance pour votre aide.

Ci-dessous le texte que j'ai utilisé.

Dim tabl(13) As Variant
tabl(0) = "721040"
tabl(1) = "721035"
tabl(2) = "721030"
tabl(3) = "721020"
tabl(4) = "721019"
tabl(5) = "721016"
tabl(6) = "721013"
tabl(7) = "721011"
tabl(8) = "721005"
tabl(9) = "721004"
tabl(10) = "721003"
tabl(11) = "721002"
tabl(12) = "721001"
Dim i As Integer
i = 0


Dim macell As Range
Dim resugm As Range
Dim donugm As Range
Dim nomugm As Range



Selection.CurrentRegion.Select
base = Selection.Address

Rem tri des données par ordre décroissant des UGM (important +++)

Selection.CurrentRegion.Select
Selection.Sort Key1:=Range("A18"), Order1:=xlDescending,
Header:=xlGuess


Rem début de la boucle

For Each macell In Worksheets("resultats").Range(base)
If macell.Text = tabl(i) Then
Worksheets("resultats").Range("A18").AutoFilter Field:=1,
Criteria1:=tabl(i)
Sheets.Add.Name = tabl(i)
Set resugm = Sheets(tabl(i)).Range("A1")
Set donugm = Worksheets("resultats").AutoFilter.Range
donugm.Copy resugm
Call miseenformeugm
i = i + 1
If (i > 13) Then
Exit Sub
End If
End If

Next macell