disparition des "" lors de l'exécution du code VBA ch(34)

Ludovic56

XLDnaute Nouveau
Bonjour,
J'ai un problème dans une formule. J'ai besoin de changer les cellules d'un code en fonction des plages concernées.
Pour cela j'ai créé une sorte de condition puis j'ai intégré ma formule. mon problème c'est que je n'arrive pas à faire voir les doubles "" . J'ai essayé d'utiliser ch(34) mais ça ne fonctionne pas

Voilà le code VBA

Sub nb_degerbage()

Dim i As Integer
Dim j As Integer
Dim c As String
i = 3
j = 0

While ActiveSheet.Cells(i, 20).Text <> ""

If ActiveSheet.Cells(i, 20).Text <> 0 Then

If i <> 3 Then

ActiveSheet.Cells(j, 22).FormulaR1C1 = "=SI(T" & j & "<>"";SOMMEPROD(1/NB.SI($S$" & j & ":$S$" & i - 1 & ";$S$" & j & ":$S$" & i - 1 & "))-SOMMEPROD(1/NB.SI($P$" & j & ":$P$" & i - 1 & ";$P$" & j & ":$P$" & i - 1 & "));"")"

End If
j = i

End If

i = i + 1

Wend
End Sub



voila ce que je voudrais que le code vois dans la case V3
=SI(T4<>"";SOMMEPROD(1/NB.SI($S$3:$S$27;$S$3:$S$27))-SOMMEPROD(1/NB.SI($P$3:$P$27;$P$3:$P$7));"")

voila ce qui ce passe, je perd un " au debut et à la fin
=SI('T3'<>";SOMMEPROD(1/NB.SI($S$3:$S$27;$S$3:$S$27))-SOMMEPROD(1/NB.SI($P$3:$P$27;$P$3:$P$27));")


j'ai essayer de tripler les """", d'utiliser ch(34), de déclarer une varriable " afin que le conde vois ceci en entré
SI(T" & j & "<>[B]""[/B] et non seulment un seul " idem en sortie

je vous met le fichier en pièces jointe

(pour information, ce calcule me permet de connaitre le nombre de dégerbage à effectuer. Vous aurez compris j'ai besoin de calculer ce nombre pour chaque code camion donc dans ce fichier j'ai besoin de ce nombre aussi dans les cases V28 et V46)

cordialement

Ludovic
 

Pièces jointes

  • VERSION 1 - Copie2.xls
    91 KB · Affichages: 27
  • ensemble des degerbage par camion.xlsx
    17.8 KB · Affichages: 22
Dernière édition:

Ludovic56

XLDnaute Nouveau
Re : disparition des "" lors de l'exécution du code VBA ch(34)

quand je quadruple ca ne fonctionne pas, la fonction retransmet rien du tout

pourquoi j'ai l'apparition de 'T3' dans ma formule ? alors que je demande =SI(T"
il me manque toujours les deux "

SI('T3'<>";SOMMEPROD(1/NB.SI($S$3:$S$27;$S$3:$S$27))-SOMMEPROD(1/NB.SI($P$3:$P$27;$P$3:$P$27));")

j'ai essayer pas mal de choses ce weekend
 

Dranreb

XLDnaute Barbatruc
Re : disparition des "" lors de l'exécution du code VBA ch(34)

Bonjour.
Il ne faut pas affecter à la propriété FormulaR1C1 d'un range une formule en notation A1 locale, mais en R1C1.
En V3 =SI(T3<>"";SOMMEPROD(1/NB.SI($S$3:$S$27;$S$3:$S$27))-SOMMEPROD(1/NB.SI($P$3:$P$27;$P$3:$P$27));"")
se met :
VB:
Feuil1.[V3].FormulaR1C1 = "=IF(RC[-2]<>"""",SUMPRODUCT(1/COUNTIF(R3C19:R27C19,R3C19:R27C19))-SUMPRODUCT(1/COUNTIF(R3C16:R27C16,R3C16:R27C16)),"""")"
 
Dernière édition:

Paf

XLDnaute Barbatruc
Re : disparition des "" lors de l'exécution du code VBA ch(34)

Bonjour à tous

pour utiliser les formules en vba, il faut leur nom en anglais et les ; remplacés par ,
pour conserver l'utilisation des variable i et j:

ActiveSheet.Cells(j, 3).Formula = "=IF(T" & j & "<>"""",SumProduct(1/NB.SI($S$" & j & ":$S$" & i - 1 & ",$S$" & j & ":$S$" & i - 1 & "))-SumProduct(1/NB.SI($P$" & j & ":$P$" & i - 1 & ",$P$" & j & ":$P$" & i - 1 & ")),"""")"

où curieusement le NB.SI est passé sans traduction

( nontesté )

A+
 

Dranreb

XLDnaute Barbatruc
Re : disparition des "" lors de l'exécution du code VBA ch(34)

Je pense que je le ferais peut être comme ça :
VB:
Sub nb_degerbage()
Dim Cel As Range, CelS As Range, RR As String
For Each CelS In ColLignesOùRelat(ActiveSheet.[V3], "T", ">", 0)
   RR = "R" & CelS.Row - 1: GoSub MetFormule
   Set Cel = CelS: Next CelS
RR = "R" & ActiveSheet.[S60000].End(xlUp).Row: GoSub MetFormule: Exit Sub
MetFormule: If Cel Is Nothing Then Return
Cel.FormulaR1C1 = "=SUMPRODUCT(1/COUNTIF(RC19:" & RR & "C19,RC19:" & RR _
   & "C19))-SUMPRODUCT(1/COUNTIF(RC16:" & RR & "C16,RC16:" & RR & "C16))"
Return
End Sub

Function ColLignesOùRelat(ByVal CelDéb As Range, ByVal ColQuoi, ByVal Opé As String, ByVal Valeur) As Range
Rem. ——— Cellules partant de CelDéb dans sa colonne où la colonne ColQuoi est en relation Opé avec Valeur.
Set ColLignesOùRelat = Intersect(LignesOùRelat(CelDéb, ColQuoi, Opé, Valeur), CelDéb.EntireColumn)
End Function

Function LignesOùRelat(ByVal LigneDéb As Range, ByVal ColQuoi, ByVal Opé As String, ByVal Valeur) As Range
Rem. ——— Lignes entières partant de LigneDéb où la colonne ColQuoi est en relation Opé avec une Valeur.
If Not IsNumeric(ColQuoi) Then ColQuoi = LigneDéb.Worksheet.Columns(ColQuoi).Column
If VarType(Valeur) = vbString Then Valeur = """" & Replace(Valeur, _
   """", """""") & """" Else Valeur = Trim$(Str$(Valeur))
Set LignesOùRelat = LignesOùCondR1C1(LigneDéb, CondR1C1:="RC" & ColQuoi & Opé & Valeur)
End Function

Function ColLignesOùCondR1C1(ByVal CelDéb As Range, ByVal CondR1C1 As String) As Range
Rem. ——— Cellules partant de CélDéb dans sa colonne dont les lignes vérifient une condition R1C1 CondR1C1.
Set ColLignesOùCondR1C1 = Intersect(LignesOùCondR1C1(CelDéb, CondR1C1), CelDéb.EntireColumn)
End Function

Function LignesOùCondR1C1(ByVal LigneDéb As Range, ByVal CondR1C1 As String) As Range
Rem. ——— Lignes entières partant de LigneDéb qui vérifient une condition R1C1 CondR1C1.
Dim Lignes As Range, ColTrv As Range
With LigneDéb.Worksheet.UsedRange
   Set Lignes = LigneDéb.EntireRow.Resize(.Rows.Count + .Row - LigneDéb.Row)
   Set ColTrv = Intersect(.Columns(.Columns.Count + 1), Lignes): End With
ColTrv.FormulaR1C1 = "=1/(" & CondR1C1 & ")"
On Error Resume Next
Set LignesOùCondR1C1 = ColTrv.SpecialCells(xlCellTypeFormulas, 1).EntireRow
ColTrv.Delete xlShiftToLeft
End Function
Remarque: les 4 Function seraient à mettre dans un autre module nommé Utilit (pour qu'il y ait de grandes chance que ce soit le dernier par ordre alpha). C'est du service, l'applicatif ne consiste qu'en la très courte Sub nb_degerbage.
 
Dernière édition:

Ludovic56

XLDnaute Nouveau
Re : disparition des "" lors de l'exécution du code VBA ch(34)

Ça fonctionne avec la formule de PAF, il faut juste que je rafraichisse les "="de la formule

Dranreb je vais essayer de faire ce que vous me proposez demain.

je suis très pris par le travail, et je n'ai pas trouvé le temps d'essayer .

je vous tien au courant,

merci encore
 

Ludovic56

XLDnaute Nouveau
Re : disparition des "" lors de l'exécution du code VBA ch(34)

bonjour;
J'ai effectivement utilisé le programme de dranred qui fonctionne parfaitement;
j'ai aussi besoin de faire la même chose, mais, au lieu de regarder le nombre de dégerbage à effectuer par tournée, je veux le nombre de dégerbage à effectuer par zone. afin de comparer 2 méthode de travail
exemple : si j'ai 3 palletes gerbées ensemble avec des codes tournée différent, mais la même zone d'expédition, il n'y a pas de dégerbage à effectuer.

cela me paraît simple à mettre en place, il suffit de modifier votre programme ce que je j'essaye de de faire mais ca ne fonctionne pas, il est vrais que je suis loin de comprendre tout le code, voila ce que je pensais modifier.

Sub nb_degerbage_par_zones()
Dim Cel As Range, CelS As Range, RR As String
For Each CelS In ColLignesOùRelat(ActiveSheet.[V3], "T", ">", 0) ' les résultats apparaissent dans la colonne V
RR = "R" & CelS.Row - 1: GoSub MetFormule 'je ne suis pas sur de comprendre pourquoi vous mettez RR= "R"
Set Cel = CelS: Next CelS
RR = "R" & ActiveSheet.[S60000].End(xlUp).Row: GoSub MetFormule: Exit Sub
MetFormule: If Cel Is Nothing Then Return
Cel.FormulaR1C1 = "=SUMPRODUCT(1/COUNTIF(RC19:" & RR & "C19,RC19:" & RR _
& "C19))-SUMPRODUCT(1/COUNTIF(RC16:" & RR & "C16,RC16:" & RR & "C16))"
Return 'les C correspondent au code tourné mais pourquoi 16 ? je veux travailler avec les zones soit la colonne O je remplace donc les C par O, mais doit-je remplacer RC par RO ?End Sub

je concatenais en colonne S (G2;C2;P2) ce qui correspond au code camion, code tournée et numéro d'emplacement

maintenant je vais concatener en S (G2;O2;P2) ce qui correspond au code camion, zone d'expédition (code zone) et numéro d'emplacement

en esperant pouvoir etre éclairé sur le code

cordialement ludovic.

par la suite je voudrais connaitre le nombre de degerbage par camion et par emplacement, j'ai pratiquement la solution (si l'on travail avec un seul camion),
si vous voyer une solution je suis preneur

je vous met le fichier sur lequel je travail dans la question principal0
 

Dranreb

XLDnaute Barbatruc
Re : disparition des "" lors de l'exécution du code VBA ch(34)

Bonjour
' les résultats apparaissent dans la colonne V.
C'est probablement la colonne de travail adoptée par la fonction LignesOùCondR1C1. Elle prend soin de la supprimer juste après avoir isolé par un SpecialCells(xlCellTypeFormulas, 1) les lignes qu'on voulait.
je ne suis pas sur de comprendre pourquoi vous mettez RR= "R"
Parce que le numéro de ligne du début suivante, diminué de 1, qui est du coup celui de fin en cours, sert toujours à former une référence de ligne dans les FormulaR1C1, alors autant déjà le mettre.
les C correspondent au code tourné mais pourquoi 16 ? je veux travailler avec les zones soit la colonne O je remplace donc les C par O, mais doit-je remplacer RC par RO ?
J'ai l'impression que vous confondez les lettre R et C de la notation R1C1, qui veulent dire Row et Column, avec des entêtes de colonnes de la notation A1 native ou locale.

Le fichier n'est pas passé ?
 

Ludovic56

XLDnaute Nouveau
Re : disparition des "" lors de l'exécution du code VBA ch(34)

J'ai l'impression que vous confondez les lettre R et C de la notation R1C1, qui veulent dire Row et Column, avec des entêtes de colonnes de la notation A1 native ou locale.

je suis allé trop vite en effet.
RC19 correspond à la colonne S et RC16 la colonne P
Cel.FormulaR1C1 = "=SUMPRODUCT(1/COUNTIF(RC19:" & RR & "C19,RC19:" & RR _
& "C19))-SUMPRODUCT(1/COUNTIF(RC16:" & RR & "C16,RC16:" & RR & "C16))"



si je comprend bien c'est avec RR = "R" & CelS.Row - 1: GoSub MetFormule
que l'on travail sur une autre ligne, alors que moi j'utilisais un variable J que j'incrémentais ?
 

Dranreb

XLDnaute Barbatruc
Re : disparition des "" lors de l'exécution du code VBA ch(34)

Oui, c'est ça. On ne peut mettre la formule qu'une fois la ligne de fin connue, or c'est celle de début du suivant - 1.
Et le GoSub c'est pour ne pas oublier de faire aussi le dernier, pour lequel on n'a plus de début suivant, sans pour autant avoir dû réécrire les mêmes instructions. Et pour ce qui est de votre J, Je pense que faire plutôt ainsi c'est plus rapide que de parcourir toutes les cellules de la colonne pour voir si elles sont vides.
 

Ludovic56

XLDnaute Nouveau
Re : disparition des "" lors de l'exécution du code VBA ch(34)

vous avez raison oui. J'ai seulement eu quelques cours quand j'étais à l'école, je vais essayer de réutiliser ce système par la suite.


maintenant j'ai encore deux problèmes:
le 1er c'est que j'aimerais faire apparaitre le nombre de dégerbage par camion et par emplacement comme dans l'exemple que je mets dans le fichier excel nommé : ensemble des dégerbages par camion . pour un camion ca fonctionne presque, je ne comprend pas pourquoi il ne trouve pas tout les emplacement par contre...

je pensais utiliser le même raisonnement que précedament, a chaque fois que l'on détecte que l'on a un nouveau camion Hop on recommence les formules avec une autre plage. mais il faut que ça le fasse pour 2 formules et sa serait bien de pouvoir ajouter le titre à chaque tableau la somme des dégerbages à effectuer pour chaque camion


command puije proceder pour que cela ne sois pas trop compliqué ?


le second c'est que j'aimerais aussi pouvoir connaitre le nombre de dégerbages à effectuer si l'on travaillait par zone d'expédition et non par tournée voila ce que j'aurais aussi besoin de faire :
si dans le même emplacement (colonne P) mes produits vont dans la même zones d'expédition (colonne O) on ne fait rien (pas de dégerbage à effectuer en amont) sinon compter le nombre de zones différentes et faire la somme -1 et ce pour une plage (la plage correspondant au camion)



cordialement Ludovic
 

Dranreb

XLDnaute Barbatruc
Re : disparition des "" lors de l'exécution du code VBA ch(34)

Pas de macros dans un xlsx.
S'il y a différents rapports à établir avec des regroupements par critères tous reclassés, j'ai une excellente fonction, si ça vous intéresse, qui met tout en collections imbriquées. Il ne reste plus qu'à faire des For Each ZonExpé In LaCollection, à l'intérieur des For Each Camion in ZonExpé.Contenu, etc. Les rapports sont assez facile à programmer.
Et comme ce sont des collections il suffit d'en prendre les Count pour avoir directement le nombre de sous éléments identifiés différemment, même si on ne s'intéresse pas au détail.
 
Dernière édition:

Ludovic56

XLDnaute Nouveau
Re : disparition des "" lors de l'exécution du code VBA ch(34)

oui le fichier xlsx c'était pour vous montrer mon raisonnement dans le tableau.
J'ai tout d'abord commencé par essayer de trouver le nombre de dégerbage à effectuer dans chaque emplacement pour un seul camion.
il y a quelques problèmes encore dans ce calcul puisqu'on ne détecte pas tous les emplacements et je ne comprend pas pourquoi...


je veux bien votre fonction pour établir des regroupements par critères.

comment doit je la programmer ?

Il ne reste plus qu'à faire des For Each ZonExpé In LaCollection, à l'intérieur des For Each Camion in ZonExpé.Contenu, etc. Les rapports sont assez facile à programmer.
Et comme ce sont des collections il suffit d'en prendre les Count pour avoir directement le nombre de sous éléments identifiés différemment, même si on ne s'intéresse pas au détail.


je ne suis pas un expert en VBA loin de là mais je commence à m'y intéresser de plus en plus vu les possibilités que ça entraine, et la complexité de ce que j'ai besoin d'obtenir.


merci encore pour votre aide
 

Discussions similaires

Statistiques des forums

Discussions
312 330
Messages
2 087 340
Membres
103 524
dernier inscrit
Smile1813