Erreur dans une boucle en VBA
Résolu
goomis95
Messages postés
39
Date d'inscription
Statut
Membre
Dernière intervention
-
goomis95 Messages postés 39 Date d'inscription Statut Membre Dernière intervention -
goomis95 Messages postés 39 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
ayant l'idée de simplifier mon code même si il sera plus brut ( simplification dans le nombre de feuille utilisée ) j'ai créer un script mais il ne fonctionne pas du tonnerre puisque que mon code marche normalement sauf la premiere boucle que j'ai incorporé au script que j'essaie de modifier.
Je surligne en gras ou se situe l'erreur : je vous transmet le code ( attention il est plutot grand ).
Sub Sordi()
Dim valeur
Dim comparaison As Byte
Dim tablo
Dim ligne As Byte, compteur_y As Byte, compteur_x As Byte
Dim a, b, c, d As Integer
Dim tableau()
'Ici je met dans la feuille recherche les valeur que je souhaite de la feuille ordi pour ensuite faire une recherche sur la feuille recherche. Ainsi je n'ai pas la necessiter d'avoir un double permanent ( copie_ordi ) contenant simplement les données que je souhaites de la feuille ordi pour mes recherche ce qui rend le document beaucoup plus leger.
Sheets("ordi").Select
b = ActiveSheet.Range("A65356").End(xlUp).Row
For a = 0 To b
Sheets("ordi").Select
tableau(0) = Range("A" & a).Value
tableau(1) = Range("B" & a).Value
tableau(2) = Range("C" & a).Value
tableau(3) = Range("D" & a).Value
tableau(4) = Range("F" & a).Value
tableau(5) = Range("G" & a).Value
tableau(6) = Range("H" & a).Value
tableau(7) = Range("J" & a).Value
tableau(8) = Range("K" & a).Value
tableau(9) = Range("L" & a).Value
'Apparement il ne veut pas de mon Range("A" & a).Value alors qu'il fonctionne tres bien dans d'autre circonstance et le reste du code fonctionne a merveille
Sheets("recherche").Select
d = ActiveSheet.Range("A65356").End(xlUp).Row + 1
For c = 0 To 9
ActiveSheet.Cells(d, (c + 1)) = tableau(c)
Next
Next
sheets("requete de vue").select
valeur = Range("case_user")
If IsEmpty(valeur) Then
MsgBox "Veuillez choisir le nom de la personne ( 1ère lettre du prénom suivi du nom de famille ) pour que la requête fonctionne", vbCritical
Exit Sub
End If
With Sheets("recherche")
comparaison = Application.CountIf(.Columns(1), valeur)
ReDim tablo(comparaison - 1, colonne_user - 1)
ligne = 1
For compteur_y = 0 To UBound(tablo)
ligne = .Columns(1).Find(valeur, .Cells(ligne, 1), xlValues).Row
For compteur_x = 0 To colonne_user - 1
tablo(compteur_y, compteur_x) = .Cells(ligne, compteur_x + 1)
Next
Next
End With
nettoyerSordi
'Fige le défilement de l'écran permettant de ne pas voir le changement de feuille et de rester sur la meme
Application.ScreenUpdating = False
Sheets("requete de vue").Activate
With Range("resultatuser").Resize(comparaison, colonne_user)
.Value = tablo
.Borders.Weight = xlThin
End With
'Selectionne les lignes 18 a 22 et les redimensionne en police 8
Rows("18:22").Select
With Selection.Font
.Name = "Arial"
.Size = 8
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
'Selectionne la case I2 , car avec la redimension des lignes juste avant on se retrouve avec ces dites lignes de selectionner
Range("I2").Select
End Sub
Merki beaucoup
ayant l'idée de simplifier mon code même si il sera plus brut ( simplification dans le nombre de feuille utilisée ) j'ai créer un script mais il ne fonctionne pas du tonnerre puisque que mon code marche normalement sauf la premiere boucle que j'ai incorporé au script que j'essaie de modifier.
Je surligne en gras ou se situe l'erreur : je vous transmet le code ( attention il est plutot grand ).
Sub Sordi()
Dim valeur
Dim comparaison As Byte
Dim tablo
Dim ligne As Byte, compteur_y As Byte, compteur_x As Byte
Dim a, b, c, d As Integer
Dim tableau()
'Ici je met dans la feuille recherche les valeur que je souhaite de la feuille ordi pour ensuite faire une recherche sur la feuille recherche. Ainsi je n'ai pas la necessiter d'avoir un double permanent ( copie_ordi ) contenant simplement les données que je souhaites de la feuille ordi pour mes recherche ce qui rend le document beaucoup plus leger.
Sheets("ordi").Select
b = ActiveSheet.Range("A65356").End(xlUp).Row
For a = 0 To b
Sheets("ordi").Select
tableau(0) = Range("A" & a).Value
tableau(1) = Range("B" & a).Value
tableau(2) = Range("C" & a).Value
tableau(3) = Range("D" & a).Value
tableau(4) = Range("F" & a).Value
tableau(5) = Range("G" & a).Value
tableau(6) = Range("H" & a).Value
tableau(7) = Range("J" & a).Value
tableau(8) = Range("K" & a).Value
tableau(9) = Range("L" & a).Value
'Apparement il ne veut pas de mon Range("A" & a).Value alors qu'il fonctionne tres bien dans d'autre circonstance et le reste du code fonctionne a merveille
Sheets("recherche").Select
d = ActiveSheet.Range("A65356").End(xlUp).Row + 1
For c = 0 To 9
ActiveSheet.Cells(d, (c + 1)) = tableau(c)
Next
Next
sheets("requete de vue").select
valeur = Range("case_user")
If IsEmpty(valeur) Then
MsgBox "Veuillez choisir le nom de la personne ( 1ère lettre du prénom suivi du nom de famille ) pour que la requête fonctionne", vbCritical
Exit Sub
End If
With Sheets("recherche")
comparaison = Application.CountIf(.Columns(1), valeur)
ReDim tablo(comparaison - 1, colonne_user - 1)
ligne = 1
For compteur_y = 0 To UBound(tablo)
ligne = .Columns(1).Find(valeur, .Cells(ligne, 1), xlValues).Row
For compteur_x = 0 To colonne_user - 1
tablo(compteur_y, compteur_x) = .Cells(ligne, compteur_x + 1)
Next
Next
End With
nettoyerSordi
'Fige le défilement de l'écran permettant de ne pas voir le changement de feuille et de rester sur la meme
Application.ScreenUpdating = False
Sheets("requete de vue").Activate
With Range("resultatuser").Resize(comparaison, colonne_user)
.Value = tablo
.Borders.Weight = xlThin
End With
'Selectionne les lignes 18 a 22 et les redimensionne en police 8
Rows("18:22").Select
With Selection.Font
.Name = "Arial"
.Size = 8
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
'Selectionne la case I2 , car avec la redimension des lignes juste avant on se retrouve avec ces dites lignes de selectionner
Range("I2").Select
End Sub
Merki beaucoup
A voir également:
- Erreur dans une boucle en VBA
- Incompatibilité de type vba ✓ - Forum Programmation
- Erreur 3000 france tv - Forum Lecteurs et supports vidéo
- Télé samsung s'éteint et se rallume en boucle - Forum Téléviseurs
- Instagram une erreur s'est produite - Forum Instagram
- Erreur 0x80070643 - Accueil - Windows
3 réponses
Bonjour,
La ligne 0 (zéro) n'existe pas ...
Fait avec :
For a = 1 To b
'....
Next a
Ensuite évite de mettre trop de sheet(x).Select ... fait plutôt : tableau(0) = Sheets("ordi").Range("A" & a).Value
Ou bien faire plutôt :
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("ordi")
tableau(0) = ws.Range("A" & a).Value
' ...
;o)
La ligne 0 (zéro) n'existe pas ...
Fait avec :
For a = 1 To b
'....
Next a
Ensuite évite de mettre trop de sheet(x).Select ... fait plutôt : tableau(0) = Sheets("ordi").Range("A" & a).Value
Ou bien faire plutôt :
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("ordi")
tableau(0) = ws.Range("A" & a).Value
' ...
;o)
Oki je vais essayer mais effectivement j'avais vu par moi meme que la ligne 0 ne fonctionnait pas et j'avais essayer de rectifier en mettant a = 1 mais ca ne fonctionnait pas plus, pour la suite je vais voir.
J'ai fais ce que tu m'a conseillé mais sans succès :(. Je continue a chercher la raison du bug pour une ligne si simple :).
A au fait j'ai corrigé un peu mon code j'avais oublier de redimensionner mon tableau avec ReDIm tableau(9) maintenant cela fonctionne ... quelle erreur stupide :). Même si j'ai encore du soucis ca doit etre des erreurs d'inatention donc je vais regarder tout ca merci en tout cas pour ton aide.
A+
A au fait j'ai corrigé un peu mon code j'avais oublier de redimensionner mon tableau avec ReDIm tableau(9) maintenant cela fonctionne ... quelle erreur stupide :). Même si j'ai encore du soucis ca doit etre des erreurs d'inatention donc je vais regarder tout ca merci en tout cas pour ton aide.
A+