Fonction if a partir d'une autre Feuille

Bonjour,

Etant un débutant,

Je souhaiterais savoir comment faire pour; à partir d'une feuille(Feuil1.xlsm) colonne("B:B") ou j'ai des informations comme du texte ("FER";"BOIS";"BETON"...) je souhaiterais écrire une fonction me permettant de copier en remplacent "FER" par "METAL" dans une autre feuille (Feuil1.xlsx) en colonne("B:B"). ainsi j'obtiendrais; si dans feuil1.xlsm colonne B = "FER" alors, dans Feuil1.xlsx colonne B = "METAL"; si dans feuil1.xlsm colonne B = "BOIS", alors dans Feuil1.xlsx colonne B = "BOIS".

Je sais pas si c'est clair

En espérant que quelqu'un puisse m'aider.

En vous remerciant par avance.

Robin

Bonjour,

...à partir d'une feuille(Feuil1.xlsm)

D'une feuille ou d'un classeur (=fichier distinct) ?

Pour 2 feuilles d'un même classeur :

=SI('feuil1'!B1="FER";"METAL";'feuil1'!B1)

Pour 2 classeurs (préalablement ouverts):

=SI('[Classeur1.xlsx]feuil1'!B1="FER";"METAL";'[Classeur1.xlsx]feuil1'!B1)

Bonjour,

Merci pour votre réponse, je souhaiterais faire la même chose avec la fonction if dans VBA 😁

Feuil1.xlsx c

Est le nom du fichier (fichier distinc)

Sub ListeDérivée()

   Dim Destination As Workbook, N As Long, Lmax As Long

   Set Destination = Workbooks("Feuil1.xlsx")

   With ActiveWorkbook.Sheets("Feuil1")
        Lmax = .Range("B" & Rows.Count).End(xlUp).Row
        For N = 2 To Lmax 'Boucle sur les lignes
            If .Cells(N, 2).Value = "FER" Then
                Destination.Sheets("Feuil1").Cells(N, 2).Value = "METAL" 'Changement des valeurs "FER" en "METAL" 
            Else:  Destination.Sheets("Feuil1").Cells(N, 2).Value = .Cells(N, 2) 'Maintien de la valeur d'origine si <> "FER"
            End If
        Next N
   End With

End Sub

Tu peux aussi procéder différemment, par exemple en copiant toute ta colonne B puis en remplaçant les valeurs "FER" avec la fonction Replace()

Bonjour,

Une piste sans boucle. Le classeur "Feuil1.xlsx" doit être ouvert et le code ci-dessous doit être dans le classeur "Feuil1.xlsm" :

Sub Test()

    Dim Fe As Worksheet
    Dim Tbl
    Dim Plage As Range

    'adapter le nom de la feuille !
    Set Fe = Workbooks("Feuil1.xlsx").Worksheets("Feuil1")

    'défini la plage sur la colonne B à partir de B1
    With ThisWorkbook.ActiveSheet: Set Plage = .Range(.Cells(1, 2), .Cells(.Rows.Count, 2).End(xlUp)): End With

    'mémorise dans un tableau
    Tbl = Plage

    'utilise la méthode "Replace" de l'objet "Range" pour effectuer les remplacement en une seule fois
    'le remplacement est fait dans la plage source
    Plage.Replace "FER", "METAL"

    'affecte les valeurs à l'autre classeur
    Fe.Range(Fe.Cells(1, 2), Fe.Cells(Plage.Count, 2)).Value = Plage.Value

    'puis rétabli les valeurs de la plage d'origine
    Plage.Value = Tbl

End Sub

Merci pour votre aide, en fin de compte les données sont dans le fichier (Classeur1.xlsm), ou je souhaiterais traité les donnés de la colonne "D" ("NAT_SUPP") puis j'ai un second fichier(Classeur1.xlsx), ou je souhaiterais importer les données traitées et les coller en colonne "R" ("MODELE").

J'ai joint mes 2 fichiers

Désolé étant débutant j'ai du mal.

3classeur1.xlsm (37.48 Ko)
2classeur1.xlsx (34.61 Ko)

Bonjour

Pour les noms de fichier, il te suffit de remplacer les noms dans les objets "Workbooks("Nom de ton fichier")".

Concernant les noms de feuille, c'est dans les objets "Worksheets("Nom de ta feuille")" ou "Sheets("Nom de ta feuille")".

Je n'y parvient pas, j'ai écrit ceci;

Sub ListeDérivée()

   Dim Destination As Workbook, N As Long, Lmax As Long

   Set Destination = Workbooks("Classeur1.xlsx")

   With ActiveWorkbook.Sheets("OTTERSTHAL")
        Lmax = .Range("B" & Rows.Count).End(xlUp).Row
        For N = 4 To Lmax 'Boucle sur les lignes
            If .Cells(N, 4).Value = "FER" Then
                Destination.Sheets("Feuil1").Cells(N, 17).Value = "METAL" 'Changement des valeurs "FER" en "METAL"
            Else:  Destination.Sheets("Feuil1").Cells(N, 17).Value = .Cells(N, 17) 'Maintien de la valeur d'origine si <> "FER"
            End If
        Next N
   End With

End Sub

Ne suis je pas sensé avoir deux formule avec Workbook, un pour le Fichier (Classeur1.xlsx) ou j'ai les données et un autre pour le Fichier (Classeur1.xlsm) qui est vierge et ou sera transféré les données traités?

For N = 4 To Lmax 'Boucle sur les lignes, mon traitement s'effectuerais plutot sur des colonnes alors pourquoi ici faut il faire une boucle sur les lignes?

ActiveWorkbook --> fichier contenant les données et la macro

Destination = Workbooks("Classeur1.xlsx") --> Fichier vierge où placer les données

On boucle sur la ligne car il n'y a qu'une colonne contenant "FER", "BOIS"... et le code actuellement ne reporte que celle-ci.

Pour tout reporter il faudrait d'abord copier l'ensemble de la plage de données sur ton fichier vierge, puis à l'aide d'une fonction Replace(), comme proposé précédemment, remplacer les valeurs "FER" en "METAL" sur ce nouveau document.

Les données sont sur le fichier classeur1.xlsx, le fichier classeur1.xlsm contient la macro et le fichier vierge.

Je n'ai pas la macro avec un fichier avec des données

J'ai beau modifier re-modifier mais rien ne se passe

Pouvez vous me mettre la formule complète s'il vous plais? j'avais joint les fichiers sur lesquels je travail

En vous remerciant par avance

J'ai repris la proposition de @Theze :

Sub Test()

    Dim Fe As Worksheet
    Dim Tbl
    Dim Plage As Range
    Dim max As Long

    'Nom de la feuille source
    Set Fe = Workbooks("classeur1.xlsx").Worksheets("OTTERSTHAL")

    'défini la plage de données (18 colonnes et X lignes)
    With Fe
        max = .UsedRange.Rows.Count
        Set Plage = .Range(.Cells(1, 1), .Cells(max, 18))
    End With

    'affecte les valeurs à l'autre classeur puis remplace "FER" par "METAL"
     With ThisWorkbook.ActiveSheet
        .Range(.Cells(1, 1), .Cells(max, 18)).Value = Plage.Value
        .Range(.Cells(2, 4), .Cells(max, 4)).Replace "FER", "METAL"
    End With

End Sub

La formule fonctionne, par contre la formule m'a copié toutes les autres valeurs du fichier (Classeur1.xlsx) pour les coller dans le fichier (classeur1.xlsm), j'aurais voulu garder le tableau de base en changeant uniquement la colonne Colonne "R" à partir de "R2"

Merci beaucoup pour votre aide

Avant de passer encore du temps... Est ce que tu comprends un minimum le principe des codes proposés ou c'est du charabia ?

Sub Test()

    Dim Fe As Worksheet
    Dim Tbl
    Dim Plage As Range
    Dim max As Long

    'Nom de la feuille source
    Set Fe = Workbooks("classeur1.xlsx").Worksheets("OTTERSTHAL")

    'défini la plage de données (18 colonnes et X lignes)
    With Fe
        max = .UsedRange.Rows.Count
        Set Plage = .Range(.Cells(2, 4), .Cells(max, 4))
    End With

    'affecte les valeurs à l'autre classeur puis remplace "FER" par "METAL"
     With ThisWorkbook.ActiveSheet
        .Range(.Cells(2, 18), .Cells(max, 18)).Value = Plage.Value
        .Range(.Cells(2, 18), .Cells(max, 18)).Replace "FER", "METAL"
    End With

End Sub

Je comprends le minimum, après pour ma part je préfère avoir un script sous les yeux et chercher à déchiffrer.

Ça fonctionne!

Merci beaucoup et merci de m'avoir consacré du temps

Rechercher des sujets similaires à "fonction partir feuille"