Raccourcir une formule

zeltron24

XLDnaute Impliqué
Bonsoir à tous,

J'ai un petit souci de formule, dont voici le code :
Code:
Dim r As Range
Dim n As Byte

' Les Produits
Set r = su.Columns(2).Find(Me.CmbAfficher.Value, , xlValues, xlWhole)
If Not r Is Nothing Then
    test = True
    st.Range("A22").Value = r.Offset(0, 1)
    st.Range("A23").Value = r.Offset(1, 1)
    st.Range("A24").Value = r.Offset(2, 1)
    st.Range("A25").Value = r.Offset(3, 1)
    st.Range("A26").Value = r.Offset(4, 1)
    st.Range("A27").Value = r.Offset(5, 1)
    st.Range("A28").Value = r.Offset(6, 1)
    st.Range("A29").Value = r.Offset(7, 1)
    st.Range("A30").Value = r.Offset(8, 1)
    st.Range("A31").Value = r.Offset(9, 1)
    st.Range("A32").Value = r.Offset(10, 1)
    st.Range("A33").Value = r.Offset(11, 1)
    .......
    st.Range("A55").Value = r.Offset(22, 1)
End If
(Diminué pour la cause)
Voilà, je souhaiterai trouver un code moins long si cela est faisable. Le but étant de recopié les valeurs de la colonne A22 à A55 dans une autre feuille. Cette formule marche bien mais j'ai 3 colonnes à recopier.
 

Staple1600

XLDnaute Barbatruc
Re : Raccourcir une formule

Re

Je ne vois pas cette ligne dans ton dernier code
Dim pl&, dl&

Essaies cette modif également
With su
.Range(Cells(pl, 3), Cells(dl, 3)).Copy

PS: D'ailleurs pourquoi n’utilises-tu pas st à la plage de Sheets("Horaires") plus bas dans mon code :confused:
 
Dernière édition:

zeltron24

XLDnaute Impliqué
Re : Raccourcir une formule

Bonjour Staple1600

Si Dim pl et dl y sont mais je ne l'ai pas copié sur mon post #29 le voici ici:
Code:
Private Sub CmbAfficher_Change()
Dim r As Range
Dim rg As Byte
Dim rd As Byte
Dim q As Byte
Dim n As Byte
Dim pl&, dl&

Set su = Sheets("Suivi")
Set st = Sheets("Horaires")
st.Range("K50") = "Oui"             ' Réédition d'un Ticket

Dim x As Byte
x = CmbAfficher.Value ' ici x est là juste pour tester sans passer par la combo
'ici utiliser ces lignes dans le code de ta Combo
' Les Produits
Set r = su.Columns(2).Find(x, , xlValues, xlWhole)
If Not r Is Nothing Then
pl = r.Row: dl = r.Offset(, -1).End(xlDown).Row - 1
With su
    .Activate
    .Range(Cells(pl, 3), Cells(dl, 3)).Copy
    st.[A22].PasteSpecial xlValues
    .Range(Cells(pl, 4), Cells(dl, 4)).Copy
    st.[C22].PasteSpecial xlValues
End With
End If

Effectivement je n'avais pas pensé à utiliser st.
Malgré cela j'ai toujours l'erreur d'exécution 1004
 

Pièces jointes

  • Horaire Magasin.xlsm
    134.9 KB · Affichages: 36
  • Horaire Magasin.xlsm
    134.9 KB · Affichages: 39
  • Horaire Magasin.xlsm
    134.9 KB · Affichages: 42

zeltron24

XLDnaute Impliqué
Re : Raccourcir une formule

Bonsoir le Forum,

J'ai remplacé le code de Staple1600 (qui ne fonctionne pas chez moi) pour ré afficher les produits dans la feuille "Horaires" par ce code.
Code:
' Les Produits
Set r = su.Columns(2).Find(x, , xlValues, xlWhole)     'Find(x, =CmbAfficher.value
If Not r Is Nothing Then
    test = True
    rg = 22
    q = r.Offset(0, 9)
    rd = rg + q

    For rg = 22 To rd - 1
    For n = 0 To q
    st.Range("A" & rg).Value = r.Offset(n, 1).Copy
'    n = n + 1
'    rg = rg + 1
    Next n
    Next rg
End If
Le souci est que ce code me renvoi la valeur "VRAI" au lieu des articles en A22:A55
Je souhaiterai savoir le pourquoi..
Merci d'avance pour vos réponses.
 

Staple1600

XLDnaute Barbatruc
Re : Raccourcir une formule

Bonsoir à tous

zeltron24
Histoire de flatter mon égo, il faudrait plutôt écrire à la place de
J'ai remplacé le code de Staple1600 (qui ne fonctionne pas chez moi)
ceci;
J'ai remplacé le code de Staple1600 (que je n'arrive pas à faire fonctionner pas chez moi)

Enfin cela n'est plus nécessaire, je viens de me flatter moi-même en l'écrivant. ;)

Je laisse les autres membres prendre le relais, puisque tu repars sur ta boucle.

(à moins que tu ais la patience d'attendre que je me décide à rejeter un coup d'oeil à ton fichier
- ce que je comptais faire ce week-end)
 
Dernière édition:

zeltron24

XLDnaute Impliqué
Re : Raccourcir une formule

Bonsoir Staple1600

Mais bien sur mon ami, j'attendrai avec patience que tu reprenne mon fichier, je suis tellement ravi que tu te penches sur mon souci.
(Que je n'arrive pas ou qui ne fonctionne pas) veut dire la même chose: Je suis le roi des anes pour ne pas comprendre ton code et le faire fonctionner.
Par égard à ton travail, j'ai voulu montrer que j'essayé de faire un code qui pour ma part me parraissait plus simple pour moi à comprendre.
Ne m'en veux donc pas pour avoir osé essayé de mon côté.
J'ai du respect pour ton travail, cela est certain, et je t'en remercie vivement une fois encore.
Loin de moi de vouloir te "Vexer"
Et ci cela est le cas, accepte toutes mes excuses les plus sincères.
A bientôt je l'espère.
 

Staple1600

XLDnaute Barbatruc
Re : Raccourcir une formule

Re

zeltron24
Il fallait lire mon précédent message sur un mode humoristique ;) uniquement.
Finalement je suis en train de regarder ton classeur et de faire des tests.
Mais dès que j'ai faim, je passe à table, donc sois patient ;)
 

zeltron24

XLDnaute Impliqué
Re : Raccourcir une formule

Re,
Mais je n'ai pas pris ton message pour de la colère et je comprends fort bien que tu n'as pas tjr le temps de "t"occuper" de moi.
Je voulais de mon côté essayer d'avancer.
Je joins la dernière version afin de voir si cela est mieux pour corriger le problème.
Encore mille merci pour ta gentillesse.
Je bois un apéro à ta santé.:rolleyes:
 

Pièces jointes

  • Horaire Magasin.xlsm
    137.2 KB · Affichages: 40
  • Horaire Magasin.xlsm
    137.2 KB · Affichages: 43
  • Horaire Magasin.xlsm
    137.2 KB · Affichages: 41

zeltron24

XLDnaute Impliqué
Re : Raccourcir une formule

Bonsoir à tous,
Je reviens vers vous car je n'ai, après plusieurs heures passées à rechercher la cause, toujours pas trouvé la solution à ce problème.

La recopie du ticket se fait, mais au lieu d'avoir l'article (A22:A55) j'ai la valeur "VRAI" qui s'inscrit en lieu et place de l'article.
Code:
Private Sub CmbAfficher_Change()
Dim r As Range
Dim rg As Byte
Dim rd As Byte
Dim q As Byte
Dim n As Byte
Dim pl&, dl&

Set su = Sheets("Suivi")
Set st = Sheets("Horaires")
st.Range("K50") = "Oui"             ' Réédition d'un Ticket

Dim x As Byte
x = CmbAfficher.Value

' Affichage du ticket
Set r = su.Columns(2).Find(x, , xlValues, xlWhole)
If Not r Is Nothing Then
    test = True
    rg = 22                         ' Commencement en A22
    q = r.Offset(0, 9)              ' Nombre d'articles
    rd = rg + q

    For rg = 22 To rd - 1
    For n = 0 To q
    st.Range("A" & rg).Value = r.Offset(n, 1).Copy
    Next n
    Next rg
End If

Set r = su.Columns(2).Find(Me.CmbAfficher.Value, , xlValues, xlWhole)
If Not r Is Nothing Then
    test = True
    st.Range("M21").Value = r.Offset(0, 0)      ' Numéro du ticket
    st.Range("G46").Value = r.Offset(0, 5)      ' Moyen de paiement
    st.Range("G23").Value = r.Offset(0, 6)      ' Total Achat
    st.Range("G29").Value = r.Offset(0, 7)      ' Reçu

End If

    If Range("I22").Value = 1 Then
    Especes = True
    End If
    
        If Range("I22").Value = 2 Then
    Cheque = True
    End If

    If Range("I22").Value = 3 Then
    Carte = True
    End If
    
    CmbAfficher.Value = 0
    Range("M26").Select
End Sub

Pourriez vous me guider sur ce type d'erreur. Merci
 

Staple1600

XLDnaute Barbatruc
Re : Raccourcir une formule

Re

zeltron24
C'est donc qu'il y a un problème dans ta boucle et dans ta syntaxe.
Pour t'en convaincre
Dans un classeur vierge avec deux feuilles
Copies ce code de test, lance la macro a et tu verras qu'avec ta syntaxe on reproduit le phénomène
la macro copie bien les données
puis elle lance la macro b (qui reproduit ta syntaxe) et les VRAI apparaissent
Code:
Sub a()
Dim fA As Worksheet, fB As Worksheet, i
Set fA = Feuil1: Set fB = Feuil2
fA.Range("A1:A5") = Application.Transpose([{1,23,45,67,89}])
dl = fA.Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To dl
fA.Cells(i, 1).Copy fB.Cells(Rows.Count, 1).End(xlUp)(2)
Next i
MsgBox "Continue test", vbOKOnly
Call b
End Sub
Sub b()
Dim fA As Worksheet, fB As Worksheet, i
Set fA = Feuil1: Set fB = Feuil2
dl = fA.Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To dl
fB.Cells(Rows.Count, 1).End(xlUp)(2).Value = fA.Cells(i, 1).Copy
Next i
End Sub
 

zeltron24

XLDnaute Impliqué
Re : Raccourcir une formule

Re,

J'ai essayé ton code (Bien que je ne pige rien à celui ci).
Par contre je me suis aperçu que si l'on supprime ".Copy" les "VRAI" n'apparaissent plus.
Donc j'ai supprimé ".Copy" dans mon code et cela fonctionne a moitié.
J'ai bien les articles qui s'inscrivent correctement mais dans la colonne prix unit, j'ai une erreur en fin de ligne (après le dernier article) l'erreur "#N/A" s'inscrit. (Si j'ai 3 articles, j'ai 3 prix unit plus un "#N/A" en 4ème ligne de prix unit.
 

Staple1600

XLDnaute Barbatruc
Re : Raccourcir une formule

Re

zeltron24
Mon code ne sert à rien d'autre qu'à illustrer la syntaxe "correcte" avec Copy.
Ce n'est qu'un exemple illustratif , pas une solution à ton problème.
Illustration identique avec l’enregistreur de macros
VB:
Sub Macro1()
'syntaxe de l’enregistreur de macro
Sheets("Feuil1").Range("A1:A5").Copy
Sheets("Feuil2").Range("A1").PasteSpecial Paste:=xlPasteValues
End Sub
Code:
Sub Macro1b()
'syntaxe "erronée"
Sheets("Feuil2").Range("A1:A5").Value = Sheets("Feuil1").Range("A1:A5").Copy
'afficher VRAI aussi en Feuil2
End Sub

Donc maintenant, que l'on sait d’où viennent les VRAI, il faudrait réécrire ton code d'une autre manière

(ou reprendre celui que je t'avais soumis précédemment en trouvant comment l'utiliser avec le ComboBox et surtout avec quel événement de celui-ci)

Il est trop tard pour que je je m'y colle ce soir.
 

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 349
Membres
102 869
dernier inscrit
radyreth