Lier des colonnes au code VBA
Résolu/Fermé
stitchbouck
Messages postés
129
Date d'inscription
mercredi 12 janvier 2011
Statut
Membre
Dernière intervention
7 novembre 2024
-
1 avril 2019 à 11:18
stitchbouck Messages postés 129 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 7 novembre 2024 - 8 avril 2019 à 16:52
stitchbouck Messages postés 129 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 7 novembre 2024 - 8 avril 2019 à 16:52
A voir également:
- Lier des colonnes au code VBA
- Code asci - Guide
- Comment faire des colonnes sur word - Guide
- Code puk bloqué - Guide
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
- Code telephone oublié - Guide
2 réponses
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
1 avril 2019 à 12:18
1 avril 2019 à 12:18
Bonjour,
Le plus simple est de définir la colonne par une variable (Range de préférence) et lui attribuer la colonne à l'aide de la méthode Find en cherchant l'intitulé de colonne.
Le plus simple est de définir la colonne par une variable (Range de préférence) et lui attribuer la colonne à l'aide de la méthode Find en cherchant l'intitulé de colonne.
stitchbouck
Messages postés
129
Date d'inscription
mercredi 12 janvier 2011
Statut
Membre
Dernière intervention
7 novembre 2024
2
Modifié le 8 avril 2019 à 17:28
Modifié le 8 avril 2019 à 17:28
Et voilà !!
Merci Patrice :)
quelques exemples du code après modifs, ça fonctionne du tonnerre !
J'ai remarqué en revanche une anomalie mais qui ne provient pas de cette modif-ci. J'ouvrirai un autre topic si je ne trouve pas de solution, mais ça ne fait que ralentir le code, ça n'est pas bloquant.
en tout cas, ci dessous des exemples qui marchent, merci à toi :)
Il manque peut être des déclarations de feuilles, c'est juste pour montrer à quoi ça ressemble à la fin.
Encore merci !
Merci Patrice :)
quelques exemples du code après modifs, ça fonctionne du tonnerre !
J'ai remarqué en revanche une anomalie mais qui ne provient pas de cette modif-ci. J'ouvrirai un autre topic si je ne trouve pas de solution, mais ça ne fait que ralentir le code, ça n'est pas bloquant.
en tout cas, ci dessous des exemples qui marchent, merci à toi :)
Sub Transfert_données_tableau_complet() ' envoie les données simples (sans calcul) et les données de consommation (avec calcul). Application.ScreenUpdating = False ' Permet de masquer les actions à l'écran ' message d'avertissement début macro. Dim N As Byte, B As Byte, B = 12 N = 6 'Premières lignes à créer Dim SOdR As Worksheet Set SOdR = Sheets("Ordre de relevé") Dim SC As Worksheet Set SC = Sheets("Cuve") Dim cellule As Range Dim Colonne As Range While SOdR.Cells(N, 3) <> "" ' Importation des données ' Cuve Set cellule = SOdR.Rows(5).Find(What:="AS8C1", LookAt:=xlPart) Set Colonne = cellule.EntireColumn SC.Cells(B, 2).Value = SOdR.Cells(N, Colonne.Address).Value Set cellule = SOdR.Rows(5).Find(What:="SO8C1", LookAt:=xlPart) Set Colonne = cellule.EntireColumn SC.Cells(B, 5).Value = SOdR.Cells(N, Colonne.Address).Value ' Passage à la ligne suivante N = N + 1 B = B + 1 Wend 'fin de boucle pour transfert des données simples ' Conso antioxydant, données avec calcul Dim A As Byte A = 6 While SOdR.Cells(A, 1) <> "" Set cellule = SOdR.Rows(5).Find(What:="PCOT501", LookAt:=xlPart) Set Colonne = cellule.EntireColumn If SOdR.Cells(A, Colonne.Address).Value - SOdR.Cells(A + 1, Colonne.Address).Value < 0 Then SCA.Cells(A, 2).Value = 950 - SOdR.Cells(A + 1, Colonne.Address).Value + SOdR.Cells(A, Colonne.Address).Value Else: SCA.Cells(A, 2).Value = SOdR.Cells(A, Colonne.Address).Value - SOdR.Cells(A + 1, Colonne.Address).Value End If If SOdR.Cells(A + 1, Colonne.Address).Value = "" Then SCA.Cells(A, 2).ClearContents End If Wend End Sub
Il manque peut être des déclarations de feuilles, c'est juste pour montrer à quoi ça ressemble à la fin.
Encore merci !
Modifié le 8 avril 2019 à 17:27
Bon, si je comprends bien, avec le "find" je peux aller chercher la cellule contenant l'en tête, faire remonter le numéro de colonne et utiliser cette remontée dans ma formule de transfert de donnée...
J'ai ouvert un nouveau classeur test, la ligne 1 comprend les en têtes complètes (au moins le texte recherché), les 4 autres lignes des données en lettre et nombre, et 2 feuilles seulement : la feuil1 transfert vers la feuil2.
ça ne donne rien de probant, "variable objet non définie". je continue de réfléchir sur cette piste, mais je veux bien un guide :) je ne suis pas assez compétent, là... clairement pas...
Modifié le 1 avril 2019 à 17:03
Edit :Text est un mot réservé au VBA, il ne faut pas l'employer pour désigner une variable.
2 avril 2019 à 10:12
Alors, ça fonctionne, dans le sens où la msgbox annonce bien la colonne, mais je n'arrive pas à l'inclure dans mon calcul.
En soi, la msgbox ne m’intéresse pas, c'est inclure l'info "numéro de colonne" qui m’intéresse, quelque chose comme :
Sheets("feuil1").Cells(Colonne.Address, 2).Value = Sheets("feuil2").Cells(1, 3)
Évidemment ce code ne fonctionne pas ... Le "Split" non plus ne permet pas de résoudre ce calcul.
2 avril 2019 à 23:54
Modifié le 8 avril 2019 à 17:27
J'ai donc un code qui fonctionne même en changeant la colonne de place :) :
ça va me simplifier la vie !!
Merci Patrice !