Code VB, ne pas afficher ligne vide
Tu parles de quelle macro ? Extraction ? Parce qu'à aucun moment on ajoute quoi que ce soit dans la feuille DEVIS non ??!maxime079 a écrit :Alors la macro marche pour un devis 1 , mais pour un devis 2 ou 3 etc ca ne fonctionne pas aucun ligne ne s'ajoute dans la feuille DEVIS .
En fait je te demandais au cas où ce n'était pas la même.maxime079 a écrit :Tu veux le code de la macro validation , mais tu l'as dans le dernier fichier deja non?
J'ai modifié la macro validation. A toi de tester :maxime079 a écrit :Peut etre cela est due au fait que quand je valide devis 1 , il apparait dans la feuille MVTSTOCK , alors que pour les devis 2 3 etc aucunes données n'apparaissent dans le tableau de MVTSTOCK...
Sub Validation()
'
' Validation Macro
'
'
Application.ScreenUpdating = False
Sheets("DEVIS").Range("A26:H26").Copy
With Sheets("Historique devis reserv.")
.Range("A3:H3").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
.Rows("3:3").Insert shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End With
Sheets("DEVIS").Range("A29:E36").Copy
With Sheets("MVTSTOCK")
On Error Resume Next
.ShowAllData
.Cells.EntireRow.Hidden = False
.Range("A" & .Range("A65536").End(xlUp).Row + 1).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
derlig = .Range("A65536").End(xlUp).Row + 1
.Range("A" & derlig & ":A65536").EntireRow.Hidden = True
For i = 5 To derlig - 1
If .Cells(i, 2) = 0 Then .Rows(i).EntireRow.Hidden = True
Next i
End With
Sheets("DEVIS").Select
ExecuteExcel4Macro "PRINT(1,,,3,,,,,,,,2,,,TRUE,,FALSE)"
Range("A9:G16,E4:E5,B29:E36").ClearContents
Range("E3") = Range("E3") + 1
End SubSi y'a quelque chose qui va pas, dis-moi ce que tu souhaites effectivement obtenir.
Edit : post précédent En fait j'ai reussi à la faire fonctionner comme je veux
Dernier problème sur cette image avec le numéro 2 ...
En effet dans l'encadrer 2 , j'ai des recherches (voir fichier ) . Par exemple en M42 dans ce fichier j'ai :
=SI(D28="";RECHERCHEV(C28;numforfait;2;0);RECHERCHEV(D28;numunité;2;0))
En M43 : =SI(D9="";RECHERCHEV(C9;numforfait;2;0);RECHERCHEV(D9;numunité;2;0))
Etc
Le problème est que à chaque clique sur mon bouton 36 ( donc à chaque nouveau lancement de la macro extraction() ) , les celulles changent et se décalent , que je les fige ou pas...
Enfin je sais pas si c'est clair ou pas , désolé de t'embetter ...
re,
Tout ça est normal ! Car tu changes la structure de ton fichier ! En fait, pour masquer les lignes vides, je me positionne à la dernière ligne de ta facture en me repérant par rapport à la ligne contenant les mots "Prix à payer". Ligne qui normalement se trouve 2 lignes au-dessus de "mode de paiement", qui se trouve à la ligne 39 dans ta 2è capture d'écran.maxime079 a écrit :le problème est sur la macro extraction() .
Cette dernière m'insère bien les lignes vides etc comme je veux , mais elle me supprime mes colonnes I:J ( voir 1 ) , contenant mon total à payer , mode de paiement etc
En 1 on peut voir qu'elle me supprime ma ligne contenant les titres : N°contrat , Nom client, localisation , date de sortie , durée et qu'elle me remonte également cette ligne en dessous de la dernière ligne remplie ( ici 84 en dessous de la ligne 9)
De plus, tu dis :
Dans mon fichier, les titres : N°contrat , Nom client, localisation , date de sortie , durée, n'existent même pas ! Donc ils ne peuvent pas être supprimés.maxime079 a écrit :En 1 on peut voir qu'elle me supprime ma ligne contenant les titres : N°contrat , Nom client, localisation , date de sortie , durée
Une petite remarque : décrire les erreurs que tu rencontres c'est bien, me dire ce que tu souhaites obtenir c'est mieux ! Ne me laisse pas deviner !
Exemple :
J'en déduis quoi ? Que les lignes doivent être masquées ? Ou supprimer ?maxime079 a écrit :Ensuite quand je complète manuellement la ligne contenant les titres ( voir 4) , et en relançant la macro extraction() , on voit que toutes mes validations précédentes apparaissent....(voir 3)
Peut-être qu'il serait plus judicieux que je travaille sur le même fichier que toi, en gardant exactement la même structure et en laissant assez de données pour en faire quelque chose.
-- 01 Fév 2010 16:10 --
C'est clair mais c'est fauxmaxime079 a écrit :Enfin je sais pas si c'est clair ou pas
En M42 du fichier joint, j'ai pas de formule
Mais bon, je crois avoir compris ce que tu veux. J'ai intégré l'écriture des formules dans la macro suivante :
Sub extraction()
'
' extraction Macro
Application.ScreenUpdating = False
Range("A8:E15").ClearContents
Cells.EntireRow.Hidden = False
With Sheets("MVTSTOCK")
On Error Resume Next
.ShowAllData
.Cells.EntireRow.Hidden = False
With .Range("A4:F4")
If Not Sheets("MVTSTOCK").AutoFilterMode Then .AutoFilter
.AutoFilter Field:=1, Criteria1:=Range("B3").Value
.AutoFilter Field:=2, Criteria1:="<>" & 0
End With
n = .[_filterdatabase].Resize(, 1).SpecialCells(xlCellTypeVisible).Count - 1
If n > 0 Then
Range(Rows(8), Rows(8 + n - 1)).Insert Shift:=xlDown
.Range("_FilterDataBase").Offset(1).Resize(, 5).SpecialCells(xlCellTypeVisible).Copy [A8]
Range("G" & 8 + n & ":J" & 8 + n).AutoFill Destination:=Range("G8:J" & 8 + n)
Range("N" & 8 + n).AutoFill Destination:=Range("N8:N" & 8 + n)
Range("A" & 8 + n & ":N" & 8 + n).AutoFill Destination:=Range("A8:N" & 8 + n), Type:=xlFillFormats
Range("M8:M" & 8 + n).FormulaR1C1 = "=IF(RC[-9]="""",VLOOKUP(RC[-10],numforfait,2,0),VLOOKUP(RC[-9],numunité,2,0))"
Range("A8:N" & 8 + n - 1).Borders.Weight = xlThin
Range("A7:J7").Borders.LineStyle = xlDouble
End If
End With
derlig = Cells.Find("Prix à payer", LookIn:=xlValues, lookat:=xlPart).Row - 1
For i = 8 To derlig
If Cells(i, 1) = "" Then Rows(i).EntireRow.Hidden = True
Next i
ExecuteExcel4Macro "PRINT(1,,,1,,FALSE,,,,,,2,,,TRUE,,FALSE)"
End SubPar contre, tu mets maintenant la formule en colonne M alors qu'avant elle était en colonne N. Dans la macro, la colonne N est traitée (inutilement ? A toi de me dire) mais ça n'affecte pas trop la macro.
T'es un chef !!!!!!!!!!!!!!
En PJ mon fichier final .
Dernière aide si ca te dérange pas .... je souhaite insérer une message box dans la macro VALIDATION(), j'ai réalisé cette box sous le nom Messagebox()
Le problème est que je n'arrive pas à la mettre dans ma macro VALIDATION, car je n'arrive pas à mettre les variables
Je souhaite que la macro fasse une recherche de E3 de la feuille DEVIS , dans la colonne A de MVTSTOCK . Et que si le numéro de devis existe deja alors ma message box apparait...
En d'autre terme :
Exemple :
Si E3 = 1 et que dans la colonne A de la feuille MVTSTOCK il y a déja 1
alors message box apparait
sinon E3 + 1
Ça a le mérite d'être clair
Je vois que dans ton fichier, tu n'a pas pris la macro validation que j'ai postée précédemment. J'ai donc fait une modif de ta macro actuelle pour y insérer le MsgBox.
Sache que pour intégrer un message box dans ton code, je pense qu'il est inutile de créer une macro messagebox() car c'est plus difficile ! Vaut mieux l'intégrer directement. Voici la macro validation mise à jour. A toi de tester et de me dire si ça va pas :
Sub Validation()
'
' Validation Macro
'
'
Application.ScreenUpdating = False
Sheets("DEVIS").Range("A26:H26").Copy
With Sheets("Historique devis reserv.")
.Range("A3:H3").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
.Rows("3:3").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End With
Set c = Sheets("MVTSTOCK").Columns(1).Find([E3], , xlValues, xlWhole)
If Not c Is Nothing Then
'En tête texte
Answer = MsgBox("Ce numéro de devis existe déja !" & vbCrLf & "Voulez vous continuer ?", vbCritical + vbYesNo, "Attention !")
'Code si bouton non
If Answer = vbNo Then MsgBox "Changer le numéro de devis !", vbExclamation: Exit Sub
'Code si bouton oui
MsgBox "ATTENTION !"
End If
Sheets("DEVIS").Range("A29:E36").Copy
With Sheets("MVTSTOCK")
.Cells.EntireRow.Hidden = False
.Range("A" & .Range("A65536").End(xlUp).Row + 1).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
derlig = .Range("A65536").End(xlUp).Row + 1
.Range("A" & derlig & ":A65536").EntireRow.Hidden = True
For i = 5 To derlig - 1
If Application.WorksheetFunction.CountBlank(.Range("A" & i & ":E" & i)) > 1 Then .Rows(i).EntireRow.Hidden = True
Next i
End With
Sheets("DEVIS").Select
' ExecuteExcel4Macro "PRINT(1,,,3,,,,,,,,2,,,TRUE,,FALSE)"
Range("A9:G16,E4:E5").ClearContents
Range("E3") = Range("E3") + 1
End SubBne chef j'ai juste un mot à dire MERCIIIIIIIIIIII , t'es vraiment trop fort et tu m'as bien dépanné , les macros sont parfaites , maintenant j'ai une rechercheV qui fonctionne pas dans FACTURE mais bon je vais essayer de résoudre cela ^^
re,
Pendant qu'on y est, autant résoudre le problème ensemble ! Même si ça diffère un peu de ton sujet d'origine.maxime079 a écrit :maintenant j'ai une rechercheV qui fonctionne pas dans FACTURE mais bon je vais essayer de résoudre cela ^^
Donc quel est le problème ?
Le problème se trouve sur la feuille FACTURE , en colonne I , impossible de trouver la recherchev qui me permet de reconstruire le prix . Je fais cette recherche à partir du numero en colonne M ...
J'ai regardé ton problème et il semblerait que cela soit plus long à résoudre que prévu. Je te conseille donc d'ouvrir un nouveau sujet pour ça. Tu peux joindre le fichier épuré suivant pour ton nouveau post. Je n'ai gardé que les feuilles FACTURE et TARIF (étant donné que les formules en colonne I de la feuille FACTURE fait seulement référence à la feuille TARIF), j'ai également enlevé toutes les macros.
D'accord , je vais ouvrir un nouveau sujet , merci encore pour tout