Remplir une colonne sous 3 conditions différentes en VBA

Bonjour à tous,

Nouveau sur ce forum, je sais que je suis un peu rapide, mais je débute le vba depuis deux semaines.

Mon besoin est pourtant très simple.

Je possède deux fichiers.

Le fichier A qu'on va appeller : Test.

Le (ou les fichiers) B qu'on va appeller : Source. (fichiers journaliers)

Test fait appel à source pour copier une zone de données et les collées dans test.

Cette partie fonctionne.

J'aimerais que selon les données collées, il m'affiche des conditions dans les collonnes correspondantes A et B.

Colonne A je veux le titre du fichier source (nom du fichier = date d'activités concernés par les données)

Colonne B : Si le contenu de la colonne H est différent de 100%, B= NON sinon B = OUI. Si H est vide, B= ""

Même en essayant une seule de ces conditions, cela ne fonctionne pas.

Voici mon code :

Private Sub CommandButton5_Click()
    'Bouton charger les données de la veille
    Dim Ligne As Long
    Dim wb As Workbook
    Dim rep As String

    With Sheets("Donnees")
    'Positionnement sur la première ligne vide de la feuille "donnees"
    Ligne = Sheets("Donnees").Cells.SpecialCells(xlCellTypeLastCell).Row - 1
    End With

    'Ouvre le classeur selon la date A3 du calendar1 de la feuille Chargement
    If Dir("C:\" & Format([A3].Value, "dd mm yyyy") & ".xls") = "" Then
    MsgBox "le fichier est introuvable!"
    Else: Application.ScreenUpdating = False
    Workbooks.Open ("C:\" & Format([A3].Value, "dd mm yyyy") & ".xls")

    ' Copier les données de la feuille "Temps Conseillers" dans la première ligne vide de la feuille "Données"
    Worksheets("Temps Conseillers").Range("A2:K39").Copy Destination:=Workbooks("Test.xlsm").Worksheets("Donnees").Range("C" & Ligne + 2)

[b]    'Test si taux enregistrement = 100%
    Workbooks("Test.xlsm").Activate
    With Sheets("Donnees")
    rep = "NON"
    If Range("H2").Value <> "100%" Then
    Range("B2").Value = rep
    End If
    End With[/b]

    'Fermeture des classeurs inactifs
    For Each wb In Workbooks
    If Not wb Is ThisWorkbook Then
    wb.Close False
    End If
    Next

    'Arrière plan non visible
    Application.ScreenUpdating = True

    'Sauvegarde du classeur actif Test
    ActiveWorkbook.Save
    MsgBox "Vos données ont été chargé et sauvegardé"

    Exit Sub
    End If

End Sub

Voila c'est une condition toute bête. Ce code fonctionne mais aucun NON ou OUI n’apparaît dans

la colonne B2.

Concernant la récupération du titre du document, j'ai essayé plusieurs codes mais sans aucun succès.

Merci beaucoup de votre temps et de votre aide.

PS : Merci aux créateurs du site qui m'a beaucoup plus servi en deux semaines que les quelques livres en ma possession.

Les bases sont très bien expliqués et sans cela et l'aide de personnes sur les forums, je n'aurais jamais pu vous écrire ce bout de code que vous voyez aujourd'hui.

Un bout de solution et des détails

Ce qu'il me faudrait c'est donc un moyen de lié ça entre les deux colonnes.

En sacade donc ,faire que les conditions de chaque cellule H s'applique aux cellules

des lignes B correspondantes...

Un bout de solution :

  Workbooks("Test.xlsm").Activate
    With Sheets("Donnees")
    rep1 = "NON"
    rep2 = "OUI"
    If Range("H2") = "100%" Then
    Range("Donnees!B2") = rep2
    ElseIf Range("H2").Value < "100%" Then
    Range("Donnees!B2").Value = rep1
    ElseIf Range("H2").Value > "100%" Then
    Range("Donnees!B2").Value = rep1
    ElseIf Range("H2").Value = "" Then
    Range("Donnees!B2").Value = ""
    End If
    End With

Merci.

Personne peut m'aider s'il vous plait?

Bonjour

Mon opinion

Tu aurais un peu plus d'aide si tu avais mis les fichiers en lignes

Cela rebute beaucoup de personne à refaire ces fichiers avec des données

Avec peut-être un Userform (pas sur)

Si tu as des contrôles activeX enregistres tes fichiers au format xls avant de les transmettre

voici le fichier sous ces deux versions car quand je l'ai enregistré en xls,

des choses ne fonctionnaient pas.

Merci

31test.zip (30.90 Ko)
26test.xlsm (46.17 Ko)

Bonsoir

clark...kent a écrit :

Le fichier A qu'on va appeller : Test.

Celui-ci on l'a

clark...kent a écrit :

Le (ou les fichiers) B qu'on va appeller : Source. (fichiers journaliers)

Raté pour celui-ci


Bonsoir

Si j'ai compris

Une formule peut faire l'affaire

=SI(H2="";"";SI(H2=100%;"Oui";"Non"))

D'après ta dernière macro il peut y avoir plus de 100% ?

Bonjour,

Oui j'ai bien entendu penser à cette formule

mais tu remarquera que dans le fichier test que je t'ai envoyé

il détecte les lignes vides dans le fichier test pour y coller les données

provenant du fichier source.

Donc si j'inscrit la fonction Si, les lignes ne seront bien entendues plus vides

C'est donc exactement cette forume qu'il me faut, mais en VBA

Ci-joint le fichier source, que je peux pas modifier.

Merci encore

3125-04-2012.xls (14.40 Ko)

Bonjour

Cà commence mal, impossible de charger ton fichier

Une série de hiéroglyphes apparaissent à l'écran

Si quelqu'un le télécharge très bien peut il en faire une copie

As tu deja le formulaire qui apparait à l'ouverture?

Ou apparaissent ces fameux "hiéroglyphes"?

Car j'ai tenté de l'utiliser sur une version de excel non pro, et le formulaire

fonctionne mais comme il n'y a pas le calendar, je ne peux pas aller plus loin

sur certaines conditions.

Mais à part ça, ça fonctionne.

Bonjour

Voilà le résultat lorsque je veux télécharger ton fichier

erreur format fichier

Et une partie du résultat obtenu

hieroglyphes

Ok je pense que c'est parce que tu as Excel 2003 et qu'il ne gère pas le tableau de 2007.

Voici un nouveau fichier sans en tête avec des données brutes en version 2003

Je l'ai forcément renommé à la date d'hier pour que la macro fonctionne.

1726-04-2012.zip (9.01 Ko)

Bonjour

A voir

J'ai changé le chemin pour avoir tous les fichiers au même endroit

Je ne comprends pas vraiment ton code et pourquoi tu as fait cela

Que veux tu dire par tous les fichiers dans le même endroit?

Je ne comprends pas cette partie précisément :

With Sheets("Donnees")
      With .Range("B" & Ligne & ":B" & .Range("C" & Rows.Count).End(xlUp).Row)
        .Formula = "=IF(RC[6]="""","""",IF(RC[6]=100%,""Oui"",""Non""))"
        .Value = .Value                     ' Si on ne veut pas les formules

Le reste que tu as modifié, qu'est ce que cela apporte pour le code. Car la

partie recherche du nom et ouverture fonctionnait très bien.

Désormais le fichier que tu m'as envoyé ne fonctionne pas, le chargement de la veille, cela ne fonctionne plus.

J'ai pourtant bien mes fichiers sources placés dans C:/ mais il m'affiche "le fichier est introuvable"

Je te demande ca car je ne suis qu'a la phase, si mon idée marche,

je compte positionné les fichiers sources dans un chemin plus complexe

du genre D:/blabla/ ect ect et il faut que je puisse le modifié par la suite.

Merci beaucoup pour ton aide.

Bonjour

Banzai64 a écrit :

J'ai changé le chemin pour avoir tous les fichiers au même endroit

Parce que pour mes tests c'est plus facile de mettre tous les fichiers dans le même répertoire

Mais le chemin que tu utilises est toujours présent dans la macro, il faut juste enlever la remarque devant et en placer une devant le chemin que j'utilise

Explications

Dans la feuille "Donnes"

En colonne B de la ligne de recopie jusqu'à la ligne correspondante à la fin de la colonne C j'y place la formule et ensuite je ne garde que le résultat de la formule

C'est tout

si tu veux garder la formule places une remarque devant la ligne

        .Value = .Value                     ' Si on ne veut pas les formules

Effectivement en recopiant la macro dans mon classeur d'origine ça fonctionne, merci beaucoup.

Ah lala parlé à des passionnés je ne suis pas sur d'avoir vraiment compris la formule a partir de formula

mais comme je te l'ai dit VBA débuté il y a deux semaines tout seul et c'est pas du tout ma formation

à la base donc je transpire... je comprends peu à peu la logique mais certaines syntaxe dur dur...

Je mets le sujet résolu

merci à toi

je sais que j'ai clos le sujet mais j'aimerais vraiment maîtriser ta formule

car j'ai l'impression que je peux m'en servir de façon a ce qu'a chaque copier coller,

elle me récupère le nom du fichier en colonne A. (la date du fichier en fait)

Merci

Bonjour

Pas besoin de formule

Rajoutes la ligne surlignée

    With Sheets("Donnees")
      With .Range("B" & Ligne & ":B" & .Range("C" & Rows.Count).End(xlUp).Row)
        .Formula = "=IF(RC[6]="""","""",IF(RC[6]=100%,""Oui"",""Non""))"
        .Value = .Value                     ' Si on ne veut pas les formules
      End With
       .Range("A" & Ligne & ":A" & .Range("C" & Rows.Count).End(xlUp).Row) = Format(Sheets("Chargement").Range("A3"), "dd mm yyyy") & ".xls"
    End With

Tout simple je cherche toujours compliqué.

merci beaucoup et un bon et j'espère long week end

Rechercher des sujets similaires à "remplir colonne conditions differentes vba"