OVH Cloud OVH Cloud

Code VB sous excel

2 réponses
Avatar
Paul David
Bonjour à tous alors voici mon problème :

Alors voilà, ce petit bout de code permet de faire un tirage dans une liste,
après avoir entré le nombre de personne à tirer, le traitement se fait
correctement mais à un moment un copier-collé doit être effecuté pour
récupérer des valeurs, à la ligne
"Range("Q1:Q150").Select", il m'affiche erreur 1004 "erreur définie par
l'application ou par l'objet! Ce qui est étonnant, c'est avec une maccro la
copie s'effectue sans problème!

Voici le code :


Private Sub CommandButton1_Click()
Dim nbr_sel1, nbr_elm, nbr_col, choix, pos, lig, i
Dim inf_feu, inf_lig, inf_col
Dim res_feu, res_lig, res_col, res_lis
nbr1 = InputBox("Veuillez saisir le nombre de personne à choisir", "Saisie",
"0")
nbr_sel1 = nbr1 ' le nombre de lignes à réviser
nbr_col = 16 ' le nombre de colonnes à recopier
inf_lig = 1 ' les données sont en ligne inf_lig
inf_col = 1 ' les données sont en colonne inf_col
inf_feu = "bourg" ' les données sont sur la feuille inf_feu
res_lig = 1 ' le résultat est en ligne res_lig
res_col = 1 ' le résultat est en colonne res_col
res_feu = "resubourg" ' le résultat est sur la feuille res_feu
res_lis = "listebourg" ' liste remise en forme
' récupération du nombre de lignes de données
nbr_elm = Worksheets(inf_feu).Cells(inf_lig, inf_col).End(xlDown).Rows
' suppression précédente sélection
Sheets(res_feu).Select
Worksheets(res_feu).Cells(res_lig, res_col).CurrentRegion.ClearContents

For lig = 0 To nbr_sel1 - 1
Do
choix = Int(Rnd(1) * nbr_elm) + 1
For i = 0 To lig ' test doubles
If Worksheets(res_feu).Cells(res_lig, res_col).Offset(i).Value _
= Worksheets(inf_feu).Cells(inf_lig, inf_col).Offset(choix - 1).Value _
Then
Exit For
End If
Next i
Loop Until Worksheets(res_feu).Cells(res_lig, res_col).Offset(i).Value = ""

' copie des données sélectionnées
Worksheets(res_feu).Cells(res_lig, res_col).Offset(lig).Formula = "=" &
inf_feu & "!R" & choix & "C"
Worksheets(res_feu).Cells(res_lig, res_col).Offset(lig).Resize(1,
nbr_col).FillRight

Next lig

Sheets(res_feu).Select
Sheets(res_feu).Copy After:=Sheets(3)
Range("Q1:Q150").Select
Selection.Copy
Sheets("listebourg").Select
Range("I3").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False

Sheets(res_lis).Copy After:=Sheets(3)

End Sub

Merci pour vos réponses

2 réponses

Avatar
PMO
Bonjour,

A tout hasard essayez la ligne suivante:
Sheets(4). Range("Q1:Q150").Select
au lieu de
Range("Q1:Q150").Select

Cordialement.
--
PMO
Patrick Morange



Bonjour à tous alors voici mon problème :

Alors voilà, ce petit bout de code permet de faire un tirage dans une liste,
après avoir entré le nombre de personne à tirer, le traitement se fait
correctement mais à un moment un copier-collé doit être effecuté pour
récupérer des valeurs, à la ligne
"Range("Q1:Q150").Select", il m'affiche erreur 1004 "erreur définie par
l'application ou par l'objet! Ce qui est étonnant, c'est avec une maccro la
copie s'effectue sans problème!

Voici le code :


Private Sub CommandButton1_Click()
Dim nbr_sel1, nbr_elm, nbr_col, choix, pos, lig, i
Dim inf_feu, inf_lig, inf_col
Dim res_feu, res_lig, res_col, res_lis
nbr1 = InputBox("Veuillez saisir le nombre de personne à choisir", "Saisie",
"0")
nbr_sel1 = nbr1 ' le nombre de lignes à réviser
nbr_col = 16 ' le nombre de colonnes à recopier
inf_lig = 1 ' les données sont en ligne inf_lig
inf_col = 1 ' les données sont en colonne inf_col
inf_feu = "bourg" ' les données sont sur la feuille inf_feu
res_lig = 1 ' le résultat est en ligne res_lig
res_col = 1 ' le résultat est en colonne res_col
res_feu = "resubourg" ' le résultat est sur la feuille res_feu
res_lis = "listebourg" ' liste remise en forme
' récupération du nombre de lignes de données
nbr_elm = Worksheets(inf_feu).Cells(inf_lig, inf_col).End(xlDown).Rows
' suppression précédente sélection
Sheets(res_feu).Select
Worksheets(res_feu).Cells(res_lig, res_col).CurrentRegion.ClearContents

For lig = 0 To nbr_sel1 - 1
Do
choix = Int(Rnd(1) * nbr_elm) + 1
For i = 0 To lig ' test doubles
If Worksheets(res_feu).Cells(res_lig, res_col).Offset(i).Value _
= Worksheets(inf_feu).Cells(inf_lig, inf_col).Offset(choix - 1).Value _
Then
Exit For
End If
Next i
Loop Until Worksheets(res_feu).Cells(res_lig, res_col).Offset(i).Value = ""

' copie des données sélectionnées
Worksheets(res_feu).Cells(res_lig, res_col).Offset(lig).Formula = "=" &
inf_feu & "!R" & choix & "C"
Worksheets(res_feu).Cells(res_lig, res_col).Offset(lig).Resize(1,
nbr_col).FillRight

Next lig

Sheets(res_feu).Select
Sheets(res_feu).Copy After:=Sheets(3)
Range("Q1:Q150").Select
Selection.Copy
Sheets("listebourg").Select
Range("I3").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:úlse

Sheets(res_lis).Copy After:=Sheets(3)

End Sub

Merci pour vos réponses


Avatar
Paul David
Merci beaucoup cela fonctionne bien à présent :)

Dire que c'était si simple à trouver xD