Si cellule vide ne pas transférer les données sur autre feuille

Bonjour le Forum, Bonjour à tous...

J'ai une base de donnée avec noms d'élève, des points ou appréciations... je dois faire des certificats... pas de soucis à ce niveau là....

j'aimerais quand la cellule des points ou appréciation soit vide, qu'il ne transfère pas sur le certificat..(ni nom, cours...) et qu'il passe à la ligne suivante...

Merci d'avance pour votre aide...

Oli

14certi-test01.xlsm (27.36 Ko)

Bonsoir,

Le plus simple serait de demander à la personne qui a fait les macros de base, en soi la modif n'est pas compliqué, il faut réussir à comprendre le processus et savoir ou l'intégrer.

La macro est petite mais quand je vois un code non indenté déjà j'ai des éclairs qui sortent des yeux

ECG

Salut thespeedy20, ECG,

on va réduire tout ça, hein, la finalité étant, je présume, d'imprimer ces fameux certificats...

Private Sub cmdGO_Click()
'
Dim sWk1 As Worksheet
'
Set sWk1 = Worksheets("Résultats")
iRow = Range("A" & Rows.Count).End(xlUp).Row
'
Application.ScreenUpdating = False
Worksheets("Certificat").Activate
'
With ActiveSheet
    For x = 4 To 8
        If sWk1.Cells(x, 9) <> "" Then
            .Cells(19, 1) = sWk1.Cells(x, 10)
            .Cells(25, 1) = sWk1.Cells(x, 3)
            .Cells(30, 1) = sWk1.Cells(x, 1)
            .Cells(33, 1) = IIf(IsNumeric(sWk1.Cells(x, 9)), "Avec: " & Format(sWk1.Cells(x, 9), "00.00") & "%", "Note: " & sWk1.Cells(x, 9))
            With ActiveSheet.PageSetup
                .PrintArea = "A1:A42"
                .Zoom = False
                .PaperSize = xlPaperA4
                .FitToPagesWide = 1
                .FitToPagesTall = 1
            End With
            ActiveSheet.PrintPreview 'OU ActiveSheet.PrintOut
        End If
    Next
End With
'
Worksheets("Résultats").Activate
Application.ScreenUpdating = True
'
End Sub

Si l'imprimante est connue et active par défaut et que le calibrage de ta feuille te convient, il faudra alors choisir

ActiveSheet.PrintOut

histoire d'imprimer à la volée.

A tester, malgré tout...

A+

8certificats.xlsm (24.13 Ko)

Evidemment, vous avez tous compris que ce n'est pas...

    For x = 4 To 8

mais...

    For x = 4 To iRow

Je n'avais pas l'intention d'imprimer tout le bazar non plus...

A+

Bonjour le Forum, ECG, curulis57

@Curulis57

Je tiens à te remercier pour cette solution qui fonctionne très bien, j'avais remarquer pour la boucle...que j'ai adaptée...

j'ai un autre certificat , celui là, il y a deux sur une page... je peux utiliser le même principe, ou il y à une astuce pour que cela fonctionne. voir fichier ci-joint

Oli

5certificats.xlsm (50.75 Ko)

Bonsoir Oli,

voici, non testé cette fois-ci...

Le choix du certificat simple ou double est à préciser à côté du bouton de commande d'impression.

Tu avais remarqué, j'imagine, que j'avais supprimé le format 'Pourcentage' pour appliquer un format 'Standard' à ta colonne Résultats.

On est de Liège ou pas, hein?

Private Sub cmdGO_Click()
'
Dim sWk1 As Worksheet
'
Set sWk1 = Worksheets("Résultats")
iRow = Range("A" & Rows.Count).End(xlUp).Row
iIdx = IIf(Range("C1").Font.Bold = True, 1, 2)
'
Application.ScreenUpdating = False
Worksheets(IIf(iIdx = 1, "Certificat", "Certificats")).Activate
'
With ActiveSheet
    For x = 4 To iRow
        If sWk1.Cells(x, 9) <> "" Then
            iOK = iOK + 1
            .Cells(IIf(iOK = 2, 33, IIf(iIdx = 1, 19, 10)), 1) = sWk1.Cells(x, 10)
            .Cells(IIf(iOK = 2, 37, IIf(iIdx = 1, 25, 14)), 1) = sWk1.Cells(x, 3)
            .Cells(IIf(iOK = 2, 39, IIf(iIdx = 1, 30, 16)), 1) = sWk1.Cells(x, 1)
            .Cells(IIf(iOK = 2, 41, IIf(iIdx = 1, 33, 18)), 1) = IIf(IsNumeric(sWk1.Cells(x, 9)), "Avec: " & Format(sWk1.Cells(x, 9), "00.00") & "%", "Note: " & sWk1.Cells(x, 9))
        End If
        If (x = iRow And iOK > 0) Or (iOK = 1 And iIdx = 1) Or (iOK = 2 And iIdx = 2) Then
            iOK = 0
            With ActiveSheet.PageSetup
                .PrintArea = "A1:A" & IIf(iIdx = 1, 42, 45)
                .Zoom = False
                .PaperSize = xlPaperA4
                .FitToPagesWide = 1
                .FitToPagesTall = 1
            End With
            ActiveSheet.PrintPreview 'OU ActiveSheet.PrintOut
            .Cells(33, 1) = ""
            .Cells(37, 1) = ""
            .Cells(39, 1) = ""
            .Cells(41, 1) = ""
        End If
    Next
End With
'
Worksheets("Résultats").Activate
Application.ScreenUpdating = True
'
End Sub

A+

5certificats.xlsm (51.04 Ko)

Bonjour curulis57,

Merci pour cette version, je vais tester...

j'aimerais sans abuser que les macros soient indépendantes....

En fait le certificat une page, ce sont des élèves qui finissent... alors que les certificats doubles sont des élèves qui finissent un cycle (donc certificat plus petit)...ce sont deux bases différentes.

Merci d'avance

ps: je ne suis pas très loin de liège... Gembloux excactement

Bonjour Oli,

j'imagine que les deux bases de résultats font partie intégrante d'un MÊME classeur !?

A+

Voilà, en espérant croire que tes 2 BDD résultats sont dans le même classeur.

L'impression est commandée par un double-clic sur l'en-tête de la colonne 'Résultats'.

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
'
Dim sWk As Worksheet
'
Cancel = True
If Sh.Name Like "Certif-*" Then Exit Sub
'
If Not Intersect(Target, Sh.Range("I3")) Is Nothing Then
    Set sWk = IIf(InStr(Sh.Name, "Etudes") > 0, Worksheets("Resultat-Etudes"), Worksheets("Resultat-Cycle"))
    iRow = Sh.Range("A" & Rows.Count).End(xlUp).Row
    iIdx = IIf(InStr(Sh.Name, "Etudes") > 0, 1, 2)
    '
    Application.ScreenUpdating = False
    Worksheets(IIf(iIdx = 1, "Certif-Etudes", "Certif-Cycle")).Activate
    '
    With ActiveSheet
        For x = 4 To iRow
            If sWk.Cells(x, 9) <> "" Then
                iOK = iOK + 1
                .Cells(IIf(iOK = 2, 33, IIf(iIdx = 1, 19, 10)), 1) = sWk.Cells(x, 10)
                .Cells(IIf(iOK = 2, 37, IIf(iIdx = 1, 25, 14)), 1) = sWk.Cells(x, 3)
                .Cells(IIf(iOK = 2, 39, IIf(iIdx = 1, 30, 16)), 1) = sWk.Cells(x, 1)
                .Cells(IIf(iOK = 2, 41, IIf(iIdx = 1, 33, 18)), 1) = IIf(IsNumeric(sWk.Cells(x, 9)), "Avec: " & Format(sWk.Cells(x, 9), "00.00") & "%", "Note: " & sWk.Cells(x, 9))
            End If
            If (x = iRow And iOK > 0) Or (iOK = 1 And iIdx = 1) Or (iOK = 2 And iIdx = 2) Then
                iOK = 0
                With ActiveSheet.PageSetup
                    .PrintArea = "A1:A" & IIf(iIdx = 1, 42, 45)
                    .Zoom = False
                    .PaperSize = xlPaperA4
                    .FitToPagesWide = 1
                    .FitToPagesTall = 1
                End With
                ActiveSheet.PrintPreview 'OU ActiveSheet.PrintOut
                .Cells(33, 1) = ""
                .Cells(37, 1) = ""
                .Cells(39, 1) = ""
                .Cells(41, 1) = ""
            End If
        Next
    End With
    '
    sWk.Activate
    Application.ScreenUpdating = True
End If
'
End Sub

A+

9certificats.xlsm (53.16 Ko)

Bonjour Le forum, curulis57

Merci pour cette nouvelle version, tu avais vu juste, il y a bien deux bases dans un même classeur...

Une petite question, dans la macro dans la feuille2 est-elle toujours d’application ?

Je teste, et je reviens vers toi...

ps: si je veux mettre à jour ma base(résultat-études) avec un fichier excel sans ouvrir celui-ci... comment puis-je faire ?

Merci

Bon dimanche

Oli

Salut,

si je veux mettre à jour ma base(résultat-études) avec un fichier excel sans ouvrir celui-ci...

Que veux-tu dire???

A+

Bonjour le forum, curulis57

le fichier excel est généré par un logiciel tiers, nous sommes plusieurs à avoir accès, pour diverses raisons...encodage, modifications...

En pleine session d'évaluations, nous encodons les résultats, parfois il y a les délibérations.....

le but c'est mettre à jour la base de données du fichier certificat sans ouvrir le nouveau fichier... comme cela tout le monde à un fichier à jour au quotidien....

J'espère que les explications sont claires...

Merci

Oli

Bonjour le Forum, curulis57

Que veux-tu dire???

le fichier excel est généré par un logiciel tiers, nous sommes plusieurs à avoir accès, pour diverses raisons...encodage, modifications...

En pleine session d'évaluations, nous encodons les résultats, parfois il y a les délibérations.....

le but c'est mettre à jour la base de données du fichier certificat sans ouvrir le nouveau fichier... comme cela tout le monde à un fichier à jour au quotidien....

J'espère que les explications sont claires...

Merci

Salut thespeedy,

si je comprends bien, il faudrait donc importer les données de fichier externe vers 'Certificats.xlsm' ?

  • quel est le nom de ce fichier ?
  • son emplacement ?
  • quelle est sa structure ? Nom des onglets, histoire de retrouver tes classes car j'imagine que toutes les classes sont encodées dans des onglets différents ?

Toutes sortes de petits détails, quoi !

A+

Bonjour curulis57,

- le nom du fichier est généré de façon aléatoire(commence par la date inversée, ex :20180701, suivi d'un tiret et d'un numéro, le format du fichier est en csv)

- le fichier se trouve dans le dossier de téléchargement (win 10 ou win 7)

- la structure du fichier est la même que pour les onglets résultat-études/résultat-cycle ....

Remarque : le logiciel ne fait pas le tri...

donc

Pour résultat-études:

Voici les critères :

formation musicale Q2 (qualification 2)

formation musicale QA1(qualification adulte 1)

tous les cours ayant le degré Q5 (qualification 5)

tous les cours ayant le degré QA4 (qualification adulte 4)

Pour résultat-cycle :

Voici les critères :

formation musicale F4 (formation 4)

formation musicale FA2 (formation adulte 2)

déclamation F4 (formation 4)

art dramatique FA2 (formation adulte 2)

tous les cours ayant le degré F5 (formation 5)

tous les cours ayant le degré FA4 (formation adulte 4)

Voilà j'espère que tu as toutes les informations, je te joins un fichier généré par le programme...

Bon dimanche à tous

Oli

Bonjour

@curulis57

J ai répondu à ton dernier post... Plus de nouvelles depuis...

Une petite aide.... Merci

Salut thespeedy,

déso, j'étais overbooké par certains travaux de rénovation...

Je regarde ça dès que je peux, pas de stress...

A+

Ré,

Merci, pas de soucis... Je comprends.... Bon travail...

Oli

Salut thespeedy,

rien à te présenter ici mais ça avance quand -même.

  • il faudra que ton fichier .csv soit ouvert ;
  • les formations disponibles seront dispatchées en liste selon Etudes ou Cycle ;
  • tu pourras choisir tes propres classes dans ces listes ce qui veut dire que tes collègues pourraient avoir chacun leur exemplaire de 'Certificat.xlsm' : chacun aurait alors les résultats selon sa sélection personnelle.

Si tu vois autre chose à faire...

A+

Bonjour Curulis57,

Juste une petite chose, est-il possible que chaque certificat soit sauvegarder dans un onglet... L onglet ayant le nom de l élève.. Et pour les doubles certificat... L onglet ayant les deux noms des élèves....

Merci pour ton dévouement...

Oli

Rechercher des sujets similaires à "vide pas transferer donnees feuille"