A voir également:
- VBA Soucis avec les lignes vides
- Excel trier par ordre alphabétique en gardant les lignes - Guide
- Supprimer lignes vides excel fin de tableau ✓ - Forum Excel
- Comment supprimer les pages vides sur word - Guide
- Supprimer lignes vides infinies sur Excel2007 ✓ - Forum Excel
- Vba dernière colonne non vide ✓ - Forum VB / VBA
29 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
1 févr. 2010 à 12:43
1 févr. 2010 à 12:43
Salut,
Tu ne peux pas effacer les lignes vides?
Tu ne peux pas effacer les lignes vides?
Non je ne peux pas.
Mes données viennent d'un TXT tout est automatique. Je ne peux pas contrôler les trous il faudrait que je puisse les ignorer.
Mes données viennent d'un TXT tout est automatique. Je ne peux pas contrôler les trous il faudrait que je puisse les ignorer.
garion28
Messages postés
1545
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
3 avril 2011
406
1 févr. 2010 à 14:18
1 févr. 2010 à 14:18
pourquoi ne ferai tu pas tout en vba au lieu d'utiliser lse formules d'excel ? ca te permettrai d'etre plus libre et pouvoir faire exactement ce que tu veux faire
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Mes formules sont déjà commandées en VBA tu peux tout voir dans mon code.
Le souci c'est que je ne sais pas comment résoudre mon problème
Le souci c'est que je ne sais pas comment résoudre mon problème
garion28
Messages postés
1545
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
3 avril 2011
406
1 févr. 2010 à 14:30
1 févr. 2010 à 14:30
ca reste mon avis, mais ces formules tiré d'excel et utilisé en vba, je ne trouve pas ca très pratique puisque comme tu as pus le voir, ca plante en mettant un#VALEURS ou un autre truc comme ca, en fesant tout le traitement a partir de vba et en utilisant les feuilles et cellules uniquement pour l'affichage ca pourrai etre plus pratique (et pas plus gourmand en ressources si tu n'as pas énormément de lignes
garion28
Messages postés
1545
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
3 avril 2011
406
1 févr. 2010 à 14:37
1 févr. 2010 à 14:37
aucun problème, tu me dis ce qu'est sensé faire les formules que tu as utilisé et je te dis comment y remédier en vba
Tu vois mes deux formules Sommeprod dans mon code ?
Pour la 1ere elle concerne 3 colonnes de mon tableau.
Une colonne statut qui me dit ou en est un ordre que j'ai passé (statut 1100 1150 1200 1650 1990....)
Une colonne qui me dit à quelle date je suis passé en statut 1100.
Une colonne qui me dit à quelle date je suis passé en 1650.
Je dois calculer sur toutes mes dates le délai moyen de passage de 1100 à 1650. (Attention j'ai un nouveau fichier tous les jours c'est pour ça que ma formule s'adapte chaque jours car je peux autant avoir 1000lignes le lundi et en avoir 1600 le mardi)
Enfin j'ai 2 contraintes (c'est la ou ma 1ere colonne statut est obligatoire à prendre en compte) Quand je suis dans un statut intermédiaire entre 1100 et 1650 je n'ai pas de date de 1650 (mais j'en ai toujours en 1100 c'est obligatoire) il faut donc ignorer cette ligne, puis quand j'ai des dates pour 1100 et 1650 quelques fois je peux être en statut 1990. Si je suis en 1990 je ne veux pas que la ligne non plus soit prise en compte.
La 2ème formule est plus simple j'ai une colonne date de réception et une colonne date de passage en statut 1100. Si le différence entre la date de réception et la date de passage en statut 1100 dépasse 2 jours il y a un retard. Je veux calculer tous les retards qu'il y a (il faut toujours prendre en compte le fait que je vais avoir un nombre de ligne qui varie de jour en jour donc prendre en compte une colonne de la ligne 2 car la ligne 1 c'est le titre de la colonne à la ligne 65536 qui est la ligne ultime d'excel)
Je ne sais pas si je suis assez clair.
Pour la 1ere elle concerne 3 colonnes de mon tableau.
Une colonne statut qui me dit ou en est un ordre que j'ai passé (statut 1100 1150 1200 1650 1990....)
Une colonne qui me dit à quelle date je suis passé en statut 1100.
Une colonne qui me dit à quelle date je suis passé en 1650.
Je dois calculer sur toutes mes dates le délai moyen de passage de 1100 à 1650. (Attention j'ai un nouveau fichier tous les jours c'est pour ça que ma formule s'adapte chaque jours car je peux autant avoir 1000lignes le lundi et en avoir 1600 le mardi)
Enfin j'ai 2 contraintes (c'est la ou ma 1ere colonne statut est obligatoire à prendre en compte) Quand je suis dans un statut intermédiaire entre 1100 et 1650 je n'ai pas de date de 1650 (mais j'en ai toujours en 1100 c'est obligatoire) il faut donc ignorer cette ligne, puis quand j'ai des dates pour 1100 et 1650 quelques fois je peux être en statut 1990. Si je suis en 1990 je ne veux pas que la ligne non plus soit prise en compte.
La 2ème formule est plus simple j'ai une colonne date de réception et une colonne date de passage en statut 1100. Si le différence entre la date de réception et la date de passage en statut 1100 dépasse 2 jours il y a un retard. Je veux calculer tous les retards qu'il y a (il faut toujours prendre en compte le fait que je vais avoir un nombre de ligne qui varie de jour en jour donc prendre en compte une colonne de la ligne 2 car la ligne 1 c'est le titre de la colonne à la ligne 65536 qui est la ligne ultime d'excel)
Je ne sais pas si je suis assez clair.
garion28
Messages postés
1545
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
3 avril 2011
406
1 févr. 2010 à 15:18
1 févr. 2010 à 15:18
j'avou n'avoir rien compris a ton explication :s
le but c'est de compter le nombre de fois que les valeurs sont vu dans une plage de cellule ? (si c'est bien ce que fait sumproduct)
le but c'est de compter le nombre de fois que les valeurs sont vu dans une plage de cellule ? (si c'est bien ce que fait sumproduct)
Pour la formule 1 déjà voila un tableau type.
https://www.cjoint.com/?cbpOUV8N7l
Les 3 colonnes sont en rouge.
Le calcul se fait avec les colonnes 1100 et 1650
Je veux savoir combien de jours y a t-il en moyenne pour passer du statut 1100 au statut 1650.
En faisant attention au fait que certains ordres ne sont pas arrivés en 1650 il y a donc des trous et il ne faut pas prendre en compte dans le calcul et d'autres ordres sont arrivés en 1650 mais leur statut a évolué en 1990 et la non plus ils ne doivent pas être pris en compte pour calculer le délai moyen.
Les ex de lignes à exclure sont en jaune.
Attention ici j'ai jusqu'à la ligne 40. Mais ce calcul sera automatiquement fait chaque jour avec des nombres de lignes qui vont varier. Il faut donc que les 3 colonnes soient considérées dans leur intégralité
https://www.cjoint.com/?cbpOUV8N7l
Les 3 colonnes sont en rouge.
Le calcul se fait avec les colonnes 1100 et 1650
Je veux savoir combien de jours y a t-il en moyenne pour passer du statut 1100 au statut 1650.
En faisant attention au fait que certains ordres ne sont pas arrivés en 1650 il y a donc des trous et il ne faut pas prendre en compte dans le calcul et d'autres ordres sont arrivés en 1650 mais leur statut a évolué en 1990 et la non plus ils ne doivent pas être pris en compte pour calculer le délai moyen.
Les ex de lignes à exclure sont en jaune.
Attention ici j'ai jusqu'à la ligne 40. Mais ce calcul sera automatiquement fait chaque jour avec des nombres de lignes qui vont varier. Il faut donc que les 3 colonnes soient considérées dans leur intégralité
garion28
Messages postés
1545
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
3 avril 2011
406
1 févr. 2010 à 16:13
1 févr. 2010 à 16:13
ok j'ai pigé le truc ^^
voila le code que j'ai fait, tu l'appel avec call calcdif
normalement ca devrai marcher
voila le code que j'ai fait, tu l'appel avec call calcdif
normalement ca devrai marcher
sub calcdif dim i as long dim res as long dim ct as long res=0 ct=0 with sheets("Extraction SIGMA Janv 2010") while (.range("J" & i).value<>"") if (.range("M" & i).value<>"")then res=res+((.range("M" & i).value)-(.range("L" & i).value)) ct=ct+1 end if res= wend calcdif = res/ct end with end sub
garion28
Messages postés
1545
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
3 avril 2011
406
1 févr. 2010 à 16:22
1 févr. 2010 à 16:22
ah c'est une mauvaise frappe, enleve le res= qui est tout seul (il est inutile)
garion28
Messages postés
1545
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
3 avril 2011
406
2 févr. 2010 à 08:00
2 févr. 2010 à 08:00
bizare, remplace le calcdif = par return (ce qui fait return res/ct)
Sub calcdif()
Dim i As Long
Dim res As Long
Dim ct As Long
res = 0
ct = 0
With Sheets("Extraction SIGMA Janv 2010")
While (.Range("J" & i).Value <> "")
If (.Range("M" & i).Value <> "") Then
res = res + ((.Range("M" & i).Value) - (.Range("L" & i).Value))
ct = ct + 1
End If
Wend
return res / ct
End With
End Sub
en incluant le code comme si dessus il me dit attendu fin d'instruction
Si je l'enlève il me souligne la ligne du while en disant erreur définie par l'appli ou l'objet
Dim i As Long
Dim res As Long
Dim ct As Long
res = 0
ct = 0
With Sheets("Extraction SIGMA Janv 2010")
While (.Range("J" & i).Value <> "")
If (.Range("M" & i).Value <> "") Then
res = res + ((.Range("M" & i).Value) - (.Range("L" & i).Value))
ct = ct + 1
End If
Wend
return res / ct
End With
End Sub
en incluant le code comme si dessus il me dit attendu fin d'instruction
Si je l'enlève il me souligne la ligne du while en disant erreur définie par l'appli ou l'objet
garion28
Messages postés
1545
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
3 avril 2011
406
2 févr. 2010 à 08:50
2 févr. 2010 à 08:50
j'ai fait quelques erreurs toute bête et je n'ai pas testé le code avant de te le donner :)
voila le bon: (j'espere que la partie .range("J" & i).value<>"1650" est correct puisque je suppose qu'ils n'y a qu'au statut 1650 ou le calcul doit etre fait
tu créé un bouton dans ta feuille et a l'évenement clic tu met call calcdif
voila le bon: (j'espere que la partie .range("J" & i).value<>"1650" est correct puisque je suppose qu'ils n'y a qu'au statut 1650 ou le calcul doit etre fait
Public Sub calcdif() Dim i As Long Dim res As Long Dim ct As Long res = 0 ct = 0 i = 4 With Sheets("Extraction SIGMA Janv 2010") While (.Range("J" & i).Value <> "") If (.Range("M" & i).Value <> "" or .range("J" & i).value<>"1650") Then res = res + ((.Range("M" & i).Value) - (.Range("L" & i).Value)) ct = ct + 1 End If i = i + 1 Wend End With MsgBox "la moyenne de jours de passage du statut 1100 à 1650 est de: " & res / ct End Sub
tu créé un bouton dans ta feuille et a l'évenement clic tu met call calcdif