VBA Faire varier la colonne de destination d'un copier / coller

Bonjour à tous,

Je suis bloquée sur ma macro.

J'ai 107 colonnes dans ce tableau situé en Feuil 1 LANGUESETINTERPRETES

capture d ecran 2022 11 16 a 11 25 43

Sur cette feuille, j'ai un formulaire.

EN A18 et B18 il y a des menus déroulants qui me permettent de sélectionner une personne et une langue.

En cliquant sur un bouton, j'aimerais que le nom s'enregistre dans une des colonnes de la Feuil1 LANGUESINTERPRETES.

Instruction pour la destination : la colonne est celle dont l'en-tête porte le même nom que la langue sélectionnée dans la Feuil10 FORMULAIRE en B18.

capture d ecran 2022 11 16 a 11 22 37

Pour l'instant j'en suis là dans le code mais je ne sais pas comment indiquer la colonne que je désire.

Sub TestEnregistrerLangue()
' Macro7 Macro
Dim col As Byte

Feuil1.Unprotect 'feuille LANGUESINTERPRETES

With Feuil1.ListObjects("Tableau1") 'feuille LANGUESINTERPRETES
    If .ListRows.Count = 0 Then
        .ListRows.Add: lig = 1
    'Else: .ListRows.Add: lig = .ListRows.Count 'insérer à la dernière ligne
    Else: .ListRows.Add Position:=1: lig = 1 'insérer a la 1igne 1
    End If

    For col =  'Colonne dont l'en-tete = TEXTE SITUÉ EN "B18" dans la Feuil10 FORMULAIRE

End With

Je ne sais pas si cette manip est réalisable et pour l'instant j'ai bidouillé un truc avec des formules, mais je sais qu'à la longue ça va être lourd....

Alors merci pour vos idées !

Bonjour Cynthia75,

Pas besoin de boucle. Utiliser Find dans le code.

Langue = "ARABE"
Col = Range("A1:DC1").Find(Langue).Column

Bonjour,

Pourquoi faire un tableau aussi large avec 1 colonne par langue, au lieu de faire une colonne "Langue" et mettre "ARABE" à l'intérieur?

Il faut de préférence éviter de mettre ce genre d'information sur autant de colonne, quelle est l'utilité de ce tableau à la fin?

Pour compter le nombre d’interprètes qui parlent l'ARABE un NB.SI me semble suffire, pour afficher tous les interprètes qui parlent ARABE un filtre.

S'ils parlent plusieurs langues:

Un tableau avec les informations de l'interprète, un tableau avec une ligne par langue, le nom de l'interprète, la langue parlée.

Merci pour votre réponse @Ausecour

Pourquoi faire un tableau aussi large avec 1 colonne par langue, au lieu de faire une colonne "Langue" et mettre "ARABE" à l'intérieur?

J'ai besoin que les noms de personnes soient enregistrés dans des listes pour mon planning avec menu déroulant en cascade : si je sélectionne arabe dans la colonne F, seuls les gens parlant arabe apparaissent.

J'ai des centaines de noms à enregistrer.

capture d ecran 2022 11 16 a 13 11 53

J'aimerais bien ne pas mettre autant de colonnes puisque tu dis que c'est mauvais mais je ne crois pas que tes solutions répondent à ce dont j'ai besoin...

@XCellus

Pas besoin de boucle. Utiliser Find dans le code.

Langue = "ARABE"

Col = Range("A1:DC1").Find(Langue).Column

J'ai copié votre ligne mais ça ne doit pas être comme ça...

Sub TestEnregistrerLangue()
' Macro7 Macro
Dim col As Byte

Feuil1.Unprotect 'feuille LANGUESINTERPRETES

With Feuil1.ListObjects("Tableau13") 'feuille LANGUESINTERPRETES
    If .ListRows.Count = 0 Then
        .ListRows.Add: lig = 1
    'Else: .ListRows.Add: lig = .ListRows.Count 'insérer à la dernière ligne
    Else: .ListRows.Add Position:=1: lig = 1 'insérer a la 1igne 1
    End If

Langue = "ARABE"
col = Range("A1:DC1").Find(Langue).Column

End With
End Sub

J'ai un message d'erreur sur cette ligne

col = Range("A1:DC1").Find(Langue).Column

Merci @ExCellus

Mais avec ce code, j'ai peur que cela cherche uniquement le mot arabe. Je voudrais qu'en fonction de la langue sélectionnée (il y en a 106, soit le nombre de colonnes) on recherche le texte de la cellule B18 (le nom d'une langue donnée) puis que l'on colle le texte dans la colonne qui convient.

Par ailleurs, je suis vraiment novice en VBA donc j'ai probablement collé votre ligne n'importe où et ça me renvoie une erreur

Sub TestEnregistrerLangue()
' Macro7 Macro
Dim col As Byte

Feuil1.Unprotect 'feuille LANGUESINTERPRETES

With Feuil1.ListObjects("Tableau13") 'feuille LANGUESINTERPRETES
    If .ListRows.Count = 0 Then
        .ListRows.Add: lig = 1
    'Else: .ListRows.Add: lig = .ListRows.Count 'insérer à la dernière ligne
    Else: .ListRows.Add Position:=1: lig = 1 'insérer a la 1igne 1
    End If

Langue = "ARABE"
col = Range("A1:DC1").Find(Langue).Column

End With
End Sub

Dans ce cas je pense à une solution comme celle-ci:

Sub TestEnregistrerLangue()
Dim col As Integer, lig As Integer

With Feuil1 'feuille LANGUESINTERPRETES
    .Unprotect

    'recherche position d'export
    On Error Resume Next 'en cas d'erreur ligne suivante
    col = .Range("A1:DC1").Find(Range("B18")).Column 'range("B18") dans feuille active à savoir celle du formulaire
    On Error GoTo 0 'on remet le paramètre par défaut pour les erreurs

    If col = 0 Then
        MsgBox "La langue " & Range("B18") & " n'a pas été trouvée.", vbInformation, "Langue non trouvée"
        Exit Sub
    End If

    If .Cells(2, col) = "" Then
        lig = 2
    Else
        lig = .Cells(1, col).End(xlDown).Row + 1
    End If

    'export
    .Cells(lig, col) = Range("A18")
End With
End Sub

Je n'ai pas pu la tester donc j'espère qu'il n'y aura pas de bug...

Merci pour ton aide.

Visiblement il y a des bugs.

Voici le fichier

12formulaire1.xlsm (47.62 Ko)

Edit : ça bogue pas totalement.

Voici ce qui se passe : ça copie bien la langue quand Mohamed 4 fait de l'arabe mais si je change la langue pour "AMHARIQUE" par exemple, ça ne copie pas dans la colonne AMHARIQUE et je n'ai pas non plus de message d'erreur comme quoi la langue n'a pas été trouvée.

Bonjour,

Mon code fonctionne bien, le problème c'est que:

Le bouton appelle la macro EnregistrerLangue et non TestEnregistrerLangue, j'ai donc dû faire un clic droit dessus, affecter la macro... sélectionner le bon nom.

Ensuite aller dans la feuille où l'enregistrement se fait pour afficher la seconde ligne qui est masquée, afin qu'on voit la saisie se faire.

13formulaire1.xlsm (42.86 Ko)

Merci ! Ça fonctionne divinement bien et surtout merci pour les commentaires dans ton code qui aident à comprendre

Content que ça convienne!

Merci d'avoir passé le sujet en résolu

Salut !

J'ai un petit soucis tout de même avec ce code.

Au début j'ai cru que ça fonctionnait à merveille sauf que je me suis aperçue que les noms se collaient en dehors du tableau quand il n'y avait plus de ligne (feuille languesinterpretes).

Du coup, je me suis dit que c'était pas grave et que j'avais qu'à enlever le tableau. Sauf que depuis, mes noms de liste se décalent d'une ligne à chaque fois que je lance la macro pour enregistrer un interprète dans une langue...

Si tu veux bien jeter un oeil au "produit presque final"...

je crois que si je résous ce problème, je résous aussi celui de ma calculatrice de la feuille ISSIN

6classeur3.zip (220.14 Ko)

Bonjour,

Cette histoire de ligne qui se colle en dehors du tableau est bizarre... j'ai remis le tableau sous forme de tableau et ai essayé ma macro, et le tableau se redimensionne bien si besoin.

J'ai d'ailleurs noté que la liste des langues était incomplète, "Allemand" en est absent par exemple.

Est-ce que tu rencontres toujours le problème de ton côté avec cette version du fichier?

16classeur3.zip (208.51 Ko)

@Ausecour, le problème est résolu.Comme je suis nouvelle dans le domaine, je faisais n'importe quoi : À chaque fois que j'enregistrait mon classeur sous un autre nom, je ne faisais pas attention que le nom des macros changeait avec, et ça mettait le bazar dans tous mes classeurs. J'ai également plein de noms de boutons à supprimer, bref, beaucoup de choses à revoir. Ta macro est donc bonne, c'est juste moi qui ai fait n'importe quoi de mon côté . Mais maintenant, j'ai compris grâce à l'aide de tous les gens du forum

Merci à tous !

Rechercher des sujets similaires à "vba varier colonne destination copier coller"